switch_user 1.4.0 → 1.5.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +22 -0
  3. data/Gemfile +2 -0
  4. data/README.md +22 -20
  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 +16 -13
  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 +5 -3
  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,20 +1,23 @@
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
- if SwitchUser.provider.is_a?(Hash)
14
- klass_part = SwitchUser.provider[:name]
15
- else
16
- klass_part = SwitchUser.provider
17
- end
15
+ klass_part =
16
+ if SwitchUser.provider.is_a?(Hash)
17
+ SwitchUser.provider[:name]
18
+ else
19
+ SwitchUser.provider
20
+ end
18
21
 
19
22
  klass_part = klass_part.to_s.classify
20
23
 
@@ -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,7 +8,7 @@ module SwitchUser
6
8
  @warden = @controller.warden
7
9
  end
8
10
 
9
- def login(user, scope = :user)
11
+ def login(user, scope = nil)
10
12
  if SwitchUser.provider.is_a?(Hash) && SwitchUser.provider[:store_sign_in]
11
13
  @warden.set_user(user, scope: scope)
12
14
  else
@@ -14,11 +16,11 @@ module SwitchUser
14
16
  end
15
17
  end
16
18
 
17
- def logout(scope = :user)
19
+ def logout(scope = nil)
18
20
  @warden.logout(scope)
19
21
  end
20
22
 
21
- def current_user(scope = :user)
23
+ def current_user(scope = nil)
22
24
  @warden.user(scope)
23
25
  end
24
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