Easy Callbacks

Provides callback support for Ruby classes.

Example

For a given class:

class SomeClass

  def some_method(some_arg)
    puts "some_method: #{some_arg}"
  end

  def before_some_method(some_arg)
    puts "before_some_method: #{some_arg}"
  end

  def around_some_method(some_arg)
    puts "around_some_method: #{some_arg}"
  end

end

EasyCallbacks.configure(SomeClass) do

  # named callback
  before :some_method, :before_some_method

  # named callback
  around :some_method, :around_some_method

  # anonymous callback
  after  :some_method do
    puts "after_some_method: #{call_args[0]}"
  end

end

This call:

SomeClass.new.some_method :some_arg

Produces this output:

before_some_method: hue
some_method: hue
around_some_method: hue
after_some_method: hue

Helper Methods

Inside a callback block/method, you can call three helper methods:

call_args        # returns original arguments given to the call
call_block       # returns original block given to the call
callback_details # returns details of callback execution

Callback Details

The ‘callback_details` helper method will return:

{
    target_class: SomeClass,
    callback_type: :around,
    target_method_name: :some_method,
    callback_method_name: :around_some_method,
    callback_block: nil,
    return_type: :success, # exclusive for `around` callbacks
    return_object: nil     # exclusive for `around` callbacks
}

Module inclusion

You can call ‘before`, `around` and `after` methods directly instead of calling them inside of `EasyCallbacks.configure` block. Just include `EasyCallbacks` module:

class SomeClass

  def some_method(some_arg)
    puts "some_method: #{some_arg}"
  end

  def before_some_method(some_arg)
    puts "before_some_method: #{some_arg}"
  end

  def around_some_method(some_arg)
    puts "around_some_method: #{some_arg}"
  end

  include EasyCallbacks

  before :some_method, :before_some_method

  around :some_method, :around_some_method

  after  :some_method do
    puts "after_some_method: #{call_args[0]}"
  end

end

Singleton Classes Support

It works too:

class SomeClass

  class << self

    def some_method(some_arg)
      puts "some_method: #{some_arg}"
    end

    def before_some_method(some_arg)
      puts "before_some_method: #{some_arg}"
    end

    def around_some_method(some_arg)
      puts "around_some_method: #{some_arg}"
    end

    include EasyCallbacks

    before :some_method, :before_some_method

    around :some_method, :around_some_method

    after  :some_method do
      puts "after_some_method: #{call_args[0]}"
    end

  end

end

SomeClass.some_method :hue

More

To see more of ‘EasyCallbacks` usages, please take a look at DummyClass.

<img src=“https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif” alt=“Donate” />