DEV Community

Discussion on: Ruby Getters and Setters

Collapse
 
nkroker profile image
Nikhil Kumar Tyagi

I have a question how to generate this getter dynamically, for example you get a string argument and you have to generate a setter method for it which sets an instance variable which gets triggered when someone assign a value to it

class Movie
  def generate_accessors(name, value)
    generate_setter(name, value)
    generate_getter(name, value)
  end

  def generate_getter(name, value)
    self.class.send(:define_method, name) do
      value
    end
  end

  def generate_setter(name, value)
    # Here we need to generate that setter dynamically
    # def name=(name, value) #setter method
    #   instance_variable_set("@#{name}", value)
    # end
  end
end

obj1 = Movie.new
obj1.generate_accessors('foo', 'bar')
obj1.foo                         # ==> 'bar'
obj1 .foo = 'something'  # ==> This should trigger that setter
Enter fullscreen mode Exit fullscreen mode