Skip to content

Instantly share code, notes, and snippets.

@rebo
Created August 17, 2012 15:04
Show Gist options
  • Save rebo/3379625 to your computer and use it in GitHub Desktop.
Save rebo/3379625 to your computer and use it in GitHub Desktop.
class AttributeAccessor < Module
def initialize(name)
@name = name
@name_ivar = "@#{@name}"
end
def included(model)
super
define_accessors
end
private
def define_accessors
define_writer
define_reader
end
def define_writer
name_ivar = @name_ivar
define_method("#{@name}=") do |value|
instance_variable_set(name_ivar, value)
end
end
def define_reader
name_ivar = @name_ivar
define_method(@name) do
instance_variable_get(name_ivar)
end
end
end
class Book
include AttributeAccessor.new(:title)
def title
"#{super} + super works!" + "#{@title}"
end
end
book = Book.new
book.title = "Module Subclassing Guide"
puts book.title
@safarista
Copy link

Now thats awesome.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment