module MethodCallbacks::ClassMethods

Public Instance Methods

after_method(method_name, *callback_names) click to toggle source
# File lib/method_callbacks.rb, line 10
def after_method(method_name, *callback_names)
  __method_callbacks_define(method_name, :after, callback_names)
  __method_callbacks_define_with_block(method_name, :after, &Proc.new) if block_given?
end
around_method(method_name, *callback_names) click to toggle source
# File lib/method_callbacks.rb, line 15
def around_method(method_name, *callback_names)
  __method_callbacks_define(method_name, :around, callback_names)
end
before_method(method_name, *callback_names) click to toggle source
# File lib/method_callbacks.rb, line 23
def before_method(method_name, *callback_names)
  __method_callbacks_define(method_name, :before, callback_names)
  __method_callbacks_define_with_block(method_name, :before, &Proc.new) if block_given?
end
proxy_result(method_name, &block) click to toggle source
# File lib/method_callbacks.rb, line 19
def proxy_result(method_name, &block)
  __method_callbacks_define_with_block(method_name, :proxy, &block)
end

Private Instance Methods

__method_callbacks_define(method_name, type, callback_names) click to toggle source
# File lib/method_callbacks.rb, line 30
def __method_callbacks_define(method_name, type, callback_names)
  __method_callbacks_find_or_new(method_name).define(type, callback_names)
end
__method_callbacks_define_with_block(method_name, type) click to toggle source
# File lib/method_callbacks.rb, line 34
def __method_callbacks_define_with_block(method_name, type)
  __method_callbacks_find_or_new(method_name).define_with_block(type, &Proc.new)
end
__method_callbacks_find(method_name) click to toggle source
# File lib/method_callbacks.rb, line 38
def __method_callbacks_find(method_name)
  __method_callbacks_finder(method_name).find
end
__method_callbacks_find_or_new(method_name) click to toggle source
# File lib/method_callbacks.rb, line 47
def __method_callbacks_find_or_new(method_name)
  method = __method_callbacks_finder(method_name).find_or_new
  __method_callbacks_redefine_method(method)
  method
end
__method_callbacks_finder(method_name) click to toggle source
# File lib/method_callbacks.rb, line 42
def __method_callbacks_finder(method_name)
  @___method_callbacks_finder ||= {}
  @___method_callbacks_finder[method_name] ||= MethodCallbacks::Finder.new(method_name)
end
__method_callbacks_redefine_method(method) click to toggle source
# File lib/method_callbacks.rb, line 59
def __method_callbacks_redefine_method(method)
  return if !method || method.locked? || !method_defined?(method.name) || method_defined?(method.alias)

  method.lock! && alias_method(method.alias, method.name)

  define_method(method.name) do |&block|
    method.execute(:before, self)
    return_value = method.execute(:around, self) { send(method.alias) }
    return_value = method.execute(:proxy, return_value, &block)
    method.execute(:after, self)
    return_value
  end

  method.unlock!
end
method_added(method_name) click to toggle source
Calls superclass method
# File lib/method_callbacks.rb, line 53
def method_added(method_name)
  __method_callbacks_redefine_method(__method_callbacks_find(method_name))

  super
end