Skip to content

Instantly share code, notes, and snippets.

@jonsgreen
Created April 10, 2011 21:23
Show Gist options
  • Save jonsgreen/912737 to your computer and use it in GitHub Desktop.
Save jonsgreen/912737 to your computer and use it in GitHub Desktop.
class Object
def eigenclass
class << self
return self
end
end
end
class Person
def hello
"Hello"
end
end
module Flanderizer
def self.included(base)
def initialize
super
self.extend InstanceMethods
end
end
module InstanceMethods
def hello
"#{super}-diddly"
end
end
end
Person.send :include, Flanderizer
flanders = Person.new
puts flanders.hello # => "Hello-diddly"
puts flanders.class.ancestors.inspect # => [Person, Flanderizer, Object, Kernel];
puts flanders.eigenclass.ancestors.inspect #=> [Flanderizer::InstanceMethods, Person, Flanderizer, Object, Kernel]
##
# This works as well sending it directly to the eigenclass I believe
module Flanderizer
def self.included(base)
def initialize
super
instance_eval do
def hello
"#{super}-diddly"
end
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment