How about this?
class Object
def self.additional_data(name, value)
ivar_name = "@#{name}"
instance_variable_set(ivar_name, value)
self.class.send(:define_method, name) do
instance_variable_get(ivar_name)
end
self.class.send(:define_method, "#{name}=") do |new_value|
instance_variable_set(ivar_name, new_value)
end
end
end
class Foo
additional_data :bar, 'baz'
end
puts Foo.bar
Foo.bar = 'quux'
puts Foo.bar
This is pretty clear, but let me know if you have any questions.
source
share