switch_user 1.4.0 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +20 -19
- data/app/controllers/switch_user_controller.rb +21 -9
- data/app/helpers/switch_user_helper.rb +5 -5
- data/app/views/switch_user/_widget.html.erb +2 -2
- data/config/routes.rb +2 -2
- data/lib/generators/switch_user/install/templates/switch_user.rb +6 -6
- data/lib/switch_user.rb +6 -6
- data/lib/switch_user/data_source.rb +2 -2
- data/lib/switch_user/provider/base.rb +1 -1
- data/lib/switch_user/provider/devise.rb +3 -3
- data/lib/switch_user/rspec.rb +2 -2
- data/lib/switch_user/rspec/feature_helpers.rb +1 -1
- data/lib/switch_user/user_set.rb +3 -3
- data/lib/switch_user/version.rb +1 -1
- data/spec/controllers/switch_user_controller_spec.rb +11 -13
- data/spec/helpers/switch_user_helper_spec.rb +8 -8
- data/spec/integration/switch_user_spec.rb +33 -12
- data/spec/provider/devise_spec.rb +5 -5
- data/spec/rspec/feature_helpers_spec.rb +23 -23
- data/spec/spec_helper.rb +1 -1
- data/spec/support/application.rb +23 -11
- data/spec/support/provider.rb +2 -2
- data/spec/switch_user/data_source_spec.rb +4 -4
- data/spec/switch_user/lambda_guard_spec.rb +2 -2
- data/spec/switch_user/user_loader_spec.rb +7 -7
- data/spec/switch_user/user_set_spec.rb +5 -5
- data/switch_user.gemspec +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4cc1c6867f857a993d2f742e22150537d5ef29aa
|
4
|
+
data.tar.gz: 9c4e70bd6dd34f625000e5862855fffdcb08fe27
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c7f26cd2dff27bd70b98f84bbe7e6ab9e9fcecb68903d353b7faa3e853789cc6278773210657f281a8223d8aa6bc0f6a5041490df9a61daa6b2d6112a06c24e7
|
7
|
+
data.tar.gz: '08c2e33483cfbac4555843d32f408f4ff8d60c45e26e82e4d1bd65c21d6f4a9cf1a5d992a4a3c440a867bc5d05924232600a14971b5ff0522c9af828f16bf625'
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -14,7 +14,7 @@ switch_user is very useful in such use cases
|
|
14
14
|
|
15
15
|
## Example
|
16
16
|
|
17
|
-
Visit here: <http://switch-user-example.heroku.com>, switch the current user in the select box.
|
17
|
+
Visit here: <http://switch-user-example.heroku.com/admin>, switch the current user in the select box.
|
18
18
|
|
19
19
|
And source code here: <https://github.com/flyerhzm/switch_user_example>
|
20
20
|
|
@@ -24,6 +24,9 @@ Add in Gemfile.
|
|
24
24
|
```ruby
|
25
25
|
gem "switch_user"
|
26
26
|
```
|
27
|
+
|
28
|
+
If you get the following error: **undefined method `before_action' for SwitchUserController:Class**, you are probably using an older version of Rails (<4). You can use this gem: https://github.com/pschambacher/rails3-before_action
|
29
|
+
|
27
30
|
## Usage
|
28
31
|
|
29
32
|
Add following code into your layout page.
|
@@ -69,7 +72,7 @@ SwitchUser.setup do |config|
|
|
69
72
|
# available_users is a hash,
|
70
73
|
# key is the model name of user (:user, :admin, or any name you use),
|
71
74
|
# value is a block that return the users that can be switched.
|
72
|
-
config.available_users = { :
|
75
|
+
config.available_users = { user: -> { User.all } } # use User.scoped instead for rails 3.2
|
73
76
|
|
74
77
|
# available_users_identifiers is a hash,
|
75
78
|
# keys in this hash should match a key in the available_users hash
|
@@ -77,55 +80,55 @@ SwitchUser.setup do |config|
|
|
77
80
|
# defaults to id
|
78
81
|
# this hash is to allow you to specify a different column to
|
79
82
|
# expose for instance a username on a User model instead of id
|
80
|
-
config.available_users_identifiers = { :
|
83
|
+
config.available_users_identifiers = { user: :id }
|
81
84
|
|
82
85
|
# available_users_names is a hash,
|
83
86
|
# keys in this hash should match a key in the available_users hash
|
84
87
|
# value is the column name which will be displayed in select box
|
85
|
-
config.available_users_names = { :
|
88
|
+
config.available_users_names = { user: :email }
|
86
89
|
|
87
90
|
# controller_guard is a block,
|
88
91
|
# if it returns true, the request will continue,
|
89
92
|
# else the request will be refused and returns "Permission Denied"
|
90
93
|
# if you switch from "admin" to user, the current_user param is "admin"
|
91
|
-
config.controller_guard =
|
94
|
+
config.controller_guard = ->(current_user, request) { Rails.env.development? }
|
92
95
|
|
93
96
|
# view_guard is a block,
|
94
97
|
# if it returns true, the switch user select box will be shown,
|
95
98
|
# else the select box will not be shown
|
96
99
|
# if you switch from admin to "user", the current_user param is "user"
|
97
|
-
config.view_guard =
|
100
|
+
config.view_guard = ->(current_user, request) { Rails.env.development? }
|
98
101
|
|
99
102
|
# redirect_path is a block, it returns which page will be redirected
|
100
103
|
# after switching a user.
|
101
|
-
config.redirect_path =
|
104
|
+
config.redirect_path = ->(request, params) { '/' }
|
102
105
|
end
|
103
106
|
```
|
104
107
|
If you need to override the default configuration, run <code>rails g switch_user:install</code> and a copy of the configuration file will be copied to <code>config/initializers/switch_user.rb</code> in your project.
|
105
108
|
|
106
109
|
If you want to switch both available users and available admins
|
107
110
|
```ruby
|
108
|
-
config.available_users = { :user =>
|
111
|
+
config.available_users = { :user => -> { User.available }, :admin => -> { Admin.available } }
|
109
112
|
```
|
110
113
|
If you want to use name column as the user identifier
|
111
114
|
```ruby
|
112
|
-
config.available_users_identifiers => { :
|
115
|
+
config.available_users_identifiers => { user: :name }
|
113
116
|
```
|
114
117
|
If you want to display the login field in switch user select box
|
115
118
|
```ruby
|
116
|
-
config.available_users_names = { :
|
119
|
+
config.available_users_names = { user: :login }
|
117
120
|
```
|
118
121
|
If you only allow switching from admin to user in production environment
|
119
122
|
```ruby
|
120
|
-
config.controller_guard =
|
123
|
+
config.controller_guard = ->(current_user, request) { Rails.env.production? && current_user.admin? }
|
121
124
|
```
|
122
125
|
If you only want to display switch user select box for admins in production environment
|
123
126
|
```ruby
|
124
|
-
config.view_guard =
|
127
|
+
config.view_guard = ->(current_user, request) { Rails.env.production? && current_user && current_user.admin? }
|
125
128
|
```
|
126
129
|
If you want to redirect user to "/dashboard" page
|
127
130
|
```ruby
|
128
|
-
config.redirect_path =
|
131
|
+
config.redirect_path = ->(request, params) { "/dashboard" }
|
129
132
|
```
|
130
133
|
If you want to hide a 'Guest' item in the helper dropdown list
|
131
134
|
```ruby
|
@@ -137,16 +140,14 @@ Sometimes you'll want to be able to switch to an unprivileged user and then back
|
|
137
140
|
You will need to make the following modifications to your configuration:
|
138
141
|
```ruby
|
139
142
|
config.switch_back = true
|
140
|
-
config.controller_guard =
|
141
|
-
current_user && current_user.admin? || original_user && original_user.super_admin?
|
142
|
-
}
|
143
|
+
config.controller_guard = ->(current_user, request, original_user) { current_user && current_user.admin? || original_user && original_user.super_admin? }
|
143
144
|
# Do something similar for the view_guard as well.
|
144
145
|
```
|
145
146
|
This example would allow an admin user to user switch_user, but would only let you switch back to another user if the original user was a super admin.
|
146
147
|
|
147
148
|
## Using SwitchUser with RSpec and Capybara
|
148
149
|
|
149
|
-
Add the following code to spec/support/switch_user.rb or spec/spec_helper.rb
|
150
|
+
Add the following code to spec/support/switch_user.rb or spec/spec_helper.rb:
|
150
151
|
|
151
152
|
```ruby
|
152
153
|
require 'switch_user/rspec'
|
@@ -157,7 +158,7 @@ You can now write your specs like so :
|
|
157
158
|
```ruby
|
158
159
|
feature "Your feature", type: :feature do
|
159
160
|
background do
|
160
|
-
@user = User.make(:
|
161
|
+
@user = User.make(email: 'user@example.com', password: 'password')
|
161
162
|
end
|
162
163
|
|
163
164
|
scenario "Your scenario" do
|
@@ -189,6 +190,6 @@ This feature should be used with extreme caution because of the security implica
|
|
189
190
|
|
190
191
|
## Credit
|
191
192
|
|
192
|
-
Copyright © 2010 -
|
193
|
+
Copyright © 2010 - 2017 Richard Huang (flyerhzm@gmail.com), released under the MIT license
|
193
194
|
|
194
195
|
[0]: https://github.com/tablatom/hobo
|
@@ -1,23 +1,35 @@
|
|
1
1
|
class SwitchUserController < ApplicationController
|
2
|
-
before_action :developer_modes_only
|
2
|
+
before_action :developer_modes_only, :switch_back
|
3
3
|
|
4
4
|
def set_current_user
|
5
5
|
handle_request(params)
|
6
6
|
|
7
|
-
|
7
|
+
redirect_path = SwitchUser.redirect_path.call(request, params)
|
8
|
+
if Rails.version.to_i >= 5 && redirect_path == :back
|
9
|
+
redirect_back(fallback_location: root_path)
|
10
|
+
else
|
11
|
+
redirect_to(redirect_path)
|
12
|
+
end
|
8
13
|
end
|
9
14
|
|
10
15
|
def remember_user
|
11
|
-
|
12
|
-
if
|
13
|
-
|
16
|
+
redirect_path = SwitchUser.redirect_path.call(request, params)
|
17
|
+
if Rails.version.to_i >= 5 && redirect_path == :back
|
18
|
+
redirect_back(fallback_location: root_path)
|
19
|
+
else
|
20
|
+
redirect_to(redirect_path)
|
14
21
|
end
|
15
|
-
|
16
|
-
redirect_to(SwitchUser.redirect_path.call(request, params))
|
17
22
|
end
|
18
23
|
|
19
24
|
private
|
20
25
|
|
26
|
+
def switch_back
|
27
|
+
if SwitchUser.switch_back
|
28
|
+
provider.remember_current_user(true) if params[:remember] == "true"
|
29
|
+
provider.remember_current_user(false) if params[:remember] == "false"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
21
33
|
def developer_modes_only
|
22
34
|
raise ActionController::RoutingError.new('Do not try to hack us.') unless available?
|
23
35
|
end
|
@@ -36,9 +48,9 @@ class SwitchUserController < ApplicationController
|
|
36
48
|
return
|
37
49
|
end
|
38
50
|
if SwitchUser.login_exclusive
|
39
|
-
provider.login_exclusive(record.user, :
|
51
|
+
provider.login_exclusive(record.user, scope: record.scope)
|
40
52
|
else
|
41
|
-
provider.login_inclusive(record.user, :
|
53
|
+
provider.login_inclusive(record.user, scope: record.scope)
|
42
54
|
end
|
43
55
|
end
|
44
56
|
end
|
@@ -23,11 +23,11 @@ module SwitchUserHelper
|
|
23
23
|
|
24
24
|
option_tags = grouped_options_for_select(grouped_options_container.to_a, selected_user)
|
25
25
|
|
26
|
-
render :
|
27
|
-
:
|
28
|
-
:
|
29
|
-
:
|
30
|
-
:
|
26
|
+
render partial: "switch_user/widget",
|
27
|
+
locals: {
|
28
|
+
option_tags: option_tags,
|
29
|
+
classes: options[:class],
|
30
|
+
styles: options[:style],
|
31
31
|
}
|
32
32
|
end
|
33
33
|
|
@@ -1,4 +1,4 @@
|
|
1
1
|
<% if SwitchUser.switch_back %>
|
2
|
-
<%= check_box_tag "remember_user", "remember_user", provider.original_user.present?, :
|
2
|
+
<%= check_box_tag "remember_user", "remember_user", provider.original_user.present?, onchange: "location.href = '#{ActionController::Base.relative_url_root || '/'}switch_user/remember_user?remember=' + encodeURIComponent(this.checked)" %>
|
3
3
|
<% end %>
|
4
|
-
<%= select_tag "switch_user_identifier", option_tags, :
|
4
|
+
<%= select_tag "switch_user_identifier", option_tags, onchange: "location.href = '#{ActionController::Base.relative_url_root || '/'}switch_user?scope_identifier=' + encodeURIComponent(this.options[this.selectedIndex].value)", class: classes, style: styles %>
|
data/config/routes.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
1
|
Rails.application.routes.draw do
|
2
|
-
get :switch_user, :
|
3
|
-
get 'switch_user/remember_user', :
|
2
|
+
get :switch_user, to: 'switch_user#set_current_user'
|
3
|
+
get 'switch_user/remember_user', to: 'switch_user#remember_user'
|
4
4
|
end
|
@@ -5,7 +5,7 @@ SwitchUser.setup do |config|
|
|
5
5
|
# available_users is a hash,
|
6
6
|
# key is the model name of user (:user, :admin, or any name you use),
|
7
7
|
# value is a block that return the users that can be switched.
|
8
|
-
config.available_users = { :
|
8
|
+
config.available_users = { user: -> { User.all } }
|
9
9
|
|
10
10
|
# available_users_identifiers is a hash,
|
11
11
|
# keys in this hash should match a key in the available_users hash
|
@@ -13,28 +13,28 @@ SwitchUser.setup do |config|
|
|
13
13
|
# defaults to id
|
14
14
|
# this hash is to allow you to specify a different column to
|
15
15
|
# expose for instance a username on a User model instead of id
|
16
|
-
config.available_users_identifiers = { :
|
16
|
+
config.available_users_identifiers = { user: :id }
|
17
17
|
|
18
18
|
# available_users_names is a hash,
|
19
19
|
# keys in this hash should match a key in the available_users hash
|
20
20
|
# value is the column name which will be displayed in select box
|
21
|
-
config.available_users_names = { :
|
21
|
+
config.available_users_names = { user: :email }
|
22
22
|
|
23
23
|
# controller_guard is a block,
|
24
24
|
# if it returns true, the request will continue,
|
25
25
|
# else the request will be refused and returns "Permission Denied"
|
26
26
|
# if you switch from "admin" to user, the current_user param is "admin"
|
27
|
-
config.controller_guard =
|
27
|
+
config.controller_guard = ->(current_user, request) { Rails.env.development? }
|
28
28
|
|
29
29
|
# view_guard is a block,
|
30
30
|
# if it returns true, the switch user select box will be shown,
|
31
31
|
# else the select box will not be shown
|
32
32
|
# if you switch from admin to "user", the current_user param is "user"
|
33
|
-
config.view_guard =
|
33
|
+
config.view_guard = ->(current_user, request) { Rails.env.development? }
|
34
34
|
|
35
35
|
# redirect_path is a block, it returns which page will be redirected
|
36
36
|
# after switching a user.
|
37
|
-
config.redirect_path =
|
37
|
+
config.redirect_path = ->(request, params) { '/' }
|
38
38
|
|
39
39
|
# helper_with_guest is a boolean value, if it set to false
|
40
40
|
# the guest item in the helper won't be shown
|
data/lib/switch_user.rb
CHANGED
@@ -53,13 +53,13 @@ module SwitchUser
|
|
53
53
|
|
54
54
|
def self.reset_config
|
55
55
|
self.provider = :devise
|
56
|
-
self.available_users = { :
|
57
|
-
self.available_users_identifiers = { :
|
58
|
-
self.available_users_names = { :
|
56
|
+
self.available_users = { user: -> { User.all } }
|
57
|
+
self.available_users_identifiers = { user: :id }
|
58
|
+
self.available_users_names = { user: :email }
|
59
59
|
self.guard_class = "SwitchUser::LambdaGuard"
|
60
|
-
self.controller_guard =
|
61
|
-
self.view_guard =
|
62
|
-
self.redirect_path =
|
60
|
+
self.controller_guard = ->(current_user, request) { Rails.env.development? }
|
61
|
+
self.view_guard = ->(current_user, request) { Rails.env.development? }
|
62
|
+
self.redirect_path = ->(request, params) { request.env["HTTP_REFERER"] ? :back : root_path }
|
63
63
|
self.session_key = :user_id
|
64
64
|
self.helper_with_guest = true
|
65
65
|
self.switch_back = false
|
@@ -11,7 +11,7 @@ module SwitchUser
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def find_scope_id(scope_id)
|
14
|
-
sources.map {|source| source.find_scope_id(scope_id) }.compact.first
|
14
|
+
sources.map { |source| source.find_scope_id(scope_id) }.compact.first
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
@@ -40,7 +40,7 @@ module SwitchUser
|
|
40
40
|
|
41
41
|
class GuestDataSource
|
42
42
|
def all
|
43
|
-
[
|
43
|
+
[GuestRecord.new]
|
44
44
|
end
|
45
45
|
|
46
46
|
def find_scope_id(scope_id)
|
@@ -33,7 +33,7 @@ module SwitchUser
|
|
33
33
|
user_identifier = @controller.session[:original_user_scope_identifier]
|
34
34
|
|
35
35
|
if user_identifier
|
36
|
-
UserLoader.prepare(:
|
36
|
+
UserLoader.prepare(scope_identifier: user_identifier).user
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
@@ -6,7 +6,7 @@ module SwitchUser
|
|
6
6
|
@warden = @controller.warden
|
7
7
|
end
|
8
8
|
|
9
|
-
def login(user, scope =
|
9
|
+
def login(user, scope = nil)
|
10
10
|
if SwitchUser.provider.is_a?(Hash) && SwitchUser.provider[:store_sign_in]
|
11
11
|
@warden.set_user(user, scope: scope)
|
12
12
|
else
|
@@ -14,11 +14,11 @@ module SwitchUser
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
def logout(scope =
|
17
|
+
def logout(scope = nil)
|
18
18
|
@warden.logout(scope)
|
19
19
|
end
|
20
20
|
|
21
|
-
def current_user(scope =
|
21
|
+
def current_user(scope = nil)
|
22
22
|
@warden.user(scope)
|
23
23
|
end
|
24
24
|
end
|
data/lib/switch_user/rspec.rb
CHANGED
@@ -4,9 +4,9 @@ require 'rspec/core'
|
|
4
4
|
|
5
5
|
RSpec.configure do |config|
|
6
6
|
|
7
|
-
config.include SwitchUser::RSpecFeatureHelpers, :
|
7
|
+
config.include SwitchUser::RSpecFeatureHelpers, type: :feature
|
8
8
|
|
9
|
-
config.before(:each, :
|
9
|
+
config.before(:each, type: :feature) do
|
10
10
|
allow_any_instance_of(SwitchUserController).to receive(:available?).and_return(true)
|
11
11
|
end
|
12
12
|
|
data/lib/switch_user/user_set.rb
CHANGED
@@ -9,8 +9,8 @@ module SwitchUser
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def self.users
|
12
|
-
init_from_config.flat_map {|user_set|
|
13
|
-
user_set.users.map {|user| Record.build(user, user_set) }
|
12
|
+
init_from_config.flat_map { |user_set|
|
13
|
+
user_set.users.map { |user| Record.build(user, user_set) }
|
14
14
|
}
|
15
15
|
end
|
16
16
|
|
@@ -24,7 +24,7 @@ module SwitchUser
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def find_user(id)
|
27
|
-
Record.build(users.where(:
|
27
|
+
Record.build(users.where(id: id).first, self)
|
28
28
|
end
|
29
29
|
alias :[] :find_user
|
30
30
|
|
data/lib/switch_user/version.rb
CHANGED
@@ -2,27 +2,27 @@ require 'spec_helper'
|
|
2
2
|
require 'switch_user'
|
3
3
|
require 'switch_user_controller'
|
4
4
|
|
5
|
-
RSpec.describe SwitchUserController, :
|
5
|
+
RSpec.describe SwitchUserController, type: :controller do
|
6
6
|
before do
|
7
7
|
SwitchUser.provider = :dummy
|
8
8
|
end
|
9
9
|
|
10
|
-
let(:admin) { double(:admin,
|
10
|
+
let(:admin) { double(:admin, admin?: true) }
|
11
11
|
let(:provider) { double(:provider,
|
12
|
-
:
|
13
|
-
:
|
12
|
+
original_user: admin,
|
13
|
+
current_user: nil)
|
14
14
|
}
|
15
15
|
describe "#set_current_user" do
|
16
16
|
it "redirects the user to the specified location" do
|
17
|
-
SwitchUser.redirect_path =
|
17
|
+
SwitchUser.redirect_path = ->(_, _) { "/path" }
|
18
18
|
allow(controller).to receive(:available?).and_return(true)
|
19
|
-
get :set_current_user, :scope_identifier
|
19
|
+
get :set_current_user, params: { scope_identifier: "user_1" }
|
20
20
|
|
21
21
|
expect(response).to redirect_to("/path")
|
22
22
|
end
|
23
23
|
|
24
24
|
it "denies access according to the guard block" do
|
25
|
-
SwitchUser.controller_guard =
|
25
|
+
SwitchUser.controller_guard = ->(_, _, _) { false }
|
26
26
|
expect {
|
27
27
|
get :set_current_user
|
28
28
|
}.to raise_error(ActionController::RoutingError)
|
@@ -30,9 +30,7 @@ RSpec.describe SwitchUserController, :type => :controller do
|
|
30
30
|
|
31
31
|
describe "requests with a privileged original_user" do
|
32
32
|
before do
|
33
|
-
SwitchUser.controller_guard =
|
34
|
-
current_user.try(:admin?) || original_user.try(:admin?)
|
35
|
-
}
|
33
|
+
SwitchUser.controller_guard = ->(current_user, _, original_user) { current_user.try(:admin?) || original_user.try(:admin?) }
|
36
34
|
end
|
37
35
|
it "allows access using the original_user param" do
|
38
36
|
allow(controller).to receive(:provider).and_return(provider)
|
@@ -54,18 +52,18 @@ RSpec.describe SwitchUserController, :type => :controller do
|
|
54
52
|
it "can remember the current user" do
|
55
53
|
expect(provider).to receive(:remember_current_user).with(true)
|
56
54
|
|
57
|
-
get :remember_user, :remember
|
55
|
+
get :remember_user, params: { remember: "true" }
|
58
56
|
end
|
59
57
|
it "can forget the current user" do
|
60
58
|
expect(provider).to receive(:remember_current_user).with(false)
|
61
59
|
|
62
|
-
get :remember_user, :remember
|
60
|
+
get :remember_user, params: { remember: "false" }
|
63
61
|
end
|
64
62
|
it "does nothing if switch_back is not enabled" do
|
65
63
|
SwitchUser.switch_back = false
|
66
64
|
expect(provider).not_to receive(:remember_current_user)
|
67
65
|
|
68
|
-
get :remember_user, :remember
|
66
|
+
get :remember_user, params: { remember: "true" }
|
69
67
|
end
|
70
68
|
end
|
71
69
|
end
|
@@ -2,13 +2,13 @@ require 'spec_helper'
|
|
2
2
|
require 'switch_user'
|
3
3
|
require 'switch_user_helper'
|
4
4
|
|
5
|
-
RSpec.describe SwitchUserHelper, :
|
5
|
+
RSpec.describe SwitchUserHelper, type: :helper do
|
6
6
|
before do
|
7
7
|
SwitchUser.provider = :dummy
|
8
8
|
end
|
9
9
|
|
10
|
-
let(:user) { double(:user, :
|
11
|
-
let(:admin) { double(:admin, :
|
10
|
+
let(:user) { double(:user, id: 1) }
|
11
|
+
let(:admin) { double(:admin, id: 1) }
|
12
12
|
let(:provider) {
|
13
13
|
_provider = SwitchUser::Provider::Dummy.new(controller)
|
14
14
|
_provider
|
@@ -16,8 +16,8 @@ RSpec.describe SwitchUserHelper, :type => :helper do
|
|
16
16
|
|
17
17
|
describe "#switch_user_select" do
|
18
18
|
let(:guest_record) { SwitchUser::GuestRecord.new }
|
19
|
-
let(:user_record) { double(:user_record, :
|
20
|
-
let(:admin_record) { double(:admin_record, :
|
19
|
+
let(:user_record) { double(:user_record, user: user, scope: :user, label: 'user1', scope_id: 'user_1') }
|
20
|
+
let(:admin_record) { double(:admin_record, user: admin, scope: :admin, label: 'admin1', scope_id: 'admin_1') }
|
21
21
|
|
22
22
|
let(:guest_option_tags) { %Q^<optgroup label="Guest"><option value="">Guest</option></optgroup>^ }
|
23
23
|
let(:user_option_tags) { %Q^<optgroup label="User"><option value="user_1">user1</option></optgroup>^ }
|
@@ -125,7 +125,7 @@ RSpec.describe SwitchUserHelper, :type => :helper do
|
|
125
125
|
|
126
126
|
describe "#user_tag_value" do
|
127
127
|
it "for user" do
|
128
|
-
user = double(:user, :
|
128
|
+
user = double(:user, id: 1)
|
129
129
|
|
130
130
|
expect(helper.send(:user_tag_value, user, :id, :user)).to eq('user_1')
|
131
131
|
end
|
@@ -134,13 +134,13 @@ RSpec.describe SwitchUserHelper, :type => :helper do
|
|
134
134
|
describe "#user_tag_label" do
|
135
135
|
it "when name has call method" do
|
136
136
|
user = double(:user)
|
137
|
-
name = ->(user){ 'user1' }
|
137
|
+
name = ->(user) { 'user1' }
|
138
138
|
|
139
139
|
expect(helper.send(:user_tag_label, user, name)).to eq('user1')
|
140
140
|
end
|
141
141
|
|
142
142
|
it "when name not has call method" do
|
143
|
-
user = double(:name, :
|
143
|
+
user = double(:name, name: 'user1')
|
144
144
|
name = :name
|
145
145
|
|
146
146
|
expect(helper.send(:user_tag_label, user, name)).to eq('user1')
|
@@ -1,14 +1,14 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
RSpec.describe "Using SwitchUser", :
|
4
|
-
let(:user) { User.create!(:
|
5
|
-
let(:other_user) { User.create!(:
|
3
|
+
RSpec.describe "Using SwitchUser", type: :request do
|
4
|
+
let(:user) { User.create!(email: "foo@bar.com", admin: true) }
|
5
|
+
let(:other_user) { User.create!(email: "other@bar.com", admin: false) }
|
6
6
|
|
7
7
|
before do
|
8
8
|
SwitchUser.reset_config
|
9
9
|
SwitchUser.provider = :session
|
10
|
-
SwitchUser.controller_guard =
|
11
|
-
SwitchUser.redirect_path =
|
10
|
+
SwitchUser.controller_guard = ->(current_user, request) { Rails.env.test? }
|
11
|
+
SwitchUser.redirect_path = ->(_, _) { "/dummy/open" }
|
12
12
|
end
|
13
13
|
|
14
14
|
it "signs a user in using switch_user" do
|
@@ -27,18 +27,16 @@ RSpec.describe "Using SwitchUser", :type => :request do
|
|
27
27
|
context "using switch_back" do
|
28
28
|
before do
|
29
29
|
SwitchUser.switch_back = true
|
30
|
-
SwitchUser.controller_guard =
|
31
|
-
current_user && current_user.admin? || original_user && original_user.admin?
|
32
|
-
}
|
30
|
+
SwitchUser.controller_guard = ->(current_user, request, original_user) { current_user && current_user.admin? || original_user && original_user.admin? }
|
33
31
|
end
|
34
32
|
|
35
|
-
it "can switch back to a different user" do
|
33
|
+
it "can switch back to a different user through remember_user endpoint" do
|
36
34
|
# login
|
37
|
-
post "/login", :id
|
35
|
+
post "/login", params: { id: user.id }
|
38
36
|
follow_redirect!
|
39
37
|
|
40
38
|
# have SwitchUser remember us
|
41
|
-
get "/switch_user/remember_user", :remember
|
39
|
+
get "/switch_user/remember_user", params: { remember: true }
|
42
40
|
expect(session["original_user_scope_identifier"]).to be_present
|
43
41
|
|
44
42
|
# check that we can switch to another user
|
@@ -54,7 +52,30 @@ RSpec.describe "Using SwitchUser", :type => :request do
|
|
54
52
|
expect(session["user_id"]).to eq user.id
|
55
53
|
|
56
54
|
# check that we can be un-remembered
|
57
|
-
get "/switch_user/remember_user", :remember
|
55
|
+
get "/switch_user/remember_user", params: { remember: false }
|
56
|
+
expect(session["original_user"]).to be_nil
|
57
|
+
end
|
58
|
+
|
59
|
+
it "can switch back to a different user without hitting remember_user endpoint" do
|
60
|
+
# login
|
61
|
+
post "/login", params: { :id => user.id }
|
62
|
+
follow_redirect!
|
63
|
+
|
64
|
+
# check that we can switch to another user
|
65
|
+
get "/switch_user?scope_identifier=user_#{other_user.id}", params: { :remember => true }
|
66
|
+
expect(session["user_id"]).to eq other_user.id
|
67
|
+
expect(session["original_user_scope_identifier"]).to_not be_nil
|
68
|
+
|
69
|
+
# logout
|
70
|
+
get "/logout"
|
71
|
+
expect(session["user_id"]).to be_nil
|
72
|
+
|
73
|
+
# check that we can still switch to another user
|
74
|
+
get "/switch_user?scope_identifier=user_#{user.id}"
|
75
|
+
expect(session["user_id"]).to eq user.id
|
76
|
+
|
77
|
+
# check that we can be un-remembered
|
78
|
+
get "/switch_user/remember_user", params: { :remember => false }
|
58
79
|
expect(session["original_user"]).to be_nil
|
59
80
|
end
|
60
81
|
end
|
@@ -65,13 +65,13 @@ RSpec.describe SwitchUser::Provider::Devise do
|
|
65
65
|
|
66
66
|
describe "#login_exclusive" do
|
67
67
|
before do
|
68
|
-
allow(SwitchUser).to receive(:available_users).and_return({:
|
68
|
+
allow(SwitchUser).to receive(:available_users).and_return({ user: nil, admin: nil })
|
69
69
|
provider.login(user, :admin)
|
70
|
-
provider.login_exclusive(user, :
|
70
|
+
provider.login_exclusive(user, scope: "user")
|
71
71
|
end
|
72
72
|
|
73
73
|
it "logs the user in" do
|
74
|
-
expect(provider.current_user).to eq user
|
74
|
+
expect(provider.current_user(:user)).to eq user
|
75
75
|
end
|
76
76
|
|
77
77
|
it "logs out other scopes" do
|
@@ -81,7 +81,7 @@ RSpec.describe SwitchUser::Provider::Devise do
|
|
81
81
|
|
82
82
|
describe "#logout_all" do
|
83
83
|
it "logs out users under all scopes" do
|
84
|
-
allow(SwitchUser).to receive(:available_users).and_return({:
|
84
|
+
allow(SwitchUser).to receive(:available_users).and_return({ user: nil, admin: nil })
|
85
85
|
provider.login(user, :admin)
|
86
86
|
provider.login(user, :user)
|
87
87
|
|
@@ -94,7 +94,7 @@ RSpec.describe SwitchUser::Provider::Devise do
|
|
94
94
|
|
95
95
|
describe "#all_current_users" do
|
96
96
|
it "pulls users from an alternate scope" do
|
97
|
-
allow(SwitchUser).to receive(:available_users).and_return({:
|
97
|
+
allow(SwitchUser).to receive(:available_users).and_return({ user: nil, admin: nil })
|
98
98
|
provider.login(user, :admin)
|
99
99
|
|
100
100
|
expect(provider.current_users_without_scope).to eq [user]
|
@@ -6,32 +6,32 @@ Capybara.app = MyApp::Application
|
|
6
6
|
|
7
7
|
require 'switch_user/rspec'
|
8
8
|
|
9
|
-
RSpec.feature "SwitchUser::RSpecFeatureHelpers", :
|
9
|
+
RSpec.feature "SwitchUser::RSpecFeatureHelpers", type: :feature do
|
10
10
|
background do
|
11
|
-
@user = User.create!(:
|
12
|
-
@client = Client.create!(:
|
11
|
+
@user = User.create!(email: "foo@bar.com", admin: true)
|
12
|
+
@client = Client.create!(email: "foo@bar.com")
|
13
13
|
end
|
14
14
|
|
15
|
-
before(:
|
16
|
-
allow(SwitchUser).to receive(:controller_guard).and_return(
|
15
|
+
before(:example) do
|
16
|
+
allow(SwitchUser).to receive(:controller_guard).and_return(->(current_user, request) { true })
|
17
17
|
|
18
|
-
allow(SwitchUser).to receive(:available_users).and_return({:
|
18
|
+
allow(SwitchUser).to receive(:available_users).and_return({ user: -> { User.all } })
|
19
19
|
|
20
|
-
allow(SwitchUser).to receive(:available_users_identifiers).and_return({:
|
20
|
+
allow(SwitchUser).to receive(:available_users_identifiers).and_return({ user: :id })
|
21
21
|
|
22
|
-
allow(SwitchUser).to receive(:available_users_names).and_return({:
|
22
|
+
allow(SwitchUser).to receive(:available_users_names).and_return({ user: :email })
|
23
23
|
end
|
24
24
|
|
25
25
|
scenario "when controller_guard return false" do
|
26
|
-
allow(SwitchUser).to receive(:controller_guard).and_return(
|
26
|
+
allow(SwitchUser).to receive(:controller_guard).and_return(->(current_user, request) { false })
|
27
27
|
|
28
28
|
expect do
|
29
29
|
switch_user @user
|
30
|
-
end.
|
30
|
+
end.not_to raise_error
|
31
31
|
end
|
32
32
|
|
33
33
|
scenario "when controller_guard return false and controller call original available?" do
|
34
|
-
allow(SwitchUser).to receive(:controller_guard).and_return(
|
34
|
+
allow(SwitchUser).to receive(:controller_guard).and_return(->(current_user, request) { false })
|
35
35
|
|
36
36
|
allow_any_instance_of(SwitchUserController).to receive(:available?).and_call_original
|
37
37
|
|
@@ -43,20 +43,20 @@ RSpec.feature "SwitchUser::RSpecFeatureHelpers", :type => :feature do
|
|
43
43
|
scenario "arg is @user, available_users is default, and available_users_identifiers is default" do
|
44
44
|
expect do
|
45
45
|
switch_user @user
|
46
|
-
end.
|
46
|
+
end.not_to raise_error
|
47
47
|
end
|
48
48
|
|
49
49
|
scenario "arg is @user, available_users is default, and available_users_identifiers is {user: id}" do
|
50
|
-
allow(SwitchUser).to receive(:available_users_identifiers).and_return({user: :id})
|
50
|
+
allow(SwitchUser).to receive(:available_users_identifiers).and_return({ user: :id })
|
51
51
|
|
52
52
|
expect do
|
53
53
|
switch_user @user
|
54
|
-
end.
|
54
|
+
end.not_to raise_error
|
55
55
|
end
|
56
56
|
|
57
57
|
scenario "arg is @user, available_users is default, and available_users_identifiers is {:client => :id}" do
|
58
|
-
allow(SwitchUser).to receive(:available_users_identifiers).and_return({:
|
59
|
-
allow(SwitchUser).to receive(:available_users_names).and_return({:
|
58
|
+
allow(SwitchUser).to receive(:available_users_identifiers).and_return({ client: :id })
|
59
|
+
allow(SwitchUser).to receive(:available_users_names).and_return({ client: :email })
|
60
60
|
|
61
61
|
expect do
|
62
62
|
switch_user @user
|
@@ -70,7 +70,7 @@ RSpec.feature "SwitchUser::RSpecFeatureHelpers", :type => :feature do
|
|
70
70
|
end
|
71
71
|
|
72
72
|
scenario "arg is @client, available_users is {:user => lambda { User.all }, :client => lambda {Client.all}}, and available_users_identifiers is default" do
|
73
|
-
allow(SwitchUser).to receive(:available_users).and_return({:
|
73
|
+
allow(SwitchUser).to receive(:available_users).and_return({ user: -> { User.all }, client: -> { Client.all } })
|
74
74
|
|
75
75
|
expect do
|
76
76
|
switch_user @client
|
@@ -78,20 +78,20 @@ RSpec.feature "SwitchUser::RSpecFeatureHelpers", :type => :feature do
|
|
78
78
|
end
|
79
79
|
|
80
80
|
scenario "arg is @client, available_users is {:user => lambda { User.all }, :client => lambda {Client.all}}, and available_users_identifiers is {:user => id, :client => id}" do
|
81
|
-
allow(SwitchUser).to receive(:available_users).and_return({:
|
81
|
+
allow(SwitchUser).to receive(:available_users).and_return({ user: -> { User.all }, client: -> { Client.all } })
|
82
82
|
|
83
|
-
allow(SwitchUser).to receive(:available_users_identifiers).and_return({:
|
84
|
-
allow(SwitchUser).to receive(:available_users_names).and_return({:
|
83
|
+
allow(SwitchUser).to receive(:available_users_identifiers).and_return({ user: :id, client: :id })
|
84
|
+
allow(SwitchUser).to receive(:available_users_names).and_return({ user: :email, client: :email })
|
85
85
|
|
86
86
|
expect do
|
87
87
|
switch_user @client
|
88
|
-
end.
|
88
|
+
end.not_to raise_error
|
89
89
|
end
|
90
90
|
|
91
91
|
scenario "args is :user and @user.id, available_users is default, and available_users_identifiers is default" do
|
92
92
|
expect do
|
93
93
|
switch_user :user, @user.id
|
94
|
-
end.
|
94
|
+
end.not_to raise_error
|
95
95
|
end
|
96
96
|
|
97
97
|
scenario "arg is :client and @client.id, available_users is default, and available_users_identifiers is default" do
|
@@ -121,7 +121,7 @@ RSpec.feature "SwitchUser::RSpecFeatureHelpers", :type => :feature do
|
|
121
121
|
scenario "args is :user and 0, available_users is default, and available_users_identifiers is default" do
|
122
122
|
expect do
|
123
123
|
switch_user :user, 0
|
124
|
-
end.
|
124
|
+
end.not_to raise_error
|
125
125
|
end
|
126
126
|
|
127
127
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -7,7 +7,7 @@ require 'pry'
|
|
7
7
|
require 'awesome_print'
|
8
8
|
|
9
9
|
RSpec.configure do |config|
|
10
|
-
config.filter_run :
|
10
|
+
config.filter_run focus: true
|
11
11
|
config.run_all_when_everything_filtered = true
|
12
12
|
config.use_transactional_fixtures = true
|
13
13
|
config.expose_dsl_globally = false
|
data/spec/support/application.rb
CHANGED
@@ -27,18 +27,30 @@ class ApplicationController < ActionController::Base
|
|
27
27
|
end
|
28
28
|
|
29
29
|
class DummyController < ApplicationController
|
30
|
-
|
30
|
+
before_action :require_user, only: :protected
|
31
31
|
|
32
32
|
def authenticated
|
33
|
-
|
33
|
+
if Rails.version.to_i >= 5
|
34
|
+
render plain: current_user.inspect
|
35
|
+
else
|
36
|
+
render text: current_user.inspect
|
37
|
+
end
|
34
38
|
end
|
35
39
|
|
36
40
|
def open
|
37
|
-
|
41
|
+
if Rails.version.to_i >= 5
|
42
|
+
render plain: view_context.switch_user_select
|
43
|
+
else
|
44
|
+
render text: view_context.switch_user_select
|
45
|
+
end
|
38
46
|
end
|
39
47
|
|
40
48
|
def protected
|
41
|
-
|
49
|
+
if Rails.version.to_i >= 5
|
50
|
+
render plain: view_context.switch_user_select
|
51
|
+
else
|
52
|
+
render text: view_context.switch_user_select
|
53
|
+
end
|
42
54
|
end
|
43
55
|
end
|
44
56
|
|
@@ -55,13 +67,13 @@ module MyApp
|
|
55
67
|
end
|
56
68
|
Rails.application.initialize!
|
57
69
|
Rails.application.routes.draw do
|
58
|
-
get 'dummy/protected', :
|
59
|
-
get 'dummy/open', :
|
60
|
-
post 'login', :
|
61
|
-
get 'logout', :
|
62
|
-
get 'authenticated', :
|
63
|
-
get :switch_user, :
|
64
|
-
get 'switch_user/remember_user', :
|
70
|
+
get 'dummy/protected', to: "dummy#protected"
|
71
|
+
get 'dummy/open', to: "dummy#open"
|
72
|
+
post 'login', to: "dummy#login"
|
73
|
+
get 'logout', to: "dummy#logout"
|
74
|
+
get 'authenticated', to: "dummy#authenticated"
|
75
|
+
get :switch_user, to: 'switch_user#set_current_user'
|
76
|
+
get 'switch_user/remember_user', to: 'switch_user#remember_user'
|
65
77
|
end
|
66
78
|
|
67
79
|
connection = ActiveRecord::Base.connection
|
data/spec/support/provider.rb
CHANGED
@@ -25,7 +25,7 @@ RSpec.shared_examples_for "a provider" do
|
|
25
25
|
end
|
26
26
|
|
27
27
|
it "knows if there are any users logged in" do
|
28
|
-
provider.login(user)
|
28
|
+
provider.login(user, :user)
|
29
29
|
|
30
30
|
expect(provider.current_users_without_scope).to eq [user]
|
31
31
|
end
|
@@ -36,7 +36,7 @@ RSpec.shared_examples_for "a provider" do
|
|
36
36
|
provider.login_exclusive(other_user, scope: "user")
|
37
37
|
|
38
38
|
expect(provider.original_user).to eq user
|
39
|
-
expect(provider.current_user).to eq other_user
|
39
|
+
expect(provider.current_user(:user)).to eq other_user
|
40
40
|
end
|
41
41
|
|
42
42
|
it "can forget the original_user" do
|
@@ -5,7 +5,7 @@ module SwitchUser
|
|
5
5
|
describe '#all' do
|
6
6
|
it 'aggregates multiple data_sources' do
|
7
7
|
user = double(:user)
|
8
|
-
s1 = double(:s1, :
|
8
|
+
s1 = double(:s1, all: [user])
|
9
9
|
source = DataSources.new([s1, s1])
|
10
10
|
|
11
11
|
expect(source.all).to eq [user, user]
|
@@ -15,8 +15,8 @@ module SwitchUser
|
|
15
15
|
describe '#find_scope_id' do
|
16
16
|
it 'can find a corresponding record across data sources' do
|
17
17
|
user = double(:user)
|
18
|
-
s1 = double(:s1, :
|
19
|
-
s2 = double(:s2, :
|
18
|
+
s1 = double(:s1, find_scope_id: nil)
|
19
|
+
s2 = double(:s2, find_scope_id: user)
|
20
20
|
source = DataSources.new([s1, s2])
|
21
21
|
|
22
22
|
expect(source.find_scope_id("user_10")).to eq user
|
@@ -25,7 +25,7 @@ module SwitchUser
|
|
25
25
|
end
|
26
26
|
|
27
27
|
RSpec.describe DataSource do
|
28
|
-
|
28
|
+
skip # it's tested in integration test, need to find a good way to test it here.
|
29
29
|
end
|
30
30
|
|
31
31
|
RSpec.describe GuestDataSource do
|
@@ -8,10 +8,10 @@ module SwitchUser
|
|
8
8
|
provider = double.as_null_object
|
9
9
|
guard = SwitchUser::LambdaGuard.new(controller, provider)
|
10
10
|
|
11
|
-
SwitchUser.controller_guard =
|
11
|
+
SwitchUser.controller_guard = ->(a) { a }
|
12
12
|
expect(guard).to be_controller_available
|
13
13
|
|
14
|
-
SwitchUser.controller_guard =
|
14
|
+
SwitchUser.controller_guard = ->(a) { !a }
|
15
15
|
expect(guard).not_to be_controller_available
|
16
16
|
end
|
17
17
|
end
|
@@ -11,16 +11,16 @@ RSpec.describe SwitchUser::UserLoader do
|
|
11
11
|
|
12
12
|
describe ".user" do
|
13
13
|
before do
|
14
|
-
SwitchUser.available_users_identifiers = {:
|
15
|
-
allow(User).to receive(:where).with(:
|
14
|
+
SwitchUser.available_users_identifiers = { user: :id }
|
15
|
+
allow(User).to receive(:where).with(id: "1").and_return(user_result)
|
16
16
|
end
|
17
17
|
it "can be loaded from a scope and identifier" do
|
18
|
-
loaded_user = SwitchUser::UserLoader.prepare("user","1").user
|
18
|
+
loaded_user = SwitchUser::UserLoader.prepare("user", "1").user
|
19
19
|
|
20
20
|
expect(loaded_user).to eq user
|
21
21
|
end
|
22
22
|
it "can be loaded by a passing an unprocessed scope identifier" do
|
23
|
-
loaded_user = SwitchUser::UserLoader.prepare(:
|
23
|
+
loaded_user = SwitchUser::UserLoader.prepare(scope_identifier: "user_1").user
|
24
24
|
|
25
25
|
expect(loaded_user).to eq user
|
26
26
|
end
|
@@ -32,7 +32,7 @@ RSpec.describe SwitchUser::UserLoader do
|
|
32
32
|
end
|
33
33
|
|
34
34
|
it "returns a user" do
|
35
|
-
allow(User).to receive(:where).with(:
|
35
|
+
allow(User).to receive(:where).with(id: 1).and_return(user_result)
|
36
36
|
|
37
37
|
loader = SwitchUser::UserLoader.new("user", 1)
|
38
38
|
|
@@ -47,8 +47,8 @@ RSpec.describe SwitchUser::UserLoader do
|
|
47
47
|
end
|
48
48
|
|
49
49
|
it "loads a user with an alternate identifier column" do
|
50
|
-
allow(User).to receive(:where).with(:
|
51
|
-
SwitchUser.available_users_identifiers = {:
|
50
|
+
allow(User).to receive(:where).with(email: 2).and_return(user_result)
|
51
|
+
SwitchUser.available_users_identifiers = { user: :email }
|
52
52
|
|
53
53
|
loader = SwitchUser::UserLoader.new("user", 2)
|
54
54
|
expect(loader.user).to eq user
|
@@ -3,8 +3,8 @@ require 'switch_user/user_set'
|
|
3
3
|
|
4
4
|
module SwitchUser
|
5
5
|
RSpec.describe UserSet do
|
6
|
-
let!(:user) { User.create(:
|
7
|
-
let(:set) { UserSet.new(:user, :id, :email,
|
6
|
+
let!(:user) { User.create(email: "test@example.com") }
|
7
|
+
let(:set) { UserSet.new(:user, :id, :email, -> { User.all }) }
|
8
8
|
after { User.delete_all }
|
9
9
|
it "returns an object that knows it's scope, id and label" do
|
10
10
|
found_user = set[user.id]
|
@@ -17,14 +17,14 @@ module SwitchUser
|
|
17
17
|
expect(set.users).to eq [user]
|
18
18
|
end
|
19
19
|
it "chains the where on to the provided scope" do
|
20
|
-
set = UserSet.new(:user, :id, :email,
|
20
|
+
set = UserSet.new(:user, :id, :email, -> { User.all })
|
21
21
|
expect(set.find_user(user.id).label).to eq user.email
|
22
22
|
end
|
23
23
|
end
|
24
24
|
RSpec.describe UserSet::Record do
|
25
25
|
it "correctly configures the record using the set" do
|
26
|
-
user = double(:user, :
|
27
|
-
set = double(:set, :
|
26
|
+
user = double(:user, id: 100, email: "test@example.com")
|
27
|
+
set = double(:set, identifier: :id, label: :email, scope: :user)
|
28
28
|
record = UserSet::Record.build(user, set)
|
29
29
|
expect(record.id).to eq 100
|
30
30
|
expect(record.label).to eq "test@example.com"
|
data/switch_user.gemspec
CHANGED
@@ -28,6 +28,6 @@ Gem::Specification.new do |s|
|
|
28
28
|
s.add_development_dependency "capybara"
|
29
29
|
|
30
30
|
s.files = `git ls-files`.split("\n")
|
31
|
-
s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
|
31
|
+
s.executables = `git ls-files`.split("\n").map { |f| f =~ /^bin\/(.*)/ ? $1 : nil }.compact
|
32
32
|
s.require_path = 'lib'
|
33
33
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: switch_user
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Huang
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2017-10-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -261,7 +261,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
261
261
|
version: 1.3.6
|
262
262
|
requirements: []
|
263
263
|
rubyforge_project: switch_user
|
264
|
-
rubygems_version: 2.
|
264
|
+
rubygems_version: 2.6.13
|
265
265
|
signing_key:
|
266
266
|
specification_version: 4
|
267
267
|
summary: Easily switch current user to speed up development
|