From: aurelianito Date: 2006-02-20T08:08:30+09:00 Subject: Re: [/QUIZ] metakoans.rb (#67) I have the longest solution shown. 50 LINES! Here it is: class Module def attribute( attrib, &block ) if attrib.is_a? String then if (block_given?) then property_with_block_init(attrib, block ) else property(attrib) end elsif attrib.is_a? Hash attrib.each_pair do |property, value| property_with_default( property, value ) end else end end def property(name) self.module_eval %Q{ attr_accessor name.to_sym def #{name}? not not #{name} end } end def property_with_block_init(name, block) property(name) self.module_eval do define_method( name.to_sym ) do if self.instance_variables.member?("@" + name) then self.instance_variable_get("@" + name) else instance_eval( &block ) end end end end def property_with_default( name, value ) property(name) self.module_eval do define_method( name.to_sym ) do if self.instance_variables.member?("@" + name) then self.instance_variable_get("@" + name) else value end end end end end