lib/active_model/validations/confirmation.rb in activemodel-3.0.0.beta4 vs lib/active_model/validations/confirmation.rb in activemodel-3.0.pre
- old
+ new
@@ -1,20 +1,8 @@
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
-
- def setup(klass)
- klass.send(:attr_accessor, *attributes.map { |attribute| :"#{attribute}_confirmation" })
- end
- end
-
- module HelperMethods
+ module ClassMethods
# Encapsulates the pattern of wanting to validate a password or email address field with a confirmation. Example:
#
# Model:
# class Person < ActiveRecord::Base
# validates_confirmation_of :user_name, :password
@@ -40,10 +28,18 @@
# method, proc or string should return or evaluate to a true or false value.
# * <tt>:unless</tt> - Specifies a method, proc or string to call to determine if the validation should
# 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)
- validates_with ConfirmationValidator, _merge_attributes(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
end
end
end
end