class MethodCallbacks::Executor

Attributes

method[R]
object[R]
type[R]

Public Class Methods

new(method, type, object) click to toggle source
# File lib/method_callbacks/executor.rb, line 5
def initialize(method, type, object)
  @method = method
  @type = type
  @object = object
end

Public Instance Methods

execute(&block) click to toggle source
# File lib/method_callbacks/executor.rb, line 11
def execute(&block)
  case type
  when :proxy
    execute_proxy_callbacks(&block)
  when :around
    execute_around_callbacks(&block)
  else
    execute_callbacks
  end
end

Private Instance Methods

callbacks() click to toggle source
# File lib/method_callbacks/executor.rb, line 24
def callbacks
  method.callbacks(type)
end
execute_around_callbacks() click to toggle source
# File lib/method_callbacks/executor.rb, line 28
def execute_around_callbacks
  callbacks.reverse.reduce(Proc.new) { |block, callback_name| Proc.new { object.send(callback_name, &block) } }.call
end
execute_callbacks() click to toggle source
# File lib/method_callbacks/executor.rb, line 32
def execute_callbacks
  callbacks.each { |callback_name| callback_name.is_a?(Proc) ? object.instance_eval(&callback_name) : object.send(callback_name) }
end
execute_proxy_callbacks(&block_on_call) click to toggle source
# File lib/method_callbacks/executor.rb, line 36
def execute_proxy_callbacks(&block_on_call)
  callbacks.reduce(object) { |result, block| block.call(result, &block_on_call) }
end