diff --git a/CHANGELOG.rdoc b/CHANGELOG.rdoc index 359ce7ed..4a7aae6c 100644 --- a/CHANGELOG.rdoc +++ b/CHANGELOG.rdoc @@ -1,6 +1,7 @@ == 2.0.5 * Stub out authenticate_with_http_basic for TestCase::Controller adapter. +* Added validates_login_field_options, validates_email_field_options, and validates_password_field_options to apply universal options for each fields validation calls. == 2.0.4 released 2009-3-28 diff --git a/lib/authlogic/acts_as_authentic/email.rb b/lib/authlogic/acts_as_authentic/email.rb index 95d69c7b..6f08b044 100644 --- a/lib/authlogic/acts_as_authentic/email.rb +++ b/lib/authlogic/acts_as_authentic/email.rb @@ -32,6 +32,16 @@ def validate_email_field(value = nil) end alias_method :validate_email_field=, :validate_email_field + # This allows you to set options to be applied to ANY of the validations called on the email field. So only use options + # that are universally supported by all of the validation functions. Such as :if or :unless, etc. + # + # * Default: {} + # * Accepts: A hash of options universally supported by the validation func + def validates_email_field_options(value = nil) + config(:validates_email_field_options, value, {}) + end + alias_method :validates_email_field_options=, :validates_email_field_options + # A hash of options for the validates_length_of call for the email field. Allows you to change this however you want. # # * Default: {:within => 6..100} @@ -74,9 +84,9 @@ module Methods def self.included(klass) klass.class_eval do if validate_email_field && email_field - validates_length_of email_field, validates_length_of_email_field_options - validates_format_of email_field, validates_format_of_email_field_options - validates_uniqueness_of email_field, validates_uniqueness_of_email_field_options + validates_length_of email_field, validates_email_field_options.merge(validates_length_of_email_field_options) + validates_format_of email_field, validates_email_field_options.merge(validates_format_of_email_field_options) + validates_uniqueness_of email_field, validates_email_field_options.merge(validates_uniqueness_of_email_field_options) end end end diff --git a/lib/authlogic/acts_as_authentic/login.rb b/lib/authlogic/acts_as_authentic/login.rb index 91fdf64c..bbefd2c4 100644 --- a/lib/authlogic/acts_as_authentic/login.rb +++ b/lib/authlogic/acts_as_authentic/login.rb @@ -29,6 +29,16 @@ def validate_login_field(value = nil) end alias_method :validate_login_field=, :validate_login_field + # This allows you to set options to be applied to ANY of the validations called on the login field. So only use options + # that are universally supported by all of the validation functions. Such as :if or :unless, etc. + # + # * Default: {} + # * Accepts: A hash of options universally supported by the validation func + def validates_login_field_options(value = nil) + config(:validates_login_field_options, value, {}) + end + alias_method :validates_login_field_options=, :validates_login_field_options + # A hash of options for the validates_length_of call for the login field. Allows you to change this however you want. # # * Default: {:within => 6..100} @@ -62,9 +72,9 @@ module Methods def self.included(klass) klass.class_eval do if validate_login_field && login_field - validates_length_of login_field, validates_length_of_login_field_options - validates_format_of login_field, validates_format_of_login_field_options - validates_uniqueness_of login_field, validates_uniqueness_of_login_field_options + validates_length_of login_field, validates_login_field_options.merge(validates_length_of_login_field_options) + validates_format_of login_field, validates_login_field_options.merge(validates_format_of_login_field_options) + validates_uniqueness_of login_field, validates_login_field_options.merge(validates_uniqueness_of_login_field_options) end end end diff --git a/lib/authlogic/acts_as_authentic/password.rb b/lib/authlogic/acts_as_authentic/password.rb index 020e55cd..90c742bb 100644 --- a/lib/authlogic/acts_as_authentic/password.rb +++ b/lib/authlogic/acts_as_authentic/password.rb @@ -40,6 +40,16 @@ def validate_password_field(value = nil) end alias_method :validate_password_field=, :validate_password_field + # This allows you to set options to be applied to ANY of the validations called on the password field. So only use options + # that are universally supported by all of the validation functions. Such as :if or :unless, etc. + # + # * Default: {} + # * Accepts: A hash of options universally supported by the validation func + def validates_password_field_options(value = nil) + config(:validates_password_field_options, value, {}) + end + alias_method :validates_password_field_options=, :validates_password_field_options + # A hash of options for the validates_length_of call for the password field. Allows you to change this however you want. # # * Default: {:minimum => 4, :if => :require_password?} @@ -120,9 +130,9 @@ module Methods def self.included(klass) klass.class_eval do if validate_password_field - validates_length_of :password, validates_length_of_password_field_options - validates_confirmation_of :password, validates_confirmation_of_password_field_options - validates_length_of :password_confirmation, validates_length_of_password_confirmation_field_options + validates_length_of :password, validates_password_field_options.merge(validates_length_of_password_field_options) + validates_confirmation_of :password, validates_password_field_options.merge(validates_confirmation_of_password_field_options) + validates_length_of :password_confirmation, validates_password_field_options.merge(validates_length_of_password_confirmation_field_options) end end end diff --git a/test/acts_as_authentic_test/email_test.rb b/test/acts_as_authentic_test/email_test.rb index f34512b4..7713cdcd 100644 --- a/test/acts_as_authentic_test/email_test.rb +++ b/test/acts_as_authentic_test/email_test.rb @@ -22,6 +22,17 @@ def test_validate_email_field_config assert User.validate_email_field end + def test_validates_email_field_options_config + default = {} + assert_equal default, User.validates_email_field_options + assert_equal default, Employee.validates_email_field_options + + User.validates_email_field_options = {:yes => "no"} + assert_equal({:yes => "no"}, User.validates_email_field_options) + User.validates_email_field_options default + assert_equal default, User.validates_email_field_options + end + def test_validates_length_of_email_field_options_config assert_equal({:within => 6..100}, User.validates_length_of_email_field_options) assert_equal({:within => 6..100}, Employee.validates_length_of_email_field_options) diff --git a/test/acts_as_authentic_test/login_test.rb b/test/acts_as_authentic_test/login_test.rb index 30b7fc8c..64d6fe90 100644 --- a/test/acts_as_authentic_test/login_test.rb +++ b/test/acts_as_authentic_test/login_test.rb @@ -22,6 +22,17 @@ def test_validate_login_field_config assert User.validate_login_field end + def test_validates_login_field_options_config + default = {} + assert_equal default, User.validates_login_field_options + assert_equal default, Employee.validates_login_field_options + + User.validates_login_field_options = {:yes => "no"} + assert_equal({:yes => "no"}, User.validates_login_field_options) + User.validates_login_field_options default + assert_equal default, User.validates_login_field_options + end + def test_validates_length_of_login_field_options_config assert_equal({:within => 3..100}, User.validates_length_of_login_field_options) assert_equal({:within => 3..100}, Employee.validates_length_of_login_field_options) diff --git a/test/acts_as_authentic_test/password_test.rb b/test/acts_as_authentic_test/password_test.rb index fcf3472a..269b3825 100644 --- a/test/acts_as_authentic_test/password_test.rb +++ b/test/acts_as_authentic_test/password_test.rb @@ -32,6 +32,17 @@ def test_validate_password_field_config assert User.validate_password_field end + def test_validates_password_field_options_config + default = {} + assert_equal default, User.validates_password_field_options + assert_equal default, Employee.validates_password_field_options + + User.validates_password_field_options = {:yes => "no"} + assert_equal({:yes => "no"}, User.validates_password_field_options) + User.validates_password_field_options default + assert_equal default, User.validates_password_field_options + end + def test_validates_length_of_password_field_options_config default = {:minimum => 4, :if => :require_password?} assert_equal default, User.validates_length_of_password_field_options