Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ruby: dynamically generate attribute_accessor

Tags:

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 :(

like image 795
Yannick Schall Avatar asked Sep 23 '11 10:09

Yannick Schall


1 Answers

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'}} 
like image 180
rdvdijk Avatar answered Oct 21 '22 07:10

rdvdijk