switch_user 1.3.1 → 1.5.3

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 (52) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +20 -4
  3. data/Gemfile +2 -0
  4. data/README.md +23 -21
  5. data/Rakefile +2 -0
  6. data/app/controllers/switch_user_controller.rb +25 -11
  7. data/app/helpers/switch_user_helper.rb +16 -19
  8. data/app/views/switch_user/_widget.html.erb +2 -2
  9. data/config/routes.rb +4 -2
  10. data/lib/generators/switch_user/install/install_generator.rb +3 -2
  11. data/lib/generators/switch_user/install/templates/switch_user.rb +8 -6
  12. data/lib/switch_user.rb +22 -21
  13. data/lib/switch_user/base_guard.rb +7 -5
  14. data/lib/switch_user/data_source.rb +8 -8
  15. data/lib/switch_user/lambda_guard.rb +2 -0
  16. data/lib/switch_user/provider.rb +20 -10
  17. data/lib/switch_user/provider/authlogic.rb +6 -6
  18. data/lib/switch_user/provider/base.rb +7 -8
  19. data/lib/switch_user/provider/clearance.rb +8 -6
  20. data/lib/switch_user/provider/devise.rb +10 -4
  21. data/lib/switch_user/provider/dummy.rb +8 -12
  22. data/lib/switch_user/provider/restful_authentication.rb +5 -3
  23. data/lib/switch_user/provider/session.rb +5 -3
  24. data/lib/switch_user/provider/sorcery.rb +8 -9
  25. data/lib/switch_user/rails.rb +7 -3
  26. data/lib/switch_user/rspec.rb +4 -4
  27. data/lib/switch_user/rspec/feature_helpers.rb +13 -14
  28. data/lib/switch_user/user_loader.rb +5 -2
  29. data/lib/switch_user/user_set.rb +14 -9
  30. data/lib/switch_user/version.rb +3 -1
  31. data/spec/controllers/switch_user_controller_spec.rb +24 -27
  32. data/spec/helpers/switch_user_helper_spec.rb +58 -55
  33. data/spec/integration/switch_user_spec.rb +105 -21
  34. data/spec/provider/authlogic_spec.rb +3 -1
  35. data/spec/provider/clearance_spec.rb +3 -1
  36. data/spec/provider/devise_spec.rb +19 -18
  37. data/spec/provider/dummy_spec.rb +4 -3
  38. data/spec/provider/restful_authentication_spec.rb +3 -1
  39. data/spec/provider/session_spec.rb +4 -2
  40. data/spec/provider/sorcery_spec.rb +3 -1
  41. data/spec/provider_spec.rb +3 -1
  42. data/spec/rspec/feature_helpers_spec.rb +38 -37
  43. data/spec/spec_helper.rb +4 -2
  44. data/spec/support/application.rb +35 -23
  45. data/spec/support/provider.rb +13 -11
  46. data/spec/switch_user/data_source_spec.rb +7 -5
  47. data/spec/switch_user/lambda_guard_spec.rb +6 -4
  48. data/spec/switch_user/user_loader_spec.rb +23 -23
  49. data/spec/switch_user/user_set_spec.rb +12 -10
  50. data/spec/switch_user_spec.rb +6 -4
  51. data/switch_user.gemspec +24 -23
  52. metadata +28 -28
@@ -1,16 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SwitchUser
2
4
  class BaseGuard
3
- # TODO is this the best arguments for the initializer ?
5
+ # TODO: is this the best arguments for the initializer ?
4
6
  # TODO should @provider be set and current/original_user be added as # accessors ?
5
7
  def initialize(controller, provider)
6
- @controller = controller
7
- @request = controller.request
8
- @current_user = provider.current_user
8
+ @controller = controller
9
+ @request = controller.request
10
+ @current_user = provider.current_user
9
11
  @original_user = provider.original_user
10
12
  end
11
13
 
12
14
  def controller_available?
13
- raise NotImplementedError.new("you must implement controller_available?")
15
+ raise NotImplementedError, 'you must implement controller_available?'
14
16
  end
15
17
 
16
18
  def view_available?
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SwitchUser
2
4
  class DataSources
3
5
  attr_reader :sources
@@ -7,11 +9,11 @@ module SwitchUser
7
9
  end
8
10
 
9
11
  def all
10
- sources.flat_map { |source| source.all }
12
+ sources.flat_map(&:all)
11
13
  end
12
14
 
13
15
  def find_scope_id(scope_id)
14
- sources.map {|source| source.find_scope_id(scope_id) }.compact.first
16
+ sources.map { |source| source.find_scope_id(scope_id) }.compact.first
15
17
  end
16
18
  end
17
19
 
@@ -40,11 +42,10 @@ module SwitchUser
40
42
 
41
43
  class GuestDataSource
42
44
  def all
43
- [ GuestRecord.new ]
45
+ [GuestRecord.new]
44
46
  end
45
47
 
46
- def find_scope_id(scope_id)
47
- end
48
+ def find_scope_id(scope_id); end
48
49
  end
49
50
 
50
51
  class Record
@@ -70,10 +71,9 @@ module SwitchUser
70
71
 
71
72
  class GuestRecord
72
73
  def label
73
- "Guest"
74
+ 'Guest'
74
75
  end
75
76
 
76
- def scope_id
77
- end
77
+ def scope_id; end
78
78
  end
79
79
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SwitchUser
2
4
  class LambdaGuard < BaseGuard
3
5
  def controller_available?
@@ -1,17 +1,27 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SwitchUser
2
4
  module Provider
3
- autoload :Base, "switch_user/provider/base"
4
- autoload :Authlogic, "switch_user/provider/authlogic"
5
- autoload :Clearance, "switch_user/provider/clearance"
6
- autoload :Devise, "switch_user/provider/devise"
7
- autoload :RestfulAuthentication, "switch_user/provider/restful_authentication"
8
- autoload :Sorcery, "switch_user/provider/sorcery"
9
- autoload :Dummy, "switch_user/provider/dummy"
10
- autoload :Session, "switch_user/provider/session"
5
+ autoload :Base, 'switch_user/provider/base'
6
+ autoload :Authlogic, 'switch_user/provider/authlogic'
7
+ autoload :Clearance, 'switch_user/provider/clearance'
8
+ autoload :Devise, 'switch_user/provider/devise'
9
+ autoload :RestfulAuthentication, 'switch_user/provider/restful_authentication'
10
+ autoload :Sorcery, 'switch_user/provider/sorcery'
11
+ autoload :Dummy, 'switch_user/provider/dummy'
12
+ autoload :Session, 'switch_user/provider/session'
11
13
 
12
14
  def self.init(controller)
13
- klass_part = SwitchUser.provider.to_s.classify
14
- klass = "SwitchUser::Provider::#{klass_part}".constantize
15
+ klass_part =
16
+ if SwitchUser.provider.is_a?(Hash)
17
+ SwitchUser.provider[:name]
18
+ else
19
+ SwitchUser.provider
20
+ end
21
+
22
+ klass_part = klass_part.to_s.classify
23
+
24
+ klass = "SwitchUser::Provider::#{klass_part}".constantize
15
25
 
16
26
  klass.new(controller)
17
27
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SwitchUser
2
4
  module Provider
3
5
  class Authlogic < Base
@@ -5,19 +7,17 @@ module SwitchUser
5
7
  @controller = controller
6
8
  end
7
9
 
8
- def login(user, scope = nil)
10
+ def login(user, _scope = nil)
9
11
  UserSession.create(user)
10
12
  end
11
13
 
12
- def logout(scope = nil)
14
+ def logout(_scope = nil)
13
15
  @controller.current_user_session.destroy
14
16
  end
15
17
 
16
- def current_user(scope = nil)
18
+ def current_user(_scope = nil)
17
19
  result = UserSession.find
18
- if result
19
- result.record
20
- end
20
+ result&.record
21
21
  end
22
22
  end
23
23
  end
@@ -1,11 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SwitchUser
2
4
  module Provider
3
5
  class Base
4
6
  def current_users_without_scope
5
- SwitchUser.available_scopes.inject([]) do |users, scope|
7
+ SwitchUser.available_scopes.each_with_object([]) do |scope, users|
6
8
  user = current_user(scope)
7
9
  users << user if user
8
- users
9
10
  end
10
11
  end
11
12
 
@@ -32,14 +33,13 @@ module SwitchUser
32
33
  def original_user
33
34
  user_identifier = @controller.session[:original_user_scope_identifier]
34
35
 
35
- if user_identifier
36
- UserLoader.prepare(:scope_identifier => user_identifier).user
37
- end
36
+ UserLoader.prepare(scope_identifier: user_identifier).user if user_identifier
38
37
  end
39
38
 
40
39
  def original_user=(user)
41
- user_type = user.class.to_s.underscore
42
- user_identifier = "#{user_type}_#{user.id}"
40
+ user_type = user.class.to_s.underscore
41
+ column_name = SwitchUser.available_users_identifiers[user_type.to_sym]
42
+ user_identifier = "#{user_type}_#{user.send(column_name)}"
43
43
 
44
44
  @controller.session[:original_user_scope_identifier] = user_identifier
45
45
  end
@@ -59,7 +59,6 @@ module SwitchUser
59
59
  def current_user?(user, scope = :user)
60
60
  current_user(scope) == user
61
61
  end
62
-
63
62
  end
64
63
  end
65
64
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SwitchUser
2
4
  module Provider
3
5
  class Clearance < Base
@@ -5,16 +7,16 @@ module SwitchUser
5
7
  @controller = controller
6
8
  end
7
9
 
8
- def login(user, scope = nil)
9
- @controller.sign_in(user)
10
+ def login(user, _scope = nil)
11
+ @controller.send(:sign_in, user)
10
12
  end
11
13
 
12
- def logout(scope = nil)
13
- @controller.sign_out
14
+ def logout(_scope = nil)
15
+ @controller.send(:sign_out)
14
16
  end
15
17
 
16
- def current_user(scope = nil)
17
- @controller.current_user
18
+ def current_user(_scope = nil)
19
+ @controller.send(:current_user)
18
20
  end
19
21
  end
20
22
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SwitchUser
2
4
  module Provider
3
5
  class Devise < Base
@@ -6,15 +8,19 @@ module SwitchUser
6
8
  @warden = @controller.warden
7
9
  end
8
10
 
9
- def login(user, scope = :user)
10
- @warden.session_serializer.store(user, scope)
11
+ def login(user, scope = nil)
12
+ if SwitchUser.provider.is_a?(Hash) && SwitchUser.provider[:store_sign_in]
13
+ @warden.set_user(user, scope: scope)
14
+ else
15
+ @warden.session_serializer.store(user, scope)
16
+ end
11
17
  end
12
18
 
13
- def logout(scope = :user)
19
+ def logout(scope = nil)
14
20
  @warden.logout(scope)
15
21
  end
16
22
 
17
- def current_user(scope = :user)
23
+ def current_user(scope = nil)
18
24
  @warden.user(scope)
19
25
  end
20
26
  end
@@ -1,32 +1,28 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SwitchUser
2
4
  module Provider
3
5
  class Dummy < Base
4
- def initialize(controller)
6
+ def initialize(_controller)
5
7
  @user = nil
6
8
  end
7
9
 
8
- def login(user, scope = nil)
10
+ def login(user, _scope = nil)
9
11
  @user = user
10
12
  end
11
13
 
12
- def logout(scope = nil)
14
+ def logout(_scope = nil)
13
15
  @user = nil
14
16
  end
15
17
 
16
- def current_user(scope = nil)
18
+ def current_user(_scope = nil)
17
19
  @user
18
20
  end
19
21
 
20
- def original_user
21
- @original_user
22
- end
22
+ attr_reader :original_user
23
23
 
24
24
  def remember_current_user(remember)
25
- if remember
26
- @original_user = current_user
27
- else
28
- @original_user = nil
29
- end
25
+ @original_user = (current_user if remember)
30
26
  end
31
27
  end
32
28
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SwitchUser
2
4
  module Provider
3
5
  class RestfulAuthentication < Base
@@ -5,15 +7,15 @@ module SwitchUser
5
7
  @controller = controller
6
8
  end
7
9
 
8
- def login(user, scope = nil)
10
+ def login(user, _scope = nil)
9
11
  @controller.current_user = user
10
12
  end
11
13
 
12
- def logout(scope = nil)
14
+ def logout(_scope = nil)
13
15
  @controller.logout_killing_session!
14
16
  end
15
17
 
16
- def current_user(scope = nil)
18
+ def current_user(_scope = nil)
17
19
  @controller.current_user
18
20
  end
19
21
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SwitchUser
2
4
  module Provider
3
5
  class Session < Base
@@ -5,15 +7,15 @@ module SwitchUser
5
7
  @controller = controller
6
8
  end
7
9
 
8
- def login(user, scope = nil)
10
+ def login(user, _scope = nil)
9
11
  @controller.session[session_key] = user.id
10
12
  end
11
13
 
12
- def logout(scope = nil)
14
+ def logout(_scope = nil)
13
15
  @controller.session.delete(session_key)
14
16
  end
15
17
 
16
- def current_user(scope = nil)
18
+ def current_user(_scope = nil)
17
19
  @controller.current_user
18
20
  end
19
21
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SwitchUser
2
4
  module Provider
3
5
  class Sorcery < Base
@@ -5,14 +7,12 @@ module SwitchUser
5
7
  @controller = controller
6
8
  end
7
9
 
8
- def login(user, scope = nil)
10
+ def login(user, _scope = nil)
9
11
  @controller.auto_login(user)
10
12
  end
11
13
 
12
- def logout(scope = nil)
13
- if SwitchUser.switch_back
14
- save_original_user_identifier
15
- end
14
+ def logout(_scope = nil)
15
+ save_original_user_identifier if SwitchUser.switch_back
16
16
 
17
17
  @controller.logout
18
18
 
@@ -24,12 +24,11 @@ module SwitchUser
24
24
  end
25
25
 
26
26
  def restore_original_user_identifier
27
- if @original_user_scope_identifier
28
- @controller.session[:original_user_scope_identifier] = @original_user_scope_identifier
29
- end
27
+ @controller.session[:original_user_scope_identifier] =
28
+ @original_user_scope_identifier if @original_user_scope_identifier
30
29
  end
31
30
 
32
- def current_user(scope = nil)
31
+ def current_user(_scope = nil)
33
32
  @controller.current_user
34
33
  end
35
34
  end
@@ -1,8 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SwitchUser
2
4
  class Engine < Rails::Engine
3
- initializer "switch_user.view" do
4
- ActiveSupport.on_load(:action_view) do
5
- include SwitchUserHelper
5
+ initializer 'switch_user.view' do
6
+ config.to_prepare do
7
+ ActiveSupport.on_load(:action_view) do
8
+ include SwitchUserHelper
9
+ end
6
10
  end
7
11
  end
8
12
  end
@@ -1,13 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'switch_user/rspec/feature_helpers'
2
4
 
3
5
  require 'rspec/core'
4
6
 
5
7
  RSpec.configure do |config|
8
+ config.include SwitchUser::RSpecFeatureHelpers, type: :feature
6
9
 
7
- config.include SwitchUser::RSpecFeatureHelpers, :type => :feature
8
-
9
- config.before(:each, :type => :feature) do
10
+ config.before(:each, type: :feature) do
10
11
  allow_any_instance_of(SwitchUserController).to receive(:available?).and_return(true)
11
12
  end
12
-
13
13
  end
@@ -1,9 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SwitchUser
2
4
  module RSpecFeatureHelpers
3
-
4
5
  class InvalidArgument < StandardError; end
5
6
 
6
- def switch_user(user_record_or_scope, user_id=nil)
7
+ def switch_user(user_record_or_scope, user_id = nil)
7
8
  _user_scope =
8
9
  case user_record_or_scope
9
10
  when ActiveRecord::Base
@@ -14,31 +15,29 @@ module SwitchUser
14
15
 
15
16
  _user_scope = _user_scope.to_s
16
17
 
17
- unless (SwitchUser.available_scopes.include?(_user_scope) or SwitchUser.available_scopes.include?(_user_scope.to_sym))
18
- raise SwitchUser::InvalidScope.new("don't allow this user sign in, please check config.available_users")
19
- end
18
+ raise SwitchUser::InvalidScope,
19
+ "don't allow this user sign in, please check config.available_users" unless SwitchUser.available_scopes
20
+ .include?(_user_scope) || SwitchUser.available_scopes.include?(_user_scope.to_sym)
20
21
 
21
22
  _user_id =
22
23
  case user_record_or_scope
23
24
  when ActiveRecord::Base
24
- identifier = SwitchUser.available_users_identifiers[_user_scope] || SwitchUser.available_users_identifiers[_user_scope.to_sym]
25
- if identifier.nil?
26
- raise SwitchUser::InvalidScope.new("don't allow switch this user, please check config.available_users_identifiers")
27
- end
25
+ identifier =
26
+ SwitchUser.available_users_identifiers[_user_scope] ||
27
+ SwitchUser.available_users_identifiers[_user_scope.to_sym]
28
+ raise SwitchUser::InvalidScope,
29
+ "don't allow switch this user, please check config.available_users_identifiers" if identifier.nil?
30
+
28
31
  user_record_or_scope.send identifier
29
32
  else
30
33
  user_id
31
34
  end
32
35
 
33
- if _user_id.to_s.empty?
34
- raise InvalidArgument.new("don't allow switch this user, user_id is empty")
35
- end
36
+ raise InvalidArgument, "don't allow switch this user, user_id is empty" if _user_id.to_s.empty?
36
37
 
37
38
  scope_identifier = "#{_user_scope}_#{_user_id}"
38
39
 
39
40
  visit "/switch_user?scope_identifier=#{scope_identifier}"
40
41
  end
41
-
42
42
  end
43
-
44
43
  end