lib/couch_potato/persistence/callbacks.rb in langalex-couch_potato-0.1.1 vs lib/couch_potato/persistence/callbacks.rb in langalex-couch_potato-0.2.0
- old
+ new
@@ -5,32 +5,35 @@
base.extend ClassMethods
base.class_eval do
attr_accessor :skip_callbacks
def self.callbacks
- @@callbacks ||= {}
- @@callbacks[self.name] ||= {:before_validation_on_create => [],
+ @callbacks ||= {}
+ @callbacks[self.name] ||= {:before_validation_on_create => [],
:before_validation_on_update => [], :before_validation_on_save => [], :before_create => [],
:after_create => [], :before_update => [], :after_update => [],
:before_save => [], :after_save => [],
:before_destroy => [], :after_destroy => []}
end
end
end
- def save_without_callbacks
- self.skip_callbacks = true
- result = save
- self.skip_callbacks = false
- result
+ def run_callbacks(name)
+ return if skip_callbacks
+ self.class.callbacks[name].uniq.each do |callback|
+ run_callback callback
+ end
end
private
- def run_callbacks(name)
- return if skip_callbacks
- self.class.callbacks[name].each do |callback|
- self.send callback
+ def run_callback(name)
+ if name.is_a?(Symbol)
+ self.send name
+ elsif name.is_a?(Proc)
+ name.call self
+ else
+ raise "Don't know how to handle callback of type #{name.class.name}"
end
end
module ClassMethods
def before_validation_on_create(*names)
\ No newline at end of file