Dynamic Attributes

Posted On Thu, 24 Nov 2011 07:59:13 +0000. Filed in meta-programming. By Vaibhav Bhandari.

Domain Specific Languages in ruby are easily possible owing to the ability to add attribute methods on the Module class.

You might have seen :

class Module
  def attribute(*attribs)
    attribs.each do |a|
      define_method(a) { instance_variable_get("@#{a}") }
      define_method("#{a}=") { |val| instance_variable_set("@#{a}", val) }
    end
  end
end

class Person
  attribute :name, :email
end

person = Person.new
person.name = "Gregory Brown"

p person.name #=<span class="kwrd">></span> "Gregory Brown"

Related posts you may enjoy: