diff --git a/lib/devise/rails/routes.rb b/lib/devise/rails/routes.rb index e160ec32..7fb56767 100644 --- a/lib/devise/rails/routes.rb +++ b/lib/devise/rails/routes.rb @@ -83,6 +83,10 @@ module ActionDispatch::Routing # # devise_for :users, :controllers => { :sessions => "users/sessions" } # + # * :skip => tell which modules you want to skip routes from being created: + # + # devise_for :users, :skip => :authenticatable + # def devise_for(*resources) options = resources.extract_options! resources.map!(&:to_sym) @@ -99,7 +103,8 @@ module ActionDispatch::Routing Devise.default_scope ||= mapping.name Devise.mappings[mapping.name] = mapping - mapping.modules.each do |mod| + routes_modules = mapping.modules - Array(options.delete(:skip)) + routes_modules.each do |mod| send(mod, mapping, mapping.controllers) if self.respond_to?(mod, true) end end diff --git a/test/mapping_test.rb b/test/mapping_test.rb index 36ba93d1..8593cd23 100644 --- a/test/mapping_test.rb +++ b/test/mapping_test.rb @@ -26,7 +26,7 @@ class MappingTest < ActiveSupport::TestCase allowed = Devise.mappings[:admin].allowed_controllers assert allowed.include?("sessions") assert_not allowed.include?("devise/confirmations") - assert_not allowed.include?("devise/passwords") + assert_not allowed.include?("devise/unlocks") end test 'find mapping by path' do @@ -110,8 +110,9 @@ class MappingTest < ActiveSupport::TestCase mapping = Devise.mappings[:admin] assert mapping.authenticatable? + assert mapping.recoverable? assert_not mapping.confirmable? - assert_not mapping.recoverable? + assert_not mapping.lockable? assert_not mapping.rememberable? end end diff --git a/test/models_test.rb b/test/models_test.rb index 9418606e..21c97bd3 100644 --- a/test/models_test.rb +++ b/test/models_test.rb @@ -23,7 +23,7 @@ class ActiveRecordTest < ActiveSupport::TestCase end test 'add modules cherry pick' do - assert_include_modules Admin, :authenticatable, :registerable, :timeoutable + assert_include_modules Admin, :authenticatable, :registerable, :timeoutable, :recoverable end test 'set a default value for stretches' do diff --git a/test/rails_app/app/active_record/admin.rb b/test/rails_app/app/active_record/admin.rb index e4876042..87f8c99e 100644 --- a/test/rails_app/app/active_record/admin.rb +++ b/test/rails_app/app/active_record/admin.rb @@ -1,5 +1,5 @@ class Admin < ActiveRecord::Base - devise :authenticatable, :registerable, :timeoutable + devise :authenticatable, :registerable, :timeoutable, :recoverable def self.find_for_authentication(conditions) last(:conditions => conditions) diff --git a/test/rails_app/app/mongo_mapper/admin.rb b/test/rails_app/app/mongo_mapper/admin.rb index ab7ce976..e2a04c3a 100644 --- a/test/rails_app/app/mongo_mapper/admin.rb +++ b/test/rails_app/app/mongo_mapper/admin.rb @@ -2,7 +2,7 @@ class Admin include MongoMapper::Document include MongoMapper::Plugins::Callbacks - devise :authenticatable, :timeoutable, :registerable + devise :authenticatable, :timeoutable, :registerable, :recoverable def self.find_for_authentication(conditions) last(:conditions => conditions, :order => "email") diff --git a/test/rails_app/config/routes.rb b/test/rails_app/config/routes.rb index 2a512ab1..94ffec06 100644 --- a/test/rails_app/config/routes.rb +++ b/test/rails_app/config/routes.rb @@ -6,7 +6,7 @@ Rails::Application.routes.draw do resources :admins, :only => [:index] devise_for :users - devise_for :admin, :as => "admin_area", :controllers => { :sessions => "sessions" } + devise_for :admin, :as => "admin_area", :controllers => { :sessions => "sessions" }, :skip => :recoverable devise_for :accounts, :scope => "manager", :path_prefix => ":locale", :class_name => "User", :path_names => { :sign_in => "login", :sign_out => "logout", @@ -17,5 +17,8 @@ Rails::Application.routes.draw do match "/admin_area/home", :to => "admins#index", :as => :admin_root match "/sign_in", :to => "devise/sessions#new" + # Dummy route for new admin pasword + match "/anywhere", :to => "foo#bar", :as => :new_admin_password + root :to => "home#index" end \ No newline at end of file diff --git a/test/routes_test.rb b/test/routes_test.rb index 1e7ec143..2fdc862e 100644 --- a/test/routes_test.rb +++ b/test/routes_test.rb @@ -84,7 +84,7 @@ class MapRoutingTest < ActionController::TestCase test 'does not map admin confirmation' do assert_raise ActionController::RoutingError do - assert_recognizes({:controller => 'devise/confirmations', :action => 'new'}, 'admin_area/confirmation/new') + assert_recognizes({:controller => 'devise/passwords', :action => 'new'}, 'admin_area/password/new') end end