spree_auth_devise 4.0.0.rc1 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +41 -0
  3. data/.gitignore +1 -0
  4. data/.travis.yml +30 -42
  5. data/Appraisals +3 -19
  6. data/Gemfile +1 -1
  7. data/README.md +3 -12
  8. data/Rakefile +9 -3
  9. data/app/controllers/metal_decorator.rb +3 -1
  10. data/app/controllers/spree/api/v2/storefront/account_confirmations_controller.rb +20 -0
  11. data/app/controllers/spree/api/v2/storefront/passwords_controller.rb +35 -0
  12. data/app/controllers/spree/user_confirmations_controller.rb +24 -0
  13. data/app/controllers/spree/user_passwords_controller.rb +3 -1
  14. data/app/controllers/spree/user_registrations_controller.rb +27 -1
  15. data/app/controllers/spree/user_sessions_controller.rb +23 -1
  16. data/app/mailers/spree/user_mailer.rb +6 -2
  17. data/app/models/spree/user.rb +17 -0
  18. data/app/services/spree/account/create.rb +19 -0
  19. data/app/services/spree/account/update.rb +17 -0
  20. data/app/views/spree/user_mailer/confirmation_instructions.text.erb +3 -3
  21. data/app/views/spree/user_mailer/reset_password_instructions.text.erb +2 -7
  22. data/app/views/spree/user_passwords/edit.html.erb +20 -17
  23. data/app/views/spree/user_passwords/new.html.erb +17 -15
  24. data/app/views/spree/user_registrations/new.html.erb +12 -17
  25. data/app/views/spree/user_sessions/new.html.erb +11 -12
  26. data/config/locales/de.yml +18 -0
  27. data/config/locales/en.yml +10 -3
  28. data/config/locales/zh-TW.yml +60 -0
  29. data/config/routes.rb +12 -3
  30. data/db/migrate/20120203010234_add_reset_password_sent_at_to_spree_users.rb +2 -2
  31. data/gemfiles/{spree_3_5.gemfile → spree_4_1.gemfile} +1 -1
  32. data/lib/controllers/api/spree/api/v2/storefront/account_controller_decorator.rb +41 -0
  33. data/lib/controllers/frontend/spree/checkout_controller_decorator.rb +2 -2
  34. data/lib/controllers/frontend/spree/users_controller.rb +5 -5
  35. data/lib/generators/spree/auth/install/install_generator.rb +0 -4
  36. data/lib/spree/auth/engine.rb +14 -1
  37. data/lib/spree/testing_support/auth_helpers.rb +36 -0
  38. data/lib/spree/testing_support/checkout_helpers.rb +24 -0
  39. data/lib/views/backend/spree/admin/user_passwords/new.html.erb +1 -1
  40. data/lib/views/backend/spree/admin/user_sessions/new.html.erb +1 -1
  41. data/spec/controllers/spree/admin/orders_controller_spec.rb +1 -1
  42. data/spec/controllers/spree/admin/user_sessions_controller_spec.rb +1 -1
  43. data/spec/controllers/spree/api/v2/storefront/passwords_controller_spec.rb +63 -0
  44. data/spec/controllers/spree/checkout_controller_spec.rb +15 -16
  45. data/spec/controllers/spree/products_controller_spec.rb +1 -1
  46. data/spec/controllers/spree/user_passwords_controller_spec.rb +4 -4
  47. data/spec/controllers/spree/user_registrations_controller_spec.rb +8 -8
  48. data/spec/controllers/spree/user_sessions_controller_spec.rb +17 -17
  49. data/spec/controllers/spree/users_controller_spec.rb +4 -4
  50. data/spec/features/account_spec.rb +10 -8
  51. data/spec/features/admin/password_reset_spec.rb +2 -4
  52. data/spec/features/admin/sign_in_spec.rb +13 -9
  53. data/spec/features/admin/sign_out_spec.rb +1 -1
  54. data/spec/features/admin_permissions_spec.rb +1 -1
  55. data/spec/features/change_email_spec.rb +1 -7
  56. data/spec/features/checkout_spec.rb +38 -63
  57. data/spec/features/confirmation_spec.rb +3 -5
  58. data/spec/features/order_spec.rb +9 -15
  59. data/spec/features/password_reset_spec.rb +2 -4
  60. data/spec/features/sign_in_spec.rb +21 -17
  61. data/spec/features/sign_out_spec.rb +14 -23
  62. data/spec/features/sign_up_spec.rb +6 -4
  63. data/spec/mailers/user_mailer_spec.rb +3 -3
  64. data/spec/models/user_spec.rb +9 -7
  65. data/spec/requests/spree/api/v2/storefront/account_confirmation_spec.rb +48 -0
  66. data/spec/requests/spree/api/v2/storefront/account_spec.rb +101 -0
  67. data/spec/spec_helper.rb +7 -22
  68. data/spree_auth_devise.gemspec +6 -24
  69. metadata +40 -334
  70. data/app/overrides/auth_shared_login_bar.rb +0 -6
  71. data/app/views/spree/shared/_login.html.erb +0 -18
  72. data/app/views/spree/shared/_user_form.html.erb +0 -17
  73. data/gemfiles/spree_3_2.gemfile +0 -8
  74. data/gemfiles/spree_3_7.gemfile +0 -9
  75. data/gemfiles/spree_4_0.gemfile +0 -8
  76. data/lib/assets/javascripts/spree/backend/spree_auth.js.erb +0 -1
  77. data/lib/assets/javascripts/spree/frontend/account.js +0 -8
  78. data/lib/assets/javascripts/spree/frontend/spree_auth.js.erb +0 -2
  79. data/lib/assets/stylesheets/spree/backend/spree_auth.css.erb +0 -3
  80. data/lib/assets/stylesheets/spree/frontend/spree_auth.css.erb +0 -3
  81. data/lib/controllers/frontend/spree/store_controller_decorator.rb +0 -7
  82. data/lib/views/frontend/spree/checkout/_new_user.html.erb +0 -20
  83. data/lib/views/frontend/spree/checkout/registration.html.erb +0 -25
  84. data/lib/views/frontend/spree/shared/_link_to_account.html.erb +0 -6
  85. data/lib/views/frontend/spree/users/edit.html.erb +0 -17
  86. data/lib/views/frontend/spree/users/show.html.erb +0 -48
  87. data/spec/support/add_to_cart.rb +0 -15
  88. data/spec/support/authentication_helpers.rb +0 -14
  89. data/spec/support/cache_helpers.rb +0 -5
  90. data/spec/support/capybara.rb +0 -16
  91. data/spec/support/database_cleaner.rb +0 -17
  92. data/spec/support/factory_girl.rb +0 -5
  93. data/spec/support/spree.rb +0 -10
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 904e54a1d9b6ad58df3685c412031328c5eb7d2a3bde8c1d3682656adb8d91ba
4
- data.tar.gz: 25ab57e3858000af1e81c594c8d01dde94d355b0f7379b38d399c914754fa4b5
3
+ metadata.gz: 118d51e3f609cac9bc6a69453d96893824814d99a44e8be828741ebd410c9aa9
4
+ data.tar.gz: dcb44d6ef585b73b82665d12b04821e5f9d6393ef87626cbbd4091e060390365
5
5
  SHA512:
6
- metadata.gz: eb3236f668fcaab30ac537ef5b8072082d00d0e205f432671c0e37a7af838b3ec13eb62563daef69b816aad29113521e0b743e386e87335a0fa6e70e7b65d0cd
7
- data.tar.gz: 2f82564fcf9e5e7c36d38611fa45965922e02593b69caf1b2068224e4dd6f20fcbc1a6e5590741e7af5180777751e17525a9fe65a25f4091dcda9d11214e91b1
6
+ metadata.gz: 0e3de0c4e4fd5adf202a9fa312f6025eaef63d9b61c8024703b418dc911d9dab405c76d3c25c6ed3f7e7d84f1bb867c2874a21e08dad903618c8632cf087531a
7
+ data.tar.gz: d650a6a697c44abba86562a2bc94b98ba117ce74a4a57f614f6e210690ea4f44f8e21f64aaf8a55458b8323b0e8686a48f3b313453337635aae8ffd2fe944dc3
@@ -0,0 +1,41 @@
1
+ version: 2
2
+
3
+ jobs:
4
+ update_staging_repository:
5
+ docker:
6
+ - image: circleci/ruby:2.6.3
7
+ steps:
8
+ - add_ssh_keys:
9
+ fingerprints:
10
+ - 54:50:5e:4e:80:6d:2e:26:43:c6:99:bd:39:b2:71:dc
11
+ - run: mkdir -p ~/.ssh
12
+ - run: ssh-keyscan -H github.com >> ~/.ssh/known_hosts
13
+ - run: ssh-add -D
14
+ - run: ssh-add ~/.ssh/id_rsa_54505e4e806d2e2643c699bd39b271dc
15
+ - run: git clone -b master git@github.com:spark-solutions/spree-designs.git
16
+ - run: gem install bundler -v 1.17.3
17
+ - run:
18
+ command: bundle update spree_auth_devise
19
+ working_directory: ~/project/spree-designs
20
+ - run:
21
+ command: |
22
+ git config user.name 'AutoDeploy'
23
+ git config user.email 'autodeploy@sparksolutions.co'
24
+ working_directory: ~/project/spree-designs
25
+ - run:
26
+ command: |
27
+ git add -A
28
+ git commit -m "Auto-commit v#${CIRCLE_BUILD_NUM}"
29
+ working_directory: ~/project/spree-designs
30
+ - run:
31
+ command: git push origin master
32
+ working_directory: ~/project/spree-designs
33
+
34
+ workflows:
35
+ version: 2
36
+ update_staging_repository:
37
+ jobs:
38
+ - update_staging_repository:
39
+ filters:
40
+ branches:
41
+ only: master
data/.gitignore CHANGED
@@ -20,3 +20,4 @@ public/spree
20
20
  .ruby-gemset
21
21
  gemfiles/*.gemfile.lock
22
22
  *.gem
23
+ .bundle
@@ -1,56 +1,44 @@
1
- sudo: required
2
- dist: trusty
3
-
4
- script:
5
- - bundle exec rake test_app
6
- - bundle exec rake spec
1
+ os: linux
2
+ dist: bionic
7
3
 
8
4
  addons:
9
- chrome: stable
10
- postgresql: 9.4
5
+ apt:
6
+ sources:
7
+ - google-chrome
8
+ packages:
9
+ - google-chrome-stable
11
10
 
12
- env:
13
- - DB=mysql
14
- - DB=postgres
11
+ services:
12
+ - mysql
13
+ - postgresql
15
14
 
16
15
  language: ruby
17
16
 
18
17
  rvm:
19
- - 2.5.1
20
- - 2.4.4
21
- - 2.3.7
18
+ - 2.5
19
+ - 2.6
20
+
21
+ env:
22
+ - DB=mysql
23
+ - DB=postgres
22
24
 
23
25
  gemfile:
24
- - gemfiles/spree_3_2.gemfile
25
- - gemfiles/spree_3_5.gemfile
26
- - gemfiles/spree_3_7.gemfile
27
- - gemfiles/spree_4_0.gemfile
26
+ - gemfiles/spree_4_1.gemfile
28
27
  - gemfiles/spree_master.gemfile
29
28
 
30
- matrix:
31
- allow_failures:
32
- - gemfile: gemfiles/spree_master.gemfile
33
- exclude:
34
- - rvm: 2.3.7
35
- gemfile: gemfiles/spree_4_0.gemfile
36
- - rvm: 2.4.4
37
- gemfile: gemfiles/spree_4_0.gemfile
38
- - rvm: 2.3.7
39
- gemfile: gemfiles/spree_master.gemfile
40
- - rvm: 2.4.4
41
- gemfile: gemfiles/spree_master.gemfile
42
- - rvm: 2.5.1
43
- gemfile: gemfiles/spree_3_2.gemfile
44
- - rvm: 2.5.1
45
- gemfile: gemfiles/spree_3_2.gemfile
46
- - rvm: 2.5.1
47
- gemfile: gemfiles/spree_3_5.gemfile
29
+ jobs:
30
+ allow_failures:
31
+ - gemfile: gemfiles/spree_master.gemfile
48
32
 
49
33
  before_install:
50
34
  - mysql -u root -e "GRANT ALL ON *.* TO 'travis'@'%';"
51
- - wget -N https://chromedriver.storage.googleapis.com/2.35/chromedriver_linux64.zip -P ~/
52
- - unzip ~/chromedriver_linux64.zip -d ~/
53
- - rm ~/chromedriver_linux64.zip
54
- - sudo mv -f ~/chromedriver /usr/local/share/
55
- - sudo chmod +x /usr/local/share/chromedriver
56
- - sudo ln -s /usr/local/share/chromedriver /usr/local/bin/chromedriver
35
+
36
+ before_script:
37
+ - CHROME_MAIN_VERSION=`google-chrome-stable --version | sed -E 's/(^Google Chrome |\.[0-9]+ )//g'`
38
+ - CHROMEDRIVER_VERSION=`curl -s "https://chromedriver.storage.googleapis.com/LATEST_RELEASE_$CHROME_MAIN_VERSION"`
39
+ - curl "https://chromedriver.storage.googleapis.com/${CHROMEDRIVER_VERSION}/chromedriver_linux64.zip" -O
40
+ - unzip chromedriver_linux64.zip -d ~/bin
41
+
42
+ script:
43
+ - bundle exec rake test_app
44
+ - bundle exec rake spec
data/Appraisals CHANGED
@@ -1,25 +1,9 @@
1
- appraise 'spree-3-2' do
2
- gem 'spree', '~> 3.2.0'
3
- gem 'rails-controller-testing'
4
- end
5
-
6
- appraise 'spree-3-5' do
7
- gem 'spree', '~> 3.5.0'
8
- gem 'rails-controller-testing'
9
- end
10
-
11
- appraise 'spree-3-7' do
12
- gem 'sass-rails'
13
- gem 'spree', '~> 3.7.0.rc3'
14
- gem 'rails-controller-testing'
15
- end
16
-
17
- appraise 'spree-4-0' do
18
- gem 'spree', github: 'spree/spree', tag: 'v4.0.0.beta'
1
+ appraise 'spree-4-1' do
19
2
  gem 'rails-controller-testing'
3
+ gem 'spree', '~> 4.1'
20
4
  end
21
5
 
22
6
  appraise 'spree-master' do
23
- gem 'spree', github: 'spree/spree', branch: 'master'
24
7
  gem 'rails-controller-testing'
8
+ gem 'spree', github: 'spree/spree', branch: 'master'
25
9
  end
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem "rails-controller-testing"
3
+ gem 'rails-controller-testing'
4
4
  gem 'spree', github: 'spree/spree', branch: 'master'
5
5
 
6
6
  gemspec
data/README.md CHANGED
@@ -10,20 +10,11 @@ Provides authentication services for [Spree](https://spreecommerce.org), using t
10
10
 
11
11
  1. Add this extension to your Gemfile with this line:
12
12
 
13
- #### Spree >= 3.1
14
-
15
- ```ruby
16
- gem 'spree_auth_devise', '~> 3.3'
17
- ```
18
-
19
- #### Spree 3.0 and Spree 2.x
20
-
21
13
  ```ruby
22
- gem 'spree_auth_devise', github: 'spree/spree_auth_devise', branch: 'X-X-stable'
14
+ gem 'spree_auth_devise'
23
15
  ```
24
-
25
- The `branch` option is important: it must match the version of Spree you're using.
26
- For example, use `3-0-stable` if you're using Spree `3-0-stable` or any `3.0.x` version.
16
+
17
+ if you run into any version-mismatch problems please run `bundle update`
27
18
 
28
19
  2. Install the gem using Bundler:
29
20
  ```ruby
data/Rakefile CHANGED
@@ -2,14 +2,20 @@ require 'bundler'
2
2
  Bundler::GemHelper.install_tasks
3
3
 
4
4
  require 'rspec/core/rake_task'
5
- require 'spree/testing_support/common_rake'
5
+ require 'spree/testing_support/extension_rake'
6
6
 
7
7
  RSpec::Core::RakeTask.new
8
8
 
9
- task default: :spec
9
+ task :default do
10
+ if Dir["spec/dummy"].empty?
11
+ Rake::Task[:test_app].invoke
12
+ Dir.chdir("../../")
13
+ end
14
+ Rake::Task[:spec].invoke
15
+ end
10
16
 
11
17
  desc 'Generates a dummy app for testing'
12
18
  task :test_app do
13
19
  ENV['LIB_NAME'] = 'spree/auth'
14
- Rake::Task['common:test_app'].invoke("Spree::User")
20
+ Rake::Task['extension:test_app'].invoke
15
21
  end
@@ -1,5 +1,5 @@
1
1
  # For the API
2
- ActionController::Metal.class_eval do
2
+ module MetalDecorator
3
3
  def spree_current_user
4
4
  @spree_current_user ||= if defined? env
5
5
  env['warden'].user
@@ -8,3 +8,5 @@ ActionController::Metal.class_eval do
8
8
  end
9
9
  end
10
10
  end
11
+
12
+ ActionController::Metal.prepend(MetalDecorator)
@@ -0,0 +1,20 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Storefront
5
+ class AccountConfirmationsController < ::Spree::Api::V2::BaseController
6
+
7
+ def show
8
+ user = Spree.user_class.confirm_by_token(params[:id])
9
+
10
+ if user.errors.empty?
11
+ render json: { data: { state: user.respond_to?(:state) ? user.state : '' } }, status: :ok
12
+ else
13
+ render json: { error: user.errors.full_messages.to_sentence }, status: :unprocessable_entity
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,35 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Storefront
5
+ class PasswordsController < ::Spree::Api::V2::BaseController
6
+ include Spree::Core::ControllerHelpers::Store
7
+
8
+ def create
9
+ user = Spree.user_class.find_by(email: params[:user][:email])
10
+
11
+ if user&.send_reset_password_instructions(current_store)
12
+ head :ok
13
+ else
14
+ head :not_found
15
+ end
16
+ end
17
+
18
+ def update
19
+ user = Spree.user_class.reset_password_by_token(
20
+ password: params[:user][:password],
21
+ password_confirmation: params[:user][:password_confirmation],
22
+ reset_password_token: params[:id]
23
+ )
24
+
25
+ if user.errors.empty?
26
+ head :ok
27
+ else
28
+ render json: { error: user.errors.full_messages.to_sentence }, status: :unprocessable_entity
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -6,6 +6,30 @@ class Spree::UserConfirmationsController < Devise::ConfirmationsController
6
6
  include Spree::Core::ControllerHelpers::Order
7
7
  include Spree::Core::ControllerHelpers::Store
8
8
 
9
+ before_action :set_current_order
10
+
11
+ # GET /resource/confirmation?confirmation_token=abcdef
12
+ def show
13
+ self.resource = resource_class.confirm_by_token(params[:confirmation_token])
14
+ yield resource if block_given?
15
+
16
+ if resource.errors.empty?
17
+ set_flash_message!(:notice, :confirmed)
18
+ respond_with_navigational(resource) do
19
+ redirect_to after_confirmation_path_for(resource_name, resource)
20
+ end
21
+ elsif resource.confirmed?
22
+ set_flash_message(:error, :already_confirmed)
23
+ respond_with_navigational(resource) do
24
+ redirect_to after_confirmation_path_for(resource_name, resource)
25
+ end
26
+ else
27
+ respond_with_navigational(resource.errors, status: :unprocessable_entity) do
28
+ render :new
29
+ end
30
+ end
31
+ end
32
+
9
33
  protected
10
34
 
11
35
  def after_confirmation_path_for(resource_name, resource)
@@ -10,6 +10,8 @@ class Spree::UserPasswordsController < Devise::PasswordsController
10
10
  include SpreeI18n::ControllerLocaleHelper
11
11
  end
12
12
 
13
+ before_action :set_current_order
14
+
13
15
  # Overridden due to bug in Devise.
14
16
  # respond_with resource, :location => new_session_path(resource_name)
15
17
  # is generating bad url /session/new.user
@@ -18,7 +20,7 @@ class Spree::UserPasswordsController < Devise::PasswordsController
18
20
  # respond_with resource, :location => spree.login_path
19
21
  #
20
22
  def create
21
- self.resource = resource_class.send_reset_password_instructions(params[resource_name])
23
+ self.resource = resource_class.send_reset_password_instructions(params[resource_name], current_store)
22
24
 
23
25
  if resource.errors.empty?
24
26
  set_flash_message(:notice, :send_instructions) if is_navigational_format?
@@ -11,6 +11,7 @@ class Spree::UserRegistrationsController < Devise::RegistrationsController
11
11
  end
12
12
 
13
13
  before_action :check_permissions, only: [:edit, :update]
14
+ before_action :set_current_order
14
15
  skip_before_action :require_no_authentication
15
16
 
16
17
  # GET /resource/sign_up
@@ -29,7 +30,7 @@ class Spree::UserRegistrationsController < Devise::RegistrationsController
29
30
  set_flash_message :notice, :signed_up
30
31
  sign_up(resource_name, resource)
31
32
  session[:spree_user_signup] = true
32
- respond_with resource, location: after_sign_up_path_for(resource)
33
+ redirect_to_checkout_or_account_path(resource)
33
34
  else
34
35
  set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}"
35
36
  expire_data_after_sign_in!
@@ -75,9 +76,34 @@ class Spree::UserRegistrationsController < Devise::RegistrationsController
75
76
  'devise.user_registrations'
76
77
  end
77
78
 
79
+ def after_sign_up_path_for(resource)
80
+ after_sign_in_redirect(resource) if is_navigational_format?
81
+ end
82
+
83
+ def after_inactive_sign_up_path_for(resource)
84
+ scope = Devise::Mapping.find_scope!(resource)
85
+ router_name = Devise.mappings[scope].router_name
86
+ context = router_name ? send(router_name) : self
87
+ context.respond_to?(:login_path) ? context.login_path : "/login"
88
+ end
89
+
78
90
  private
79
91
 
80
92
  def spree_user_params
81
93
  params.require(:spree_user).permit(Spree::PermittedAttributes.user_attributes)
82
94
  end
95
+
96
+ def after_sign_in_redirect(resource_or_scope)
97
+ stored_location_for(resource_or_scope) || account_path
98
+ end
99
+
100
+ def redirect_to_checkout_or_account_path(resource)
101
+ resource_path = after_sign_up_path_for(resource)
102
+
103
+ if resource_path == spree.checkout_state_path(:address)
104
+ respond_with resource, location: spree.checkout_state_path(:address)
105
+ else
106
+ respond_with resource, location: spree.account_path
107
+ end
108
+ end
83
109
  end
@@ -10,6 +10,8 @@ class Spree::UserSessionsController < Devise::SessionsController
10
10
  include SpreeI18n::ControllerLocaleHelper
11
11
  end
12
12
 
13
+ before_action :set_current_order
14
+
13
15
  def create
14
16
  authenticate_spree_user!
15
17
 
@@ -17,7 +19,7 @@ class Spree::UserSessionsController < Devise::SessionsController
17
19
  respond_to do |format|
18
20
  format.html {
19
21
  flash[:success] = Spree.t(:logged_in_succesfully)
20
- redirect_back_or_default(after_sign_in_path_for(spree_current_user))
22
+ redirect_back_or_default(after_sign_in_redirect(spree_current_user))
21
23
  }
22
24
  format.js {
23
25
  render json: { user: spree_current_user,
@@ -54,4 +56,24 @@ class Spree::UserSessionsController < Devise::SessionsController
54
56
  redirect_to(session["spree_user_return_to"] || default)
55
57
  session["spree_user_return_to"] = nil
56
58
  end
59
+
60
+ def after_sign_in_redirect(resource_or_scope)
61
+ stored_location_for(resource_or_scope) || account_path
62
+ end
63
+
64
+ def respond_to_on_destroy
65
+ # We actually need to hardcode this as Rails default responder doesn't
66
+ # support returning empty response on GET request
67
+ respond_to do |format|
68
+ format.all { head :no_content }
69
+ format.any(*navigational_formats) { redirect_to after_sign_out_redirect(resource_name) }
70
+ end
71
+ end
72
+
73
+ def after_sign_out_redirect(resource_or_scope)
74
+ scope = Devise::Mapping.find_scope!(resource_or_scope)
75
+ router_name = Devise.mappings[scope].router_name
76
+ context = router_name ? send(router_name) : self
77
+ context.respond_to?(:login_path) ? context.login_path : "/"
78
+ end
57
79
  end