From 74166e224b4d5879e68163e5ea410e30c0bf5e57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Tue, 15 Mar 2011 12:52:53 +0100 Subject: [PATCH] Faster uniqueness queries, closes #917 --- CHANGELOG.rdoc | 1 + lib/devise.rb | 4 ++-- lib/devise/models/authenticatable.rb | 4 ++-- lib/devise/models/database_authenticatable.rb | 2 +- lib/devise/models/validatable.rb | 2 +- 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.rdoc b/CHANGELOG.rdoc index 54502222..ef2b4dc9 100644 --- a/CHANGELOG.rdoc +++ b/CHANGELOG.rdoc @@ -1,5 +1,6 @@ * bug fix * Properly ignore path prefix on omniauthable + * Faster uniqueness queries == 1.2.rc2 diff --git a/lib/devise.rb b/lib/devise.rb index e02bf50e..fef21886 100644 --- a/lib/devise.rb +++ b/lib/devise.rb @@ -70,9 +70,9 @@ module Devise @@request_keys = [] # Keys that should be case-insensitive. - # Empty by default for backwards compatibility. + # False by default for backwards compatibility. mattr_accessor :case_insensitive_keys - @@case_insensitive_keys = [] + @@case_insensitive_keys = false # If http authentication is enabled by default. mattr_accessor :http_authenticatable diff --git a/lib/devise/models/authenticatable.rb b/lib/devise/models/authenticatable.rb index dac1a263..c77873a4 100644 --- a/lib/devise/models/authenticatable.rb +++ b/lib/devise/models/authenticatable.rb @@ -101,7 +101,7 @@ module Devise # def find_for_authentication(conditions) filter_auth_params(conditions) - case_insensitive_keys.each { |k| conditions[k].try(:downcase!) } + (case_insensitive_keys || []).each { |k| conditions[k].try(:downcase!) } to_adapter.find_first(conditions) end @@ -112,7 +112,7 @@ module Devise # Find an initialize a group of attributes based on a list of required attributes. def find_or_initialize_with_errors(required_attributes, attributes, error=:invalid) #:nodoc: - case_insensitive_keys.each { |k| attributes[k].try(:downcase!) } + (case_insensitive_keys || []).each { |k| attributes[k].try(:downcase!) } attributes = attributes.slice(*required_attributes) attributes.delete_if { |key, value| value.blank? } diff --git a/lib/devise/models/database_authenticatable.rb b/lib/devise/models/database_authenticatable.rb index 23f720f1..57bba4b7 100644 --- a/lib/devise/models/database_authenticatable.rb +++ b/lib/devise/models/database_authenticatable.rb @@ -78,7 +78,7 @@ module Devise # Downcase case-insensitive keys def downcase_keys - self.class.case_insensitive_keys.each { |k| self[k].try(:downcase!) } + (self.class.case_insensitive_keys || []).each { |k| self[k].try(:downcase!) } end # Digests the password using bcrypt. diff --git a/lib/devise/models/validatable.rb b/lib/devise/models/validatable.rb index 1850f6dd..34636381 100644 --- a/lib/devise/models/validatable.rb +++ b/lib/devise/models/validatable.rb @@ -24,7 +24,7 @@ module Devise base.class_eval do validates_presence_of :email, :if => :email_required? validates_uniqueness_of :email, :scope => authentication_keys[1..-1], - :case_sensitive => case_insensitive_keys.exclude?(:email), :allow_blank => true + :case_sensitive => (case_insensitive_keys != false), :allow_blank => true validates_format_of :email, :with => email_regexp, :allow_blank => true with_options :if => :password_required? do |v|