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