switch_user 1.3.1 → 1.5.3

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 +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: []