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