diff --git a/CHANGELOG.rdoc b/CHANGELOG.rdoc index 4a7aae6c..359ce7ed 100644 --- a/CHANGELOG.rdoc +++ b/CHANGELOG.rdoc @@ -1,7 +1,6 @@ == 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/Rakefile b/Rakefile index 2ec8970a..0a525f64 100644 --- a/Rakefile +++ b/Rakefile @@ -15,7 +15,6 @@ Hoe.new("Authlogic", Authlogic::Version::STRING) do |p| p.readme_file = "README.rdoc" p.extra_rdoc_files = ["CHANGELOG.rdoc", "README.rdoc"] p.remote_rdoc_dir = '' - p.test_globs = ["test/*/test_*.rb", "test/*/*_test.rb"] + p.test_globs = ["test/*/test_*.rb", "test/*_test.rb", "test/*/*_test.rb"] p.extra_deps = %w(activesupport) - p.post_install_message = "Version 2.0 introduces some changes that break backwards compatibility. The big change is how acts_as_authentic accepts configuration options. Instead of a hash, it now accepts a block: acts_as_authentic { |c| c.my_config_option = my_value}. See the docs for more details." end \ No newline at end of file diff --git a/lib/authlogic/acts_as_authentic/base.rb b/lib/authlogic/acts_as_authentic/base.rb index 248c9d94..a412531f 100644 --- a/lib/authlogic/acts_as_authentic/base.rb +++ b/lib/authlogic/acts_as_authentic/base.rb @@ -62,8 +62,7 @@ def acts_as_authentic_modules def config(key, value, default_value = nil, read_value = nil) if value == read_value - return read_inheritable_attribute(key) if inheritable_attributes.include?(key) - write_inheritable_attribute(key, default_value) + inheritable_attributes.include?(key) ? read_inheritable_attribute(key) : default_value else write_inheritable_attribute(key, value) end @@ -73,6 +72,7 @@ def first_column_to_exist(*columns_to_check) # :nodoc: columns_to_check.each { |column_name| return column_name.to_sym if column_names.include?(column_name.to_s) } columns_to_check.first ? columns_to_check.first.to_sym : nil end + end end end diff --git a/lib/authlogic/acts_as_authentic/email.rb b/lib/authlogic/acts_as_authentic/email.rb index 6f08b044..95d69c7b 100644 --- a/lib/authlogic/acts_as_authentic/email.rb +++ b/lib/authlogic/acts_as_authentic/email.rb @@ -32,16 +32,6 @@ 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} @@ -84,9 +74,9 @@ module Methods def self.included(klass) klass.class_eval do if validate_email_field && email_field - 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) + 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 end end end diff --git a/lib/authlogic/acts_as_authentic/login.rb b/lib/authlogic/acts_as_authentic/login.rb index bbefd2c4..91fdf64c 100644 --- a/lib/authlogic/acts_as_authentic/login.rb +++ b/lib/authlogic/acts_as_authentic/login.rb @@ -29,16 +29,6 @@ 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} @@ -72,9 +62,9 @@ module Methods def self.included(klass) klass.class_eval do if validate_login_field && login_field - 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) + 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 end end end diff --git a/lib/authlogic/acts_as_authentic/password.rb b/lib/authlogic/acts_as_authentic/password.rb index 90c742bb..a1fdabc7 100644 --- a/lib/authlogic/acts_as_authentic/password.rb +++ b/lib/authlogic/acts_as_authentic/password.rb @@ -40,16 +40,6 @@ 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?} @@ -64,7 +54,7 @@ def validates_length_of_password_field_options(value = nil) # * Default: {:minimum => 4, :if => "#{password_salt_field}_changed?".to_sym} # * Accepts: Hash of options accepted by validates_confirmation_of def validates_confirmation_of_password_field_options(value = nil) - config(:validates_confirmation_of_password_field_options, value, {:minimum => 4, :if => (password_salt_field ? "#{password_salt_field}_changed?".to_sym : nil)}) + config(:validates_confirmation_of_password_field_options, value, {:minimum => 4, :if => :require_password?}) end alias_method :validates_confirmation_of_password_field_options=, :validates_confirmation_of_password_field_options @@ -130,9 +120,9 @@ module Methods def self.included(klass) klass.class_eval do if validate_password_field - 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) + 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 end end end @@ -150,6 +140,7 @@ def password=(pass) @password = pass send("#{password_salt_field}=", Authlogic::Random.friendly_token) if password_salt_field send("#{crypted_password_field}=", crypto_provider.encrypt(*encrypt_arguments(@password, act_like_restful_authentication? ? :restful_authentication : nil))) + @password_changed = true after_password_set end @@ -211,7 +202,11 @@ def encrypt_arguments(raw_password, arguments_type = nil) end def require_password? - new_record? || (password_salt_field && send("#{password_salt_field}_changed?")) || send(crypted_password_field).blank? + new_record? || password_changed? || send(crypted_password_field).blank? + end + + def password_changed? + @password_changed == true end def crypted_password_field diff --git a/lib/authlogic/test_case.rb b/lib/authlogic/test_case.rb index 69887b29..bf5683ba 100644 --- a/lib/authlogic/test_case.rb +++ b/lib/authlogic/test_case.rb @@ -1,7 +1,8 @@ -require "authlogic/test_case/controller_adapter" -require "authlogic/test_case/mock_cookie_jar" -require "authlogic/test_case/mock_request" -require "authlogic/test_case/mock_controller" +require File.dirname(__FILE__) + "/test_case/controller_adapter" +require File.dirname(__FILE__) + "/test_case/mock_cookie_jar" +require File.dirname(__FILE__) + "/test_case/mock_controller" +require File.dirname(__FILE__) + "/test_case/mock_logger" +require File.dirname(__FILE__) + "/test_case/mock_request" module Authlogic # This is a collection of methods and classes that help you easily test Authlogic. In fact, I use these same tools diff --git a/lib/authlogic/test_case/mock_controller.rb b/lib/authlogic/test_case/mock_controller.rb index b1b50286..5a9b2336 100644 --- a/lib/authlogic/test_case/mock_controller.rb +++ b/lib/authlogic/test_case/mock_controller.rb @@ -20,6 +20,10 @@ def cookies def cookie_domain nil end + + def logger + @logger ||= MockLogger.new + end def params @params ||= {} diff --git a/lib/authlogic/test_case/mock_logger.rb b/lib/authlogic/test_case/mock_logger.rb new file mode 100644 index 00000000..b8d7c3d1 --- /dev/null +++ b/lib/authlogic/test_case/mock_logger.rb @@ -0,0 +1,10 @@ +module Authlogic + module TestCase + # Simple class to replace real loggers, so that we can raise any errors being logged. + class MockLogger + def error(message) + raise message + end + end + end +end \ No newline at end of file diff --git a/lib/authlogic/test_case/mock_request.rb b/lib/authlogic/test_case/mock_request.rb index e83800ed..0bfc1472 100644 --- a/lib/authlogic/test_case/mock_request.rb +++ b/lib/authlogic/test_case/mock_request.rb @@ -1,6 +1,10 @@ module Authlogic module TestCase class MockRequest # :nodoc: + def request_method + nil + end + def remote_ip "1.1.1.1" end diff --git a/test/acts_as_authentic_test/email_test.rb b/test/acts_as_authentic_test/email_test.rb index 7713cdcd..f34512b4 100644 --- a/test/acts_as_authentic_test/email_test.rb +++ b/test/acts_as_authentic_test/email_test.rb @@ -22,17 +22,6 @@ 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 64d6fe90..30b7fc8c 100644 --- a/test/acts_as_authentic_test/login_test.rb +++ b/test/acts_as_authentic_test/login_test.rb @@ -22,17 +22,6 @@ 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 269b3825..beddc403 100644 --- a/test/acts_as_authentic_test/password_test.rb +++ b/test/acts_as_authentic_test/password_test.rb @@ -32,17 +32,6 @@ 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 @@ -55,7 +44,7 @@ def test_validates_length_of_password_field_options_config end def test_validates_confirmation_of_password_field_options_config - default = {:minimum => 4, :if => "#{User.password_salt_field}_changed?".to_sym} + default = {:minimum => 4, :if => :require_password?} assert_equal default, User.validates_confirmation_of_password_field_options assert_equal default, Employee.validates_confirmation_of_password_field_options diff --git a/test/random_test.rb b/test/random_test.rb index 1dc669d1..23b17c75 100644 --- a/test/random_test.rb +++ b/test/random_test.rb @@ -1,4 +1,4 @@ -require File.dirname(__FILE__) + '/../test_helper.rb' +require File.dirname(__FILE__) + '/test_helper.rb' class RandomTest < ActiveSupport::TestCase def test_random_tokens_have_consisten_length @@ -36,7 +36,7 @@ def with_secure_random_enabled(enabled = true) def reload_authlogic_with_sec_random!(secure_random, enabled = true) silence_warnings do secure_random.parent.const_set(secure_random.name.sub("#{secure_random.parent}::", ''), enabled ? secure_random : nil) - load(File.dirname(__FILE__) + '/../../lib/authlogic/random.rb') + load(File.dirname(__FILE__) + '/../lib/authlogic/random.rb') end end diff --git a/test/session_test/activation_test.rb b/test/session_test/activation_test.rb index aee40a73..5b8d01e0 100644 --- a/test/session_test/activation_test.rb +++ b/test/session_test/activation_test.rb @@ -7,6 +7,7 @@ def test_activated assert UserSession.activated? Authlogic::Session::Base.controller = nil assert !UserSession.activated? + debugger end def test_controller diff --git a/test/test_helper.rb b/test/test_helper.rb index fea3f9cd..97c86c65 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -2,7 +2,7 @@ require "rubygems" require "ruby-debug" require "active_record" -require 'active_record/fixtures' +require "active_record/fixtures" ActiveRecord::Schema.verbose = false ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :dbfile => ":memory:")