Simplified logic for checking if the email is present and moved the Mongoid classes out of eval statements

This commit is contained in:
Jeffrey Jones 2011-02-10 16:10:04 +08:00 committed by José Valim
parent 0287d8cc80
commit cb5e0c4a7b
2 changed files with 21 additions and 10 deletions

View File

@ -15,8 +15,7 @@ module Devise
def database_authenticatable(options={})
null = options[:null] || false
default = options.key?(:default) ? options[:default] : ("" if null == false)
include_email = !self.respond_to?(:authentication_keys) \
|| (self.respond_to?(:authentication_keys) && self.authentication_keys.include?(:email))
include_email = !self.respond_to?(:authentication_keys) || self.authentication_keys.include?(:email)
apply_devise_schema :email, String, :null => null, :default => default if include_email
apply_devise_schema :encrypted_password, String, :null => null, :default => default, :limit => 128

View File

@ -1,21 +1,33 @@
require 'test_helper'
if DEVISE_ORM == :mongoid
class SchemaTest < ActiveSupport::TestCase
if DEVISE_ORM == :mongoid
require 'test_helper'
class User2
include Mongoid::Document
devise :database_authenticatable
end
class User3
include Mongoid::Document
devise :database_authenticatable, :authentication_keys => [:username, :email]
end
class User4
include Mongoid::Document
devise :database_authenticatable, :authentication_keys => [:username]
end
class SchemaTest < ActiveSupport::TestCase
test 'should create an email field if there are no custom authentication keys' do
eval "class User2; include Mongoid::Document; devise :database_authenticatable; end"
assert_not_equal User2.fields['email'], nil
end
test 'should create an email field if there are custom authentication keys and they include email' do
eval "class User3; include Mongoid::Document; devise :database_authenticatable, :authentication_keys => [:username, :email]; end"
assert_not_equal User3.fields['email'], nil
end
test 'should not create an email field if there are custom authentication keys they don\'t include email' do
eval "class User4; include Mongoid::Document; devise :database_authenticatable, :authentication_keys => [:usernames]; end"
assert_equal User4.fields['email'], nil
assert_equal User4.fields['username'], nil
end
end
end