Skip to content
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Generic hooks with callbacks for Ruby.

Hooks lets you define hooks declaratively in your ruby class. You can add callbacks to your hook, which will be run as soon as you run the hook!

It’s almost like ActiveSupport::Callbacks but 76,6% less complex. Instead, it is not more than 60 lines of code, one method compilation, no method_missing and no magic.

Also, you may pass additional arguments to your callbacks when invoking a hook.

Let’s take… a cat.

require 'hooks'

class Cat
  include Hooks

  define_hook :after_dinner

Now you can add callbacks to your hook declaratively in your class.

after_dinner do
  puts "Ice cream!"
end

after_dinner :have_a_desert   # => refers to Cat#have_a_desert

def have_a_desert
  puts "Hell, yeah!"
end

Running the callbacks happens on instances. It will run the block and #have_a_desert from above.

cat.run_hook :after_dinner
# => Ice cream!
     Hell, yeah!

Hooks are inherited, here’s a complete example to put it all together.

class Garfield < Cat

  after_dinner :want_some_more

  def want_some_more
    puts "Is that all?"
  end
end

Garfield.new.run_hook :after_dinner
# => Ice cream!
     Hell, yeah!
     Is that all?

Note how the callbacks are invoked in the order they were inherited.

You’re free to pass any number of arguments to #run_callback, those will be passed to the callbacks.

cat.run_hook :before_dinner, cat, Time.now

The callbacks should be ready for receiving parameters.

before_dinner :wash_pawns
before_dinner do |who, when|
  ...
end

def wash_pawns(who, when)

Not sure why a cat should have ice cream for dinner. Beside that, I was tempted naming this gem hooker.

gem install hooks
  • Hooks is already used in [Apotomo:github.com/apotonick/apotomo], a hot widget framework for Rails. Look at lib/apotomo/widget.rb for examples and into lib/apotomo/tree_node.rb to learn how modules-driven code might benefit from hooks.

Copyright © 2010, Nick Sutterer

Released under the MIT License.

About

Generic hooks with callbacks for Ruby.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages