class MethodObserver
Constants
- VERSION
Public Class Methods
after(&block)
click to toggle source
# File lib/method_observer.rb, line 17 def after(&block) @after = block end
around(&block)
click to toggle source
# File lib/method_observer.rb, line 21 def around(&block) @around = block end
before(&block)
click to toggle source
# File lib/method_observer.rb, line 13 def before(&block) @before = block end
observe(klass, options)
click to toggle source
# File lib/method_observer.rb, line 25 def observe(klass, options) options.fetch(:instance, []).each do |method| observe_instance_method klass, method end options.fetch(:class, []).each do |method| observe_class_method klass, method end end
Private Class Methods
observe_class_method(klass, method)
click to toggle source
# File lib/method_observer.rb, line 55 def observe_class_method(klass, method) observe_before = @before observe_after = @after observe_around = @around observed_method = "__#{method}_observed__" klass.singleton_class.send :alias_method, observed_method, method klass.send(:define_singleton_method, method) do |*args, &block| observe_before.call klass, :class, method, args result = observe_around.call klass, :class, method, args do send observed_method, *args, &block end observe_after.call klass, :class, method, args result end end
observe_instance_method(klass, method)
click to toggle source
# File lib/method_observer.rb, line 37 def observe_instance_method(klass, method) observe_before = @before observe_after = @after observe_around = @around observed_method = "__#{method}_observed__" klass.send :alias_method, observed_method, method klass.send(:define_method, method) do |*args, &block| observe_before.call klass, :instance, method, args result = observe_around.call klass, :instance, method, args do send observed_method, *args, &block end observe_after.call klass, :instance, method, args result end end