From fe5324bd17d1716592b244762173e7478ebf7853 Mon Sep 17 00:00:00 2001 From: Ryan Scott Date: Fri, 19 Jul 2013 22:39:54 +1000 Subject: Wrote tests around attr, attr_reader, attr_writer, attr_accessor --- mrblib/class.rb | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'mrblib/class.rb') diff --git a/mrblib/class.rb b/mrblib/class.rb index 4f268b6c8..0678d943d 100644 --- a/mrblib/class.rb +++ b/mrblib/class.rb @@ -1,18 +1,24 @@ class Module # 15.2.2.4.13 def attr_reader(*names) - names.each{|name| - name2 = ('@'+name.to_s).intern + names.each do |name| + name = name.to_s + raise(NameError, "#{name.inspect} is not allowed as an instance variable name") if name.include?('@') || name.include?('?') || name.include?('$') + + name2 = ('@'+name).intern define_method(name){self.instance_variable_get(name2)} - } + end end # 15.2.2.4.14 def attr_writer(*names) - names.each{|name| - name2 = ('@'+name.to_s).intern - name = (name.to_s+"=").intern + names.each do |name| + name = name.to_s + raise(NameError, "#{name.inspect} is not allowed as an instance variable name") if name.include?('@') || name.include?('?') || name.include?('$') + + name2 = ('@'+name).intern + name = (name+"=").intern define_method(name){|v|self.instance_variable_set(name2,v)} - } + end end # 15.2.2.4.12 def attr_accessor(*names) -- cgit v1.2.3 From 43c0f43f1355c1d421b36f5ede7bb5c3aa6b6dd8 Mon Sep 17 00:00:00 2001 From: Ryan Scott Date: Sun, 21 Jul 2013 18:13:19 +1000 Subject: Changed the attr methods in mrblib, so that they take advantage of validating the name against a string parameter if need be --- mrblib/class.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'mrblib/class.rb') diff --git a/mrblib/class.rb b/mrblib/class.rb index 0678d943d..6d624ee83 100644 --- a/mrblib/class.rb +++ b/mrblib/class.rb @@ -5,8 +5,8 @@ class Module name = name.to_s raise(NameError, "#{name.inspect} is not allowed as an instance variable name") if name.include?('@') || name.include?('?') || name.include?('$') - name2 = ('@'+name).intern - define_method(name){self.instance_variable_get(name2)} + attr_name = '@'+name + define_method(name){self.instance_variable_get(attr_name)} end end # 15.2.2.4.14 @@ -15,9 +15,9 @@ class Module name = name.to_s raise(NameError, "#{name.inspect} is not allowed as an instance variable name") if name.include?('@') || name.include?('?') || name.include?('$') - name2 = ('@'+name).intern + attr_name = '@'+name name = (name+"=").intern - define_method(name){|v|self.instance_variable_set(name2,v)} + define_method(name){|v|self.instance_variable_set(attr_name,v)} end end # 15.2.2.4.12 -- cgit v1.2.3