ActiveRecord-style Callback Declarations for Sequel::Model
Ruby
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
test
.document
.gitignore
LICENSE
README.rdoc
Rakefile
VERSION
sequel_simple_callbacks.gemspec

README.rdoc

sequel_simple_callbacks

This adds ActiveRecord style callback declarations to standard Sequel models.

Sequel::Model with no plugins:

class MyModel < Sequel::Model
  def before_validation
    check_something
    check_something_else
  end

  def before_save
    return unless (some_condition?)

    do_something
  end
end

Sequel::Model with SequelSimpleCallbacks plugin added:

Sequel::Model.plugin(SequelSimpleCallbacks)

class MyModel < Sequel::Model
  before_validation :check_something, :check_something_else

  before_save :do_something, :unless => :some_condition?
end

Installation

You can install the gem manually using:

gem install sequel_simple_callbacks

You also have the option to declare it in your Gemspec file if using bundler:

gem  'sequel_simple_callbacks'

Notes

If any of the callbacks returns false then additional checking will be pre-empted and the callback will return false. This will halt processing of not only the chain, but the entire operation being performed, as is the expected behavior of Sequel::Model.

Each of the callback methods takes zero or more method names to call as part of that callback cycle:

before_save :method_1, :method_2

The execution of these methods can be limited conditionally using the :if or :unless options either independently or in tandem:

before_save :method_1, :if => :working?, :unless => :on_break?

The blocks referenced by :if and :unless should return true or false, but any value that evaluates as false for :if or true for :unless will block execution of these callbacks. Note that this does not halt the callback chain.

These arguments can be combined as demonstrated here:

before_save :method_1, :method_2,
  :if => :method,
  :unless => lambda { other_method },
  :on => :create do
  check_something
end

Any blocks given are evaluated within the context of the model in question, but the model may be explicitly specified as a parameter to the block:

before_save do |model|
  model.check_something
end

It is important to node that using these class-level declarations means that the instance methods with the same name should not be defined:

before_save :do_something

def before_save
  # WARNING: This will block the :do_something method from running,
  # as this method over-rides that behavior. Calling super will not
  # restore this functionality.

  do_some_stuff

  # Execute the default behavior as defined in the class if this mixed
  # approach is strictly required. This is intended as a last-resort.
  self.class.run_callbacks(self, :before_save)
end

Copyright

Copyright © 2010 Scott Tadman, The Working Group