I'm trying to generate the attr_reader from a hash (with nested hash) so that it mirror the instance_variable creation automatically.
here is what i have so far:
data = {:@datetime => '2011-11-23', :@duration => '90', :@class => {:@price => '£7', :@level => 'all'}} class Event #attr_reader :datetime, :duration, :class, :price, :level def init(data, recursion) data.each do |name, value| if value.is_a? Hash init(value, recursion+1) else instance_variable_set(name, value) #bit missing: attr_accessor name.to_sym end end end
But i can't find out a way to do that :(
You need to call the (private) class method attr_accessor
on the Event
class:
self.class.send(:attr_accessor, name)
I recommend you add the @
on this line:
instance_variable_set("@#{name}", value)
And don't use them in the hash.
data = {:datetime => '2011-11-23', :duration => '90', :class => {:price => '£7', :level => 'all'}}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With