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,14 +1,16 @@
1
- RSpec.shared_examples_for "a provider" do
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.shared_examples_for 'a provider' do
2
4
  let(:user) { User.create! }
3
5
  let(:other_user) { User.create! }
4
6
 
5
- it "can log a user in" do
7
+ it 'can log a user in' do
6
8
  provider.login(user)
7
9
 
8
10
  expect(provider.current_user).to eq user
9
11
  end
10
12
 
11
- it "can log a user out" do
13
+ it 'can log a user out' do
12
14
  provider.login(user)
13
15
 
14
16
  provider.logout
@@ -16,30 +18,30 @@ RSpec.shared_examples_for "a provider" do
16
18
  expect(provider.current_user).to eq nil
17
19
  end
18
20
 
19
- it "responds to login_exclusive" do
21
+ it 'responds to login_exclusive' do
20
22
  expect(provider).to respond_to(:login_exclusive)
21
23
  end
22
24
 
23
- it "responds to login_exclusive" do
25
+ it 'responds to login_exclusive' do
24
26
  expect(provider).to respond_to(:login_inclusive)
25
27
  end
26
28
 
27
- it "knows if there are any users logged in" do
28
- provider.login(user)
29
+ it 'knows if there are any users logged in' do
30
+ provider.login(user, :user)
29
31
 
30
32
  expect(provider.current_users_without_scope).to eq [user]
31
33
  end
32
34
 
33
- it "can lock the original user, allowing us to change current_user" do
35
+ it 'can lock the original user, allowing us to change current_user' do
34
36
  provider.login(user)
35
37
  provider.remember_current_user(true)
36
- provider.login_exclusive(other_user, scope: "user")
38
+ provider.login_exclusive(other_user, scope: 'user')
37
39
 
38
40
  expect(provider.original_user).to eq user
39
- expect(provider.current_user).to eq other_user
41
+ expect(provider.current_user(:user)).to eq other_user
40
42
  end
41
43
 
42
- it "can forget the original_user" do
44
+ it 'can forget the original_user' do
43
45
  provider.login(user)
44
46
  provider.remember_current_user(true)
45
47
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'switch_user/data_source'
2
4
 
3
5
  module SwitchUser
@@ -5,7 +7,7 @@ module SwitchUser
5
7
  describe '#all' do
6
8
  it 'aggregates multiple data_sources' do
7
9
  user = double(:user)
8
- s1 = double(:s1, :all => [user])
10
+ s1 = double(:s1, all: [user])
9
11
  source = DataSources.new([s1, s1])
10
12
 
11
13
  expect(source.all).to eq [user, user]
@@ -15,17 +17,17 @@ module SwitchUser
15
17
  describe '#find_scope_id' do
16
18
  it 'can find a corresponding record across data sources' do
17
19
  user = double(:user)
18
- s1 = double(:s1, :find_scope_id => nil)
19
- s2 = double(:s2, :find_scope_id => user)
20
+ s1 = double(:s1, find_scope_id: nil)
21
+ s2 = double(:s2, find_scope_id: user)
20
22
  source = DataSources.new([s1, s2])
21
23
 
22
- expect(source.find_scope_id("user_10")).to eq user
24
+ expect(source.find_scope_id('user_10')).to eq user
23
25
  end
24
26
  end
25
27
  end
26
28
 
27
29
  RSpec.describe DataSource do
28
- pending # it's tested in integration test, need to find a good way to test it here.
30
+ skip # it's tested in integration test, need to find a good way to test it here.
29
31
  end
30
32
 
31
33
  RSpec.describe GuestDataSource do
@@ -1,17 +1,19 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  module SwitchUser
4
6
  RSpec.describe LambdaGuard do
5
- describe "#controller_available?" do
6
- it "calls the controller_guard proc" do
7
+ describe '#controller_available?' do
8
+ it 'calls the controller_guard proc' do
7
9
  controller = double.as_null_object
8
10
  provider = double.as_null_object
9
11
  guard = SwitchUser::LambdaGuard.new(controller, provider)
10
12
 
11
- SwitchUser.controller_guard = lambda {|a| a }
13
+ SwitchUser.controller_guard = ->(a) { a }
12
14
  expect(guard).to be_controller_available
13
15
 
14
- SwitchUser.controller_guard = lambda {|a| !a }
16
+ SwitchUser.controller_guard = ->(a) { !a }
15
17
  expect(guard).not_to be_controller_available
16
18
  end
17
19
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'switch_user/user_loader'
3
5
 
@@ -5,52 +7,50 @@ RSpec.describe SwitchUser::UserLoader do
5
7
  let(:user) { double(:user) }
6
8
  let(:user_result) { [user] }
7
9
 
8
- it "raises an exception if we are passed an invalid scope" do
9
- expect { SwitchUser::UserLoader.new("useeer", 1) }.to raise_error(SwitchUser::InvalidScope)
10
+ it 'raises an exception if we are passed an invalid scope' do
11
+ expect { SwitchUser::UserLoader.new('useeer', 1) }.to raise_error(SwitchUser::InvalidScope)
10
12
  end
11
13
 
12
- describe ".user" do
14
+ describe '.user' do
13
15
  before do
14
- SwitchUser.available_users_identifiers = {:user => :id}
15
- allow(User).to receive(:where).with(:id => "1").and_return(user_result)
16
+ SwitchUser.available_users_identifiers = { user: :id }
17
+ allow(User).to receive(:where).with(id: '1').and_return(user_result)
16
18
  end
17
- it "can be loaded from a scope and identifier" do
18
- loaded_user = SwitchUser::UserLoader.prepare("user","1").user
19
+ it 'can be loaded from a scope and identifier' do
20
+ loaded_user = SwitchUser::UserLoader.prepare('user', '1').user
19
21
 
20
22
  expect(loaded_user).to eq user
21
23
  end
22
- it "can be loaded by a passing an unprocessed scope identifier" do
23
- loaded_user = SwitchUser::UserLoader.prepare(:scope_identifier => "user_1").user
24
+ it 'can be loaded by a passing an unprocessed scope identifier' do
25
+ loaded_user = SwitchUser::UserLoader.prepare(scope_identifier: 'user_1').user
24
26
 
25
27
  expect(loaded_user).to eq user
26
28
  end
27
- it "raises an error for an invalid scope" do
28
- expect {
29
- loaded_user = SwitchUser::UserLoader.prepare(nil, "1")
30
- }.to raise_error(SwitchUser::InvalidScope)
29
+ it 'raises an error for an invalid scope' do
30
+ expect { loaded_user = SwitchUser::UserLoader.prepare(nil, '1') }.to raise_error(SwitchUser::InvalidScope)
31
31
  end
32
32
  end
33
33
 
34
- it "returns a user" do
35
- allow(User).to receive(:where).with(:id => 1).and_return(user_result)
34
+ it 'returns a user' do
35
+ allow(User).to receive(:where).with(id: 1).and_return(user_result)
36
36
 
37
- loader = SwitchUser::UserLoader.new("user", 1)
37
+ loader = SwitchUser::UserLoader.new('user', 1)
38
38
 
39
39
  expect(loader.user).to eq user
40
40
  end
41
41
 
42
- it "returns nil if no user is found" do
43
- loader = SwitchUser::UserLoader.new("user", 3)
42
+ it 'returns nil if no user is found' do
43
+ loader = SwitchUser::UserLoader.new('user', 3)
44
44
 
45
- expect(User.find_by_id(3)).to be_nil
45
+ expect(User.find_by(id: 3)).to be_nil
46
46
  expect(loader.user).to eq nil
47
47
  end
48
48
 
49
- it "loads a user with an alternate identifier column" do
50
- allow(User).to receive(:where).with(:email => 2).and_return(user_result)
51
- SwitchUser.available_users_identifiers = {:user => :email}
49
+ it 'loads a user with an alternate identifier column' do
50
+ allow(User).to receive(:where).with(email: 2).and_return(user_result)
51
+ SwitchUser.available_users_identifiers = { user: :email }
52
52
 
53
- loader = SwitchUser::UserLoader.new("user", 2)
53
+ loader = SwitchUser::UserLoader.new('user', 2)
54
54
  expect(loader.user).to eq user
55
55
  end
56
56
  end
@@ -1,33 +1,35 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'switch_user/user_set'
3
5
 
4
6
  module SwitchUser
5
7
  RSpec.describe UserSet do
6
- let!(:user) { User.create(:email => "test@example.com") }
7
- let(:set) { UserSet.new(:user, :id, :email, lambda { User.all }) }
8
+ let!(:user) { User.create(email: 'test@example.com') }
9
+ let(:set) { UserSet.new(:user, :id, :email, -> { User.all }) }
8
10
  after { User.delete_all }
9
11
  it "returns an object that knows it's scope, id and label" do
10
12
  found_user = set[user.id]
11
13
 
12
14
  expect(found_user.id).to eq user.id
13
15
  expect(found_user.scope).to eq :user
14
- expect(found_user.label).to eq "test@example.com"
16
+ expect(found_user.label).to eq 'test@example.com'
15
17
  end
16
- it "returns all available users for a scope" do
18
+ it 'returns all available users for a scope' do
17
19
  expect(set.users).to eq [user]
18
20
  end
19
- it "chains the where on to the provided scope" do
20
- set = UserSet.new(:user, :id, :email, lambda { User.all })
21
+ it 'chains the where on to the provided scope' do
22
+ set = UserSet.new(:user, :id, :email, -> { User.all })
21
23
  expect(set.find_user(user.id).label).to eq user.email
22
24
  end
23
25
  end
24
26
  RSpec.describe UserSet::Record do
25
- it "correctly configures the record using the set" do
26
- user = double(:user, :id => 100, :email => "test@example.com")
27
- set = double(:set, :identifier => :id, :label => :email, :scope => :user)
27
+ it 'correctly configures the record using the set' do
28
+ user = double(:user, id: 100, email: 'test@example.com')
29
+ set = double(:set, identifier: :id, label: :email, scope: :user)
28
30
  record = UserSet::Record.build(user, set)
29
31
  expect(record.id).to eq 100
30
- expect(record.label).to eq "test@example.com"
32
+ expect(record.label).to eq 'test@example.com'
31
33
  expect(record.scope).to eq :user
32
34
  end
33
35
  end
@@ -1,15 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'switch_user'
3
5
 
4
6
  RSpec.describe SwitchUser do
5
- describe "#available_scopes" do
6
- it "returns a list of available scopes" do
7
+ describe '#available_scopes' do
8
+ it 'returns a list of available scopes' do
7
9
  expect(SwitchUser.available_scopes).to eq [:user]
8
10
  end
9
11
  end
10
12
 
11
- describe "assigning the provider" do
12
- it "sets the provider" do
13
+ describe 'assigning the provider' do
14
+ it 'sets the provider' do
13
15
  # ensure we aren't breaking existing functionality
14
16
  SwitchUser.provider = :sorcery
15
17
  expect(SwitchUser.provider).to eq :sorcery
@@ -1,33 +1,34 @@
1
- # -*- encoding: utf-8 -*-
2
- require File.expand_path("../lib/switch_user/version", __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path('../lib/switch_user/version', __FILE__)
3
4
 
4
5
  Gem::Specification.new do |s|
5
- s.name = "switch_user"
6
+ s.name = 'switch_user'
6
7
  s.version = SwitchUser::VERSION
7
8
  s.platform = Gem::Platform::RUBY
8
- s.authors = ["Richard Huang", "Luke Cowell"]
9
- s.email = ["flyerhzm@gmail.com"]
10
- s.homepage = "http://rubygems.org/gems/switch_user"
11
- s.summary = "Easily switch current user to speed up development"
12
- s.description = "Easily switch current user to speed up development"
9
+ s.authors = ['Richard Huang', 'Luke Cowell']
10
+ s.email = ['flyerhzm@gmail.com']
11
+ s.license = 'MIT'
12
+ s.homepage = 'http://rubygems.org/gems/switch_user'
13
+ s.summary = 'Easily switch current user to speed up development'
14
+ s.description = 'Easily switch current user to speed up development'
13
15
 
14
- s.required_rubygems_version = ">= 1.3.6"
15
- s.rubyforge_project = "switch_user"
16
+ s.required_rubygems_version = '>= 1.3.6'
16
17
 
17
- s.add_development_dependency "activesupport"
18
- s.add_development_dependency "bundler", ">= 1.0.0"
19
- s.add_development_dependency "actionpack"
20
- s.add_development_dependency "railties"
21
- s.add_development_dependency "rspec"
22
- s.add_development_dependency "rspec-rails"
23
- s.add_development_dependency "tzinfo"
24
- s.add_development_dependency "sqlite3"
25
- s.add_development_dependency "activerecord"
26
- s.add_development_dependency "awesome_print"
27
- s.add_development_dependency "pry"
28
- s.add_development_dependency "capybara"
18
+ s.add_development_dependency 'actionpack'
19
+ s.add_development_dependency 'activerecord'
20
+ s.add_development_dependency 'activesupport'
21
+ s.add_development_dependency 'awesome_print'
22
+ s.add_development_dependency 'bundler', '>= 1.0.0'
23
+ s.add_development_dependency 'capybara'
24
+ s.add_development_dependency 'pry'
25
+ s.add_development_dependency 'railties'
26
+ s.add_development_dependency 'rspec'
27
+ s.add_development_dependency 'rspec-rails'
28
+ s.add_development_dependency 'sqlite3', '~> 1.3.6'
29
+ s.add_development_dependency 'tzinfo'
29
30
 
30
31
  s.files = `git ls-files`.split("\n")
31
- s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
32
+ s.executables = `git ls-files`.split("\n").map { |f| f =~ /^bin\/(.*)/ ? Regexp.last_match(1) : nil }.compact
32
33
  s.require_path = 'lib'
33
34
  end
metadata CHANGED
@@ -1,18 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: switch_user
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Huang
8
8
  - Luke Cowell
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-08-21 00:00:00.000000000 Z
12
+ date: 2020-10-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: activesupport
15
+ name: actionpack
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
18
  - - ">="
@@ -26,21 +26,21 @@ dependencies:
26
26
  - !ruby/object:Gem::Version
27
27
  version: '0'
28
28
  - !ruby/object:Gem::Dependency
29
- name: bundler
29
+ name: activerecord
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: 1.0.0
34
+ version: '0'
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - ">="
40
40
  - !ruby/object:Gem::Version
41
- version: 1.0.0
41
+ version: '0'
42
42
  - !ruby/object:Gem::Dependency
43
- name: actionpack
43
+ name: activesupport
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - ">="
@@ -54,7 +54,7 @@ dependencies:
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
56
  - !ruby/object:Gem::Dependency
57
- name: railties
57
+ name: awesome_print
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - ">="
@@ -68,21 +68,21 @@ dependencies:
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0'
70
70
  - !ruby/object:Gem::Dependency
71
- name: rspec
71
+ name: bundler
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
74
  - - ">="
75
75
  - !ruby/object:Gem::Version
76
- version: '0'
76
+ version: 1.0.0
77
77
  type: :development
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
81
  - - ">="
82
82
  - !ruby/object:Gem::Version
83
- version: '0'
83
+ version: 1.0.0
84
84
  - !ruby/object:Gem::Dependency
85
- name: rspec-rails
85
+ name: capybara
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
88
  - - ">="
@@ -96,7 +96,7 @@ dependencies:
96
96
  - !ruby/object:Gem::Version
97
97
  version: '0'
98
98
  - !ruby/object:Gem::Dependency
99
- name: tzinfo
99
+ name: pry
100
100
  requirement: !ruby/object:Gem::Requirement
101
101
  requirements:
102
102
  - - ">="
@@ -110,7 +110,7 @@ dependencies:
110
110
  - !ruby/object:Gem::Version
111
111
  version: '0'
112
112
  - !ruby/object:Gem::Dependency
113
- name: sqlite3
113
+ name: railties
114
114
  requirement: !ruby/object:Gem::Requirement
115
115
  requirements:
116
116
  - - ">="
@@ -124,7 +124,7 @@ dependencies:
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
126
  - !ruby/object:Gem::Dependency
127
- name: activerecord
127
+ name: rspec
128
128
  requirement: !ruby/object:Gem::Requirement
129
129
  requirements:
130
130
  - - ">="
@@ -138,7 +138,7 @@ dependencies:
138
138
  - !ruby/object:Gem::Version
139
139
  version: '0'
140
140
  - !ruby/object:Gem::Dependency
141
- name: awesome_print
141
+ name: rspec-rails
142
142
  requirement: !ruby/object:Gem::Requirement
143
143
  requirements:
144
144
  - - ">="
@@ -152,21 +152,21 @@ dependencies:
152
152
  - !ruby/object:Gem::Version
153
153
  version: '0'
154
154
  - !ruby/object:Gem::Dependency
155
- name: pry
155
+ name: sqlite3
156
156
  requirement: !ruby/object:Gem::Requirement
157
157
  requirements:
158
- - - ">="
158
+ - - "~>"
159
159
  - !ruby/object:Gem::Version
160
- version: '0'
160
+ version: 1.3.6
161
161
  type: :development
162
162
  prerelease: false
163
163
  version_requirements: !ruby/object:Gem::Requirement
164
164
  requirements:
165
- - - ">="
165
+ - - "~>"
166
166
  - !ruby/object:Gem::Version
167
- version: '0'
167
+ version: 1.3.6
168
168
  - !ruby/object:Gem::Dependency
169
- name: capybara
169
+ name: tzinfo
170
170
  requirement: !ruby/object:Gem::Requirement
171
171
  requirements:
172
172
  - - ">="
@@ -243,9 +243,10 @@ files:
243
243
  - spec/switch_user_spec.rb
244
244
  - switch_user.gemspec
245
245
  homepage: http://rubygems.org/gems/switch_user
246
- licenses: []
246
+ licenses:
247
+ - MIT
247
248
  metadata: {}
248
- post_install_message:
249
+ post_install_message:
249
250
  rdoc_options: []
250
251
  require_paths:
251
252
  - lib
@@ -260,9 +261,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
260
261
  - !ruby/object:Gem::Version
261
262
  version: 1.3.6
262
263
  requirements: []
263
- rubyforge_project: switch_user
264
- rubygems_version: 2.5.1
265
- signing_key:
264
+ rubygems_version: 3.1.2
265
+ signing_key:
266
266
  specification_version: 4
267
267
  summary: Easily switch current user to speed up development
268
268
  test_files: []