From 856a4dcf1207e888b23016cac6a64582051aa0ff Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Tue, 18 Mar 2008 17:56:05 +0000 Subject: Refactor filters to use Active Support callbacks. Closes #11235. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@9055 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activerecord/lib/active_record/validations.rb | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'activerecord/lib/active_record') diff --git a/activerecord/lib/active_record/validations.rb b/activerecord/lib/active_record/validations.rb index f9888c7111..7775cf93c5 100755 --- a/activerecord/lib/active_record/validations.rb +++ b/activerecord/lib/active_record/validations.rb @@ -282,19 +282,20 @@ module ActiveRecord base.send :include, ActiveSupport::Callbacks - # TODO: Use helper ActiveSupport::Callbacks#define_callbacks instead - %w( validate validate_on_create validate_on_update ).each do |validation_method| + VALIDATIONS.each do |validation_method| base.class_eval <<-"end_eval" def self.#{validation_method}(*methods, &block) - options = methods.extract_options! - methods << block if block_given? - methods.map! { |method| Callback.new(:#{validation_method}, method, options) } - existing_methods = read_inheritable_attribute(:#{validation_method}) || [] - write_inheritable_attribute(:#{validation_method}, existing_methods | methods) + methods = CallbackChain.build(:#{validation_method}, *methods, &block) + self.#{validation_method}_callback_chain.replace(#{validation_method}_callback_chain | methods) end def self.#{validation_method}_callback_chain - read_inheritable_attribute(:#{validation_method}) || [] + if chain = read_inheritable_attribute(:#{validation_method}) + return chain + else + write_inheritable_attribute(:#{validation_method}, CallbackChain.new) + return #{validation_method}_callback_chain + end end end_eval end -- cgit v1.2.3