aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel/lib/active_model/validations.rb
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2009-08-07 16:10:17 +0200
committerJosé Valim <jose.valim@gmail.com>2009-08-07 16:10:17 +0200
commitdac8927b0576bff89ba3a4fcbf502dffc9b39e89 (patch)
tree58c25132a52ef5cc56f406f8e2df416c5f2776a6 /activemodel/lib/active_model/validations.rb
parent072c87b532a0bfb334787928248863a2561dc849 (diff)
parent606e950ccbd02a10f724c73543575a2a4e1ed8cb (diff)
downloadrails-dac8927b0576bff89ba3a4fcbf502dffc9b39e89.tar.gz
rails-dac8927b0576bff89ba3a4fcbf502dffc9b39e89.tar.bz2
rails-dac8927b0576bff89ba3a4fcbf502dffc9b39e89.zip
Merge branch 'master' of git://github.com/rails/rails into old
Diffstat (limited to 'activemodel/lib/active_model/validations.rb')
-rw-r--r--activemodel/lib/active_model/validations.rb24
1 files changed, 23 insertions, 1 deletions
diff --git a/activemodel/lib/active_model/validations.rb b/activemodel/lib/active_model/validations.rb
index 54a869396d..7d49e60790 100644
--- a/activemodel/lib/active_model/validations.rb
+++ b/activemodel/lib/active_model/validations.rb
@@ -66,7 +66,7 @@ module ActiveModel
# Declare the validation.
send(validation_method(options[:on]), options) do |record|
attrs.each do |attr|
- value = record.send(attr)
+ value = record.send(:read_attribute_for_validation, attr)
next if (value.nil? && options[:allow_nil]) || (value.blank? && options[:allow_blank])
yield record, attr, value
end
@@ -95,6 +95,28 @@ module ActiveModel
def invalid?
!valid?
end
+
+ protected
+ # Hook method defining how an attribute value should be retieved. By default this is assumed
+ # to be an instance named after the attribute. Override this method in subclasses should you
+ # need to retrieve the value for a given attribute differently e.g.
+ # class MyClass
+ # include ActiveModel::Validations
+ #
+ # def initialize(data = {})
+ # @data = data
+ # end
+ #
+ # private
+ #
+ # def read_attribute_for_validation(key)
+ # @data[key]
+ # end
+ # end
+ #
+ def read_attribute_for_validation(key)
+ send(key)
+ end
end
end