Module: Mongoid::Listable::Extensions::Object
- Defined in:
- lib/mongoid/listable/extensions/object.rb
Instance Method Summary collapse
-
#_redefine_method(name, &block) ⇒ Method
Redefine the method.
-
#around_method(name, &block) ⇒ Object
Redefines a method on owner to execute &block, passing to it as arguments the original method and its arguments.
-
#before_method(name, &block) ⇒ Object
Redefines a method on owner to first execute &block, then continue executing original method.
Instance Method Details
#_redefine_method(name, &block) ⇒ Method
Redefine the method. Will undef the method if it exists or simply just define it.
# @since 0.0.7
21 22 23 24 |
# File 'lib/mongoid/listable/extensions/object.rb', line 21 def _redefine_method name, &block undef_method(name) if method_defined?(name) define_method(name, &block) end |
#around_method(name, &block) ⇒ Object
Redefines a method on owner to execute &block, passing to it as arguments the original method and its arguments. It’s the callers’ responsibility at that point to run whatever code and return the results of the original method by calling it.
Use as an alternative to before_method if your override depends on the results of the original method. around_method will avoid the inevitable stack overflow that occurs in before_method if you call itself.
57 58 59 60 61 62 |
# File 'lib/mongoid/listable/extensions/object.rb', line 57 def around_method name, &block original_method = instance_method name _redefine_method name do |*args| instance_exec original_method, *args, &block end end |
#before_method(name, &block) ⇒ Object
Redefines a method on owner to first execute &block, then continue executing original method.
34 35 36 37 38 39 40 |
# File 'lib/mongoid/listable/extensions/object.rb', line 34 def before_method name, &block original_method = instance_method name _redefine_method name do |*args| instance_exec *args, &block original_method.bind(self).call *args end end |