Allows to create methods with same name inside particular class/object by pushing them down by inheritance tree.
So method "field" may call other "field" in same class by calling super keyword instead of just redefine it.
gem install inheritance_module_eval
Inheritance module_eval provides 2 methods for eval instance and class methods:
-
instance_eval_on
-
class_eval_on
InheritanceModuleEval.instance_eval_on(instance_object, code = nil, &block) #method used to eval instance methods (ie: methods of an object) InheritanceModuleEval.class_eval_on(class_object, code = nil, &block) #method used to eval class methods (ie: methods of an class)
Note: you may include
require "inheritance_module_eval/integration"
to intergate inheritance_module_eval in ruby core. That will give 2 methods:
- instance_module_eval(code = nil, &block)
- class_module_eval(code = nil, &block)
Below is some simple example of inheritance_module_eval usage:
require 'inheritance_module_eval'
require "inheritance_module_eval/integration"
# Some dummy class that uses #instance_module_eval
class Content
# defines simple getter and setter
self.field(name)
instance_module_eval %{
def #{name}
@#{name}
end
def #{name}=(new_value)
@#{name}= new_value
end
}
end
end
end
class Article < Content
field :title
field :content
field :etc
# you desided, that title for article should be titelized
# from now you dont need to call alias_method or reimplement method anymore!
# you can use inheritance!
# make it simple
def title
super.to_s.titelize
end
end
none
rspec2 for testing
tested with Ruby
- 1.8.7
- 1.9.2
- 1.9.3
- jruby-19mode
- jruby-18mode
- rbx-19mode
- rbx-18mode
- ruby-head
- ree
see build history
Copyright © 2011-2012 Alexander N Paramonov. Released under the MIT License. See the LICENSE file for further details.