1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Use define_callbacks helper for ActiveRecord validations.

This commit is contained in:
Joshua Peek 2008-04-20 11:45:44 -05:00
parent 14a40804a2
commit 46ab7422d9
4 changed files with 25 additions and 57 deletions

View file

@ -3,23 +3,7 @@ module ActiveModel
def self.included(base) # :nodoc:
base.extend(ClassMethods)
base.send!(:include, ActiveSupport::Callbacks)
%w( validate validate_on_create validate_on_update ).each do |validation_method|
base.class_eval <<-"end_eval"
def self.#{validation_method}(*methods, &block)
self.#{validation_method}_callback_chain | CallbackChain.build(:#{validation_method}, *methods, &block)
end
def self.#{validation_method}_callback_chain
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
base.define_callbacks :validate, :validate_on_create, :validate_on_update
end
module ClassMethods

View file

@ -281,23 +281,7 @@ module ActiveRecord
end
base.send :include, ActiveSupport::Callbacks
VALIDATIONS.each do |validation_method|
base.class_eval <<-"end_eval"
def self.#{validation_method}(*methods, &block)
self.#{validation_method}_callback_chain | CallbackChain.build(:#{validation_method}, *methods, &block)
end
def self.#{validation_method}_callback_chain
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
base.define_callbacks *VALIDATIONS
end
# All of the following validations are defined in the class scope of the model that you're interested in validating.

View file

@ -58,9 +58,9 @@ class ValidationsTest < ActiveRecord::TestCase
fixtures :topics, :developers, 'warehouse-things'
def setup
Topic.write_inheritable_attribute(:validate, nil)
Topic.write_inheritable_attribute(:validate_on_create, nil)
Topic.write_inheritable_attribute(:validate_on_update, nil)
Topic.instance_variable_set("@validate_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
Topic.instance_variable_set("@validate_on_create_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
Topic.instance_variable_set("@validate_on_update_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
end
def test_single_field_validation
@ -1351,9 +1351,9 @@ class ValidatesNumericalityTest < ActiveRecord::TestCase
JUNK = ["not a number", "42 not a number", "0xdeadbeef", "00-1", "--3", "+-3", "+3-1", "-+019.0", "12.12.13.12", "123\nnot a number"]
def setup
Topic.write_inheritable_attribute(:validate, nil)
Topic.write_inheritable_attribute(:validate_on_create, nil)
Topic.write_inheritable_attribute(:validate_on_update, nil)
Topic.instance_variable_set("@validate_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
Topic.instance_variable_set("@validate_on_create_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
Topic.instance_variable_set("@validate_on_update_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
end
def test_default_validates_numericality_of

View file

@ -99,8 +99,8 @@ module ActiveSupport
def |(chain)
if chain.is_a?(CallbackChain)
chain.each { |callback| self | callback }
elsif chain.is_a?(Callback)
if index = index(chain)
else
if (found_callback = find(chain)) && (index = index(chain))
self[index] = chain
else
self << chain