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