diff options
author | José Valim <jose.valim@gmail.com> | 2009-12-23 00:36:51 +0100 |
---|---|---|
committer | José Valim <jose.valim@gmail.com> | 2009-12-23 00:36:51 +0100 |
commit | f1085f41287687835659fa23079080204fe32e96 (patch) | |
tree | 8d8899c556c2b4aec9e377f842c15fe0a51416fd /activemodel/lib/active_model/validations/confirmation.rb | |
parent | 2476c5312dcbd29f49672f71617a3d34c6a60cc7 (diff) | |
download | rails-f1085f41287687835659fa23079080204fe32e96.tar.gz rails-f1085f41287687835659fa23079080204fe32e96.tar.bz2 rails-f1085f41287687835659fa23079080204fe32e96.zip |
Move validations in ActiveModel to validators, however all validatity checks are still in the class method.
Diffstat (limited to 'activemodel/lib/active_model/validations/confirmation.rb')
-rw-r--r-- | activemodel/lib/active_model/validations/confirmation.rb | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/activemodel/lib/active_model/validations/confirmation.rb b/activemodel/lib/active_model/validations/confirmation.rb index d414224dd2..b06effdceb 100644 --- a/activemodel/lib/active_model/validations/confirmation.rb +++ b/activemodel/lib/active_model/validations/confirmation.rb @@ -1,5 +1,13 @@ module ActiveModel module Validations + class ConfirmationValidator < EachValidator + def validate_each(record, attribute, value) + confirmed = record.send(:"#{attribute}_confirmation") + return if confirmed.nil? || value == confirmed + record.errors.add(attribute, :confirmation, :default => options[:message]) + end + end + module ClassMethods # Encapsulates the pattern of wanting to validate a password or email address field with a confirmation. Example: # @@ -30,15 +38,9 @@ module ActiveModel # not occur (e.g. <tt>:unless => :skip_validation</tt>, or <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>). The # method, proc or string should return or evaluate to a true or false value. def validates_confirmation_of(*attr_names) - configuration = attr_names.extract_options! - - attr_accessor(*(attr_names.map { |n| "#{n}_confirmation" })) - - validates_each(attr_names, configuration) do |record, attr_name, value| - unless record.send("#{attr_name}_confirmation").nil? or value == record.send("#{attr_name}_confirmation") - record.errors.add(attr_name, :confirmation, :default => configuration[:message]) - end - end + options = attr_names.extract_options! + attr_accessor(*(attr_names.map { |n| :"#{n}_confirmation" })) + validates_with ConfirmationValidator, options.merge(:attributes => attr_names) end end end |