class DynaMo::OverrideMethod
Attributes
context[R]
name[R]
Public Class Methods
new(context, name, &block)
click to toggle source
# File lib/dyna_mo/override_method.rb, line 5 def initialize(context, name, &block) @context = context.to_sym @name = name.to_sym @override = block @mod = nil end
Public Instance Methods
applied_module()
click to toggle source
# File lib/dyna_mo/override_method.rb, line 13 def applied_module return @mod if @mod mod = Module.new mod.__send__(:define_method, @name, self.to_proc) @mod = mod end
to_proc()
click to toggle source
Calls superclass method
# File lib/dyna_mo/override_method.rb, line 21 def to_proc context = @context override = @override -> (*args) { Thread.current[:dynamo_contexts] ||= {} Thread.current[:dynamo_stack] ||= [] if Thread.current[:dynamo_contexts][context] Thread.current[:dynamo_stack].push(-> (*args) { super(*args) }) begin instance_exec(*args, &override) ensure Thread.current[:dynamo_stack].pop end else super(*args) end } end