mirror of
https://github.com/heartcombo/devise.git
synced 2022-11-09 12:18:31 -05:00
Adding Mongoid 2.0 Support, Removing MongoMapper for now
This commit is contained in:
parent
bd4b29c0fd
commit
e127463ac8
14 changed files with 73 additions and 56 deletions
6
Gemfile
6
Gemfile
|
@ -12,8 +12,8 @@ if RUBY_VERSION < '1.9'
|
||||||
gem "ruby-debug", ">= 0.10.3"
|
gem "ruby-debug", ">= 0.10.3"
|
||||||
end
|
end
|
||||||
|
|
||||||
group :mongo_mapper do
|
group :mongoid do
|
||||||
gem "mongo", ">= 0.18.3"
|
gem "mongo", ">= 0.18.3"
|
||||||
gem "mongo_ext", ">= 0.18.3", :require => false
|
gem "mongo_ext", ">= 0.18.3", :require => false
|
||||||
gem "mongo_mapper", :git => "git://github.com/jnunemaker/mongomapper.git"
|
gem "mongoid", :git => "git://github.com/durran/mongoid.git"
|
||||||
end
|
end
|
|
@ -251,7 +251,7 @@ Devise implements encryption strategies for Clearance, Authlogic and Restful-Aut
|
||||||
|
|
||||||
== Other ORMs
|
== Other ORMs
|
||||||
|
|
||||||
Devise supports ActiveRecord (by default) and MongoMapper. We offer experimental Datamapper support (with the limitation that the Devise test suite does not run completely with Datamapper). To choose other ORM, you just need to configure it in the initializer file.
|
Devise supports ActiveRecord (by default) and Mongoid. We offer experimental Datamapper support (with the limitation that the Devise test suite does not run completely with Datamapper). To choose other ORM, you just need to configure it in the initializer file.
|
||||||
|
|
||||||
== TODO
|
== TODO
|
||||||
|
|
||||||
|
|
|
@ -79,7 +79,7 @@ module Devise
|
||||||
@@mappings = ActiveSupport::OrderedHash.new
|
@@mappings = ActiveSupport::OrderedHash.new
|
||||||
|
|
||||||
# Tells if devise should apply the schema in ORMs where devise declaration
|
# Tells if devise should apply the schema in ORMs where devise declaration
|
||||||
# and schema belongs to the same class (as Datamapper and MongoMapper).
|
# and schema belongs to the same class (as Datamapper and Mongoid).
|
||||||
mattr_accessor :apply_schema
|
mattr_accessor :apply_schema
|
||||||
@@apply_schema = true
|
@@apply_schema = true
|
||||||
|
|
||||||
|
|
|
@ -1,49 +1,51 @@
|
||||||
module Devise
|
module Devise
|
||||||
module Orm
|
module Orm
|
||||||
module MongoMapper
|
module Mongoid
|
||||||
|
|
||||||
module Hook
|
module Hook
|
||||||
def devise_modules_hook!
|
def devise_modules_hook!
|
||||||
extend Schema
|
extend Schema
|
||||||
|
include ::Mongoid::Timestamps
|
||||||
include Compatibility
|
include Compatibility
|
||||||
yield
|
yield
|
||||||
return unless Devise.apply_schema
|
return unless Devise.apply_schema
|
||||||
devise_modules.each { |m| send(m) if respond_to?(m, true) }
|
devise_modules.each { |m| send(m) if respond_to?(m, true) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
module Schema
|
module Schema
|
||||||
include Devise::Schema
|
include Devise::Schema
|
||||||
|
|
||||||
# Tell how to apply schema methods. This automatically converts DateTime
|
# Tell how to apply schema methods
|
||||||
# to Time, since MongoMapper does not recognize the former.
|
|
||||||
def apply_schema(name, type, options={})
|
def apply_schema(name, type, options={})
|
||||||
type = Time if type == DateTime
|
type = Time if type == DateTime
|
||||||
key name, type, options
|
field name, {:type => type}.merge(options)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
module Compatibility
|
module Compatibility
|
||||||
extend ActiveSupport::Concern
|
def lock!
|
||||||
|
self.reload
|
||||||
module ClassMethods
|
end
|
||||||
def find(*args)
|
|
||||||
case args.first
|
def save(validate = true)
|
||||||
when :first, :all
|
if validate.is_a?(Hash) && validate.has_key?(:validate)
|
||||||
send(args.shift, *args)
|
validate = validate[:validate]
|
||||||
else
|
|
||||||
super
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
super(validate)
|
||||||
|
end
|
||||||
|
|
||||||
|
def ==(other)
|
||||||
|
other.is_a?(self.class) && _id == other._id
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
[MongoMapper::Document, MongoMapper::EmbeddedDocument].each do |mod|
|
[Mongoid::Document].each do |mod|
|
||||||
mod::ClassMethods.class_eval do
|
mod::ClassMethods.class_eval do
|
||||||
include Devise::Models
|
include Devise::Models
|
||||||
include Devise::Orm::MongoMapper::Hook
|
include Devise::Orm::Mongoid::Hook
|
||||||
end
|
end
|
||||||
end
|
end
|
|
@ -61,7 +61,7 @@ Devise.setup do |config|
|
||||||
# config.token_authentication_key = :auth_token
|
# config.token_authentication_key = :auth_token
|
||||||
|
|
||||||
# ==> General configuration
|
# ==> General configuration
|
||||||
# Load and configure the ORM. Supports :active_record (default), :mongo_mapper
|
# Load and configure the ORM. Supports :active_record (default), :mongoid
|
||||||
# (requires mongo_ext installed) and :data_mapper (experimental).
|
# (requires mongo_ext installed) and :data_mapper (experimental).
|
||||||
require 'devise/orm/active_record'
|
require 'devise/orm/active_record'
|
||||||
|
|
||||||
|
|
|
@ -70,11 +70,8 @@ class RememberableTest < ActiveSupport::TestCase
|
||||||
assert_equal user, User.serialize_from_cookie("#{user.id}::#{user.remember_token}")
|
assert_equal user, User.serialize_from_cookie("#{user.id}::#{user.remember_token}")
|
||||||
end
|
end
|
||||||
|
|
||||||
# MongoMapper cries if an invalid ID is given, so this does not need to be tested
|
test 'serialize should return nil if no user is found' do
|
||||||
unless DEVISE_ORM == :mongo_mapper
|
assert_nil User.serialize_from_cookie('0::123')
|
||||||
test 'serialize should return nil if no user is found' do
|
|
||||||
assert_nil User.serialize_from_cookie('0::123')
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
test 'remember me return nil if is a valid user with invalid token' do
|
test 'remember me return nil if is a valid user with invalid token' do
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
|
|
||||||
class ValidatableTest < ActiveSupport::TestCase
|
class ValidatableTest < ActiveSupport::TestCase
|
||||||
extend Devise::TestSilencer if [:mongo_mapper, :data_mapper].include?(DEVISE_ORM)
|
extend Devise::TestSilencer if [:mongoid, :data_mapper].include?(DEVISE_ORM)
|
||||||
|
|
||||||
test 'should require email to be set' do
|
test 'should require email to be set' do
|
||||||
user = new_user(:email => nil)
|
user = new_user(:email => nil)
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
MongoMapper.database = "devise-test-suite"
|
|
||||||
MongoMapper.connection = Mongo::Connection.new('127.0.0.1', 27017)
|
|
||||||
|
|
||||||
require File.expand_path('../../rails_app/config/environment', __FILE__)
|
|
||||||
require 'rails/test_help'
|
|
||||||
|
|
||||||
class ActiveSupport::TestCase
|
|
||||||
setup do
|
|
||||||
User.delete_all
|
|
||||||
Admin.delete_all
|
|
||||||
end
|
|
||||||
end
|
|
17
test/orm/mongoid.rb
Normal file
17
test/orm/mongoid.rb
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
require File.expand_path('../../rails_app/config/environment', __FILE__)
|
||||||
|
require 'rails/test_help'
|
||||||
|
|
||||||
|
Mongoid.configure do |config|
|
||||||
|
config.master = Mongo::Connection.new('127.0.0.1', 27017).db("devise-test-suite")
|
||||||
|
end
|
||||||
|
|
||||||
|
I18n.load_path << File.join(
|
||||||
|
File.dirname(__FILE__), "mongoid", "locale", "en.yml"
|
||||||
|
)
|
||||||
|
|
||||||
|
class ActiveSupport::TestCase
|
||||||
|
setup do
|
||||||
|
User.delete_all
|
||||||
|
Admin.delete_all
|
||||||
|
end
|
||||||
|
end
|
4
test/orm/mongoid/locale/en.yml
Normal file
4
test/orm/mongoid/locale/en.yml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
en:
|
||||||
|
errors:
|
||||||
|
messages:
|
||||||
|
taken: "has already been taken"
|
|
@ -1,10 +0,0 @@
|
||||||
class Admin
|
|
||||||
include MongoMapper::Document
|
|
||||||
include MongoMapper::Plugins::Callbacks
|
|
||||||
|
|
||||||
devise :authenticatable, :timeoutable, :registerable, :recoverable
|
|
||||||
|
|
||||||
def self.find_for_authentication(conditions)
|
|
||||||
last(:conditions => conditions, :order => "email")
|
|
||||||
end
|
|
||||||
end
|
|
14
test/rails_app/app/mongoid/admin.rb
Normal file
14
test/rails_app/app/mongoid/admin.rb
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
class Admin
|
||||||
|
include Mongoid::Document
|
||||||
|
|
||||||
|
devise :authenticatable, :timeoutable, :registerable, :recoverable
|
||||||
|
|
||||||
|
def self.find_for_authentication(conditions)
|
||||||
|
last(:conditions => conditions, :sort => [[:email, :asc]])
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.last(options={})
|
||||||
|
options.delete(:order) if options[:order] == "id"
|
||||||
|
super options
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,11 +1,16 @@
|
||||||
class User
|
class User
|
||||||
include MongoMapper::Document
|
include Mongoid::Document
|
||||||
|
|
||||||
key :created_at, DateTime
|
field :created_at, :type => DateTime
|
||||||
|
|
||||||
devise :authenticatable, :http_authenticatable, :confirmable, :lockable, :recoverable,
|
devise :authenticatable, :http_authenticatable, :confirmable, :lockable, :recoverable,
|
||||||
:registerable, :rememberable, :timeoutable, :token_authenticatable,
|
:registerable, :rememberable, :timeoutable, :token_authenticatable,
|
||||||
:trackable, :validatable
|
:trackable, :validatable
|
||||||
|
|
||||||
# attr_accessible :username, :email, :password, :password_confirmation
|
# attr_accessible :username, :email, :password, :password_confirmation
|
||||||
|
|
||||||
|
def self.last(options={})
|
||||||
|
options.delete(:order) if options[:order] == "id"
|
||||||
|
super options
|
||||||
|
end
|
||||||
end
|
end
|
|
@ -36,7 +36,7 @@ Devise.setup do |config|
|
||||||
# Configure the e-mail address which will be shown in DeviseMailer.
|
# Configure the e-mail address which will be shown in DeviseMailer.
|
||||||
config.mailer_sender = "please-change-me-omg@yourapp.com"
|
config.mailer_sender = "please-change-me-omg@yourapp.com"
|
||||||
|
|
||||||
# Load and configure the ORM. Supports :active_record, :data_mapper and :mongo_mapper.
|
# Load and configure the ORM. Supports :active_record, :data_mapper and :mongoid.
|
||||||
require "devise/orm/#{DEVISE_ORM}"
|
require "devise/orm/#{DEVISE_ORM}"
|
||||||
|
|
||||||
# Turn scoped views on. Before rendering "sessions/new", it will first check for
|
# Turn scoped views on. Before rendering "sessions/new", it will first check for
|
||||||
|
|
Loading…
Reference in a new issue