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:")