lib/ripple/callbacks.rb in ripple-0.9.5 vs lib/ripple/callbacks.rb in ripple-1.0.0.beta
- old
+ new
@@ -1,31 +1,19 @@
-# Copyright 2010 Sean Cribbs, Sonian Inc., and Basho Technologies, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
require 'active_support/concern'
require 'active_model/callbacks'
module Ripple
# Adds lifecycle callbacks to {Ripple::Document} models, in the typical
# ActiveModel fashion.
module Callbacks
extend ActiveSupport::Concern
+ CALLBACK_TYPES = [:create, :update, :save, :destroy, :validation]
+
included do
extend ActiveModel::Callbacks
- define_model_callbacks :create, :update, :save, :destroy
+ define_model_callbacks *(CALLBACK_TYPES - [:validation])
define_callbacks :validation, :terminator => "result == false", :scope => [:kind, :name]
end
module ClassMethods
# Defines a callback to be run before validations.
@@ -51,13 +39,19 @@
# @private
module InstanceMethods
# @private
def really_save(*args, &block)
+ run_save_callbacks do
+ super
+ end
+ end
+
+ def run_save_callbacks
state = new? ? :create : :update
run_callbacks(:save) do
run_callbacks(state) do
- super
+ yield
end
end
end
# @private