switch_user 0.9.5 → 1.0.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 924cc5fa100afa7570a5123a211b67c238c7d502
4
- data.tar.gz: 499e47bb57936f4ba85346dd715de82f7992754e
3
+ metadata.gz: ea596325fc5e142d307dd24c245ec8e80528fddc
4
+ data.tar.gz: 32f79b7b8d3d67b364c3973d01efc8a0c308ed06
5
5
  SHA512:
6
- metadata.gz: 9f64a50974a3e93a2d880b1d09e3b122d0bfcbbf76be3f9cd0211a95e827c5e1a6e1924d9354c5106688211bd4c52a25b45856e32efed9ceba5df83fdbf2b545
7
- data.tar.gz: 8afe11f071e813f079299dddbc235409ab0284811f33c55429022ad3e35bfc5826a85d70938a3b7f62eb3211c9319a46803736403d81748cb61b8a926795eca2
6
+ metadata.gz: f85b9832f7b1efd694ce7be400f3668089db86b7f8f0b8ff7cdcfa59e116824bd84e91ad8feecebb51d3f554c9fbd30bcfbc03ef8a567422a234927751508bbb
7
+ data.tar.gz: f2ccfc25f69f7f6671c936515a6c4990fd1ef64a6058486234deae968c97dc904abcd905dde65f6e7baedda922817845f06f5eb0926a1b860a02b396b6be2dc6
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2
4
+ env:
5
+ - DB=sqlite
6
+ script: bundle exec rspec spec
@@ -0,0 +1,126 @@
1
+ # Next Release
2
+
3
+ ## 4.14.8
4
+
5
+ * compatible with `composite_primary_keys` gem
6
+
7
+ ## 4.14.7
8
+
9
+ * Fix AR 4.2 SingularAssociation#reader result can be nil
10
+ * `perform_out_of_channel_notifications` should always be triggered
11
+
12
+ ## 4.14.6
13
+
14
+ * Fix false positive with `belongs_to` -> `belongs_to` for active\_record 4.2
15
+ * Activate active\_record hacks only when Bullet already start
16
+
17
+ ## 4.14.5
18
+
19
+ * Don't execute query when running `to_sql`
20
+ * Send backtrace to `uniform_notifier`
21
+ * Fix sse response check
22
+ * Dynamically delegate available notifiers to UniformNotifier
23
+
24
+ ## 4.14.4
25
+
26
+ * Fix false N + 1 warnings on Rails 4.2
27
+
28
+ ## 4.14.3
29
+
30
+ * Fix false positive on create
31
+
32
+ ## 4.14.2
33
+
34
+ * Hotfix nil object when `add_impossible_object`
35
+
36
+ ## 4.14.1
37
+
38
+ * Fix `has_one` then `has_many` associations in rails 4.2
39
+ * Append js and dom to html body in proper position
40
+
41
+ ## 4.14.0 (10/03/2014)
42
+
43
+ * Support rails 4.2
44
+ * Polish notification output
45
+ * Fix warning: `*' interpreted as argument prefix
46
+
47
+ ## 4.13.0 (07/19/2014)
48
+
49
+ * Support include? call on ar associations
50
+
51
+ ## 4.12.0 (07/13/2014)
52
+
53
+ * Fix false n+1 queries caused by inversed objects.
54
+ * Replace .id with .primary_key_value
55
+ * Rename bullet_ar_key to bullet_key
56
+ * Fix rails sse detect
57
+ * Fix bullet using in test environment
58
+ * Memoize whoami
59
+
60
+ ## 4.11.0 (06/24/2014)
61
+
62
+ * Support empty? call on ar associations
63
+ * Skip detecting if object is a new record
64
+
65
+ ## 4.10.0 (06/06/2014)
66
+
67
+ * Handle join query smarter
68
+ * Support mongoid 4.0
69
+ * Thread safe
70
+ * Add debug mode
71
+
72
+ ## 4.9.0 (04/30/2014)
73
+
74
+ * Add Bullet.stacktrace_includes option
75
+ * Applied keyword argument fixes on Ruby 2.2.0
76
+ * Add bugsnag notifier
77
+ * Support rails 4.1.0
78
+
79
+ ## 4.8.0 (02/16/2014)
80
+
81
+ * Support rails 4.1.0.beta1
82
+ * Update specs to be RSpec 3.0 compatible
83
+ * Update latest minor version activerecord and mongoid on travis
84
+
85
+ ## 4.7.0 (11/03/2013)
86
+
87
+ * Add coverall support
88
+ * Add helper to profile code outside a request
89
+ * Add activesupport dependency
90
+ * Add Bullet.raise notification
91
+ * Add Bullet.add_footer notification
92
+ * Fix activerecord4 warnings in test code
93
+
94
+ ## 4.6.0 (04/18/2013)
95
+
96
+ * Fix Bullet::Rack to support sinatra
97
+
98
+ ## 4.5.0 (03/24/2013)
99
+
100
+ * Add api way to access captured associatioin
101
+ * Allow disable n_plus_one_query, unused_eager_loading and counter_cache respectively
102
+ * Add whitelist
103
+
104
+ ## 4.4.0 (03/15/2013)
105
+
106
+ * Remove disable_browser_cache option
107
+ * Compatible with Rails 4.0.0.beta1
108
+
109
+ ## 4.3.0 (12/28/2012)
110
+
111
+ * Fix content-length for non ascii html
112
+ * Add mongoid 2.5.x support
113
+
114
+ ## 4.2.0 (09/29/2012)
115
+
116
+ * Add Bullet::Dependency to check AR and mongoid version
117
+ * Add Rails 4 support
118
+ * Add airbrake notifier support
119
+
120
+ ## 4.1.0 (05/30/2012)
121
+
122
+ * Add mongoid 3 support
123
+
124
+ ## 4.0.0 (05/09/2012)
125
+
126
+ * Add mongoid support
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # switch_user
2
2
 
3
+ [![Build Status](https://secure.travis-ci.org/flyerhzm/switch_user.png)](http://travis-ci.org/flyerhzm/switch_user)
4
+
3
5
  Inspired from [hobo][0], switch_user provides a convenient way to switch current user without needing to log out and log in manually.
4
6
 
5
7
  ## Use Case
@@ -45,9 +47,9 @@ If there are too many users (on production), the switch_user_select is not a goo
45
47
  If you have a wildcard route in your project, add a route before the wildcard route.
46
48
  ```ruby
47
49
  # config/routes.rb
48
- match 'switch_user' => 'switch_user#set_current_user'
49
- # wildcard route that will match anything
50
- match ':id' => 'pages#show'
50
+ get 'switch_user' => 'switch_user#set_current_user'
51
+ # wildcard route that will get
52
+ get ':id' => 'pages#show'
51
53
  ```
52
54
  ## Configuration
53
55
 
@@ -138,7 +140,7 @@ This example would allow an admin user to user switch_user, but would only let y
138
140
  ### How it works
139
141
 
140
142
  Click the checkbox next to switch_user_select menu to remember that user for this session. Once this
141
- has been checked, that user is passed in as the 3rd option to the view and controller guards.
143
+ has been checked, that user is passed in as the 3rd option to the view and controller guards.
142
144
  This allows you to check against current_user as well as that original_user to see if the
143
145
  switch_user action should be allowed.
144
146
 
@@ -146,8 +148,14 @@ switch_user action should be allowed.
146
148
 
147
149
  This feature should be used with extreme caution because of the security implications. This is especially true in a production environment.
148
150
 
151
+ ## Contributing
152
+
153
+ #### Run tests
154
+
155
+ `bundle exec rspec spec`
156
+
149
157
  ## Credit
150
158
 
151
- Copyright © 2010 - 2012 Richard Huang (flyerhzm@gmail.com), released under the MIT license
159
+ Copyright © 2010 - 2015 Richard Huang (flyerhzm@gmail.com), released under the MIT license
152
160
 
153
- [0]: https://github.com/tablatom/hobo
161
+ [0]: https://github.com/tablatom/hobo
@@ -19,7 +19,7 @@ class SwitchUserController < ApplicationController
19
19
  private
20
20
 
21
21
  def developer_modes_only
22
- render :text => "Permission Denied", :status => 403 unless available?
22
+ raise ActionController::RoutingError.new('Do not try to hack us.') unless available?
23
23
  end
24
24
 
25
25
  def available?
@@ -38,7 +38,7 @@ module SwitchUser
38
38
  end
39
39
 
40
40
  def self.all_users
41
- data_sources.users
41
+ data_sources.all
42
42
  end
43
43
 
44
44
  def self.data_sources
@@ -47,7 +47,7 @@ module SwitchUser
47
47
  name = available_users_names.fetch(scope)
48
48
  DataSource.new(loader, scope, identifier, name)
49
49
  end
50
- sources.unshift(GuestDataSource.new("Guest")) if helper_with_guest
50
+ sources.unshift(GuestDataSource.new) if helper_with_guest
51
51
  DataSources.new(sources)
52
52
  end
53
53
 
@@ -1,50 +1,55 @@
1
1
  module SwitchUser
2
- DataSource = Struct.new(:loader, :scope, :identifier, :name) do
3
- def users
4
- loader.call.map {|u| Record.new(u, self) }
5
- end
6
- end
2
+ class DataSources
3
+ attr_reader :sources
7
4
 
8
- GuestRecord = Struct.new(:scope) do
9
- def equivalent?(other_scope_id)
10
- scope_id == other_scope_id
5
+ def initialize(sources)
6
+ @sources = sources
11
7
  end
12
8
 
13
- def label
14
- "Guest"
9
+ def all
10
+ sources.flat_map { |source| source.all }
15
11
  end
16
12
 
17
- def scope_id
13
+ def find_scope_id(scope_id)
14
+ sources.map {|source| source.find_scope_id(scope_id) }.compact.first
18
15
  end
19
16
  end
20
17
 
21
- class GuestDataSource
22
- def initialize(name)
18
+ class DataSource
19
+ attr_reader :loader, :scope, :identifier, :name
20
+
21
+ def initialize(loader, scope, identifier, name)
22
+ @loader = loader
23
+ @scope = scope
24
+ @identifier = identifier
23
25
  @name = name
24
26
  end
25
27
 
26
- def users
27
- [ GuestRecord.new(self) ]
28
+ def all
29
+ loader.call.select(identifier, name).map { |user| Record.new(user, self) }
30
+ end
31
+
32
+ def find_scope_id(scope_id)
33
+ user = loader.call.find_by identifier => scope_id.delete("#{scope}_")
34
+ Record.new(user, self)
28
35
  end
29
36
  end
30
37
 
31
- DataSources = Struct.new(:sources) do
38
+ class GuestDataSource
32
39
  def users
33
- sources.flat_map {|source| source.users }
40
+ [ GuestRecord.new ]
34
41
  end
35
42
 
36
43
  def find_scope_id(scope_id)
37
- users.flat_map.detect {|u| u.scope_id == scope_id }
38
44
  end
39
45
  end
40
46
 
41
- Record = Struct.new(:user, :source) do
42
- def equivalent?(other_scope_id)
43
- scope_id == other_scope_id
44
- end
47
+ class Record
48
+ attr_reader :user, :source
45
49
 
46
- def scope_id
47
- "#{source.scope}_#{user.send(source.identifier)}"
50
+ def initialize(user, source)
51
+ @user = user
52
+ @source = source
48
53
  end
49
54
 
50
55
  def label
@@ -54,5 +59,18 @@ module SwitchUser
54
59
  def scope
55
60
  source.scope
56
61
  end
62
+
63
+ def scope_id
64
+ "#{source.scope}_#{user.send(source.identifier)}"
65
+ end
66
+ end
67
+
68
+ class GuestRecord
69
+ def label
70
+ "Guest"
71
+ end
72
+
73
+ def scope_id
74
+ end
57
75
  end
58
76
  end
@@ -7,7 +7,7 @@ module SwitchUser
7
7
  end
8
8
 
9
9
  def login(user, scope = :user)
10
- @warden.set_user(user, :scope => scope)
10
+ @warden.session_serializer.store(user, scope)
11
11
  end
12
12
 
13
13
  def logout(scope = :user)
@@ -10,7 +10,23 @@ module SwitchUser
10
10
  end
11
11
 
12
12
  def logout(scope = nil)
13
+ if SwitchUser.switch_back
14
+ save_original_user_identifier
15
+ end
16
+
13
17
  @controller.logout
18
+
19
+ restore_original_user_identifier
20
+ end
21
+
22
+ def save_original_user_identifier
23
+ @original_user_scope_identifier = @controller.session[:original_user_scope_identifier]
24
+ end
25
+
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
14
30
  end
15
31
 
16
32
  def current_user(scope = nil)
@@ -48,10 +48,10 @@ module SwitchUser
48
48
  if scoped.respond_to?(:scoped)
49
49
  scoped
50
50
  else
51
- user_class.scoped
51
+ user_class.respond_to?(:scoped) ? user_class.scoped : user_class.all
52
52
  end
53
53
  else
54
- user_class.scoped
54
+ user_class.respond_to?(:scoped) ? user_class.scoped : user_class.all
55
55
  end
56
56
  end
57
57
  class Record < Struct.new(:id, :label, :scope)
@@ -1,3 +1,3 @@
1
1
  module SwitchUser
2
- VERSION = "0.9.5"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -2,30 +2,30 @@ require 'spec_helper'
2
2
  require 'switch_user'
3
3
  require 'switch_user_controller'
4
4
 
5
- describe SwitchUserController, :type => :controller do
5
+ RSpec.describe SwitchUserController, :type => :controller do
6
6
  before do
7
7
  SwitchUser.provider = :dummy
8
8
  end
9
9
 
10
- let(:admin) { stub(:admin, :admin? => true) }
11
- let(:provider) { stub(:provider,
10
+ let(:admin) { double(:admin, :admin? => true) }
11
+ let(:provider) { double(:provider,
12
12
  :original_user => admin,
13
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
17
  SwitchUser.redirect_path = lambda {|_,_| "/path"}
18
- controller.stub(:available? => true)
18
+ allow(controller).to receive(:available?).and_return(true)
19
19
  get :set_current_user, :scope_identifier => "user_1"
20
20
 
21
- response.should redirect_to("/path")
21
+ expect(response).to redirect_to("/path")
22
22
  end
23
23
 
24
24
  it "denies access according to the guard block" do
25
25
  SwitchUser.controller_guard = lambda {|_,_,_| false }
26
- get :set_current_user
27
-
28
- response.should be_forbidden
26
+ expect {
27
+ get :set_current_user
28
+ }.to raise_error(ActionController::RoutingError)
29
29
  end
30
30
 
31
31
  describe "requests with a privileged original_user" do
@@ -35,35 +35,35 @@ describe SwitchUserController, :type => :controller do
35
35
  }
36
36
  end
37
37
  it "allows access using the original_user param" do
38
- controller.stub(:provider => provider)
38
+ allow(controller).to receive(:provider).and_return(provider)
39
39
 
40
- provider.should_receive(:logout_all)
40
+ expect(provider).to receive(:logout_all)
41
41
 
42
42
  get :set_current_user
43
43
 
44
- response.should be_redirect
44
+ expect(response).to be_redirect
45
45
  end
46
46
  end
47
47
  end
48
48
 
49
49
  describe "#remember_user" do
50
50
  before do
51
- controller.stub(:provider => provider)
51
+ allow(controller).to receive(:provider).and_return(provider)
52
52
  SwitchUser.switch_back = true
53
53
  end
54
54
  it "can remember the current user" do
55
- provider.should_receive(:remember_current_user).with(true)
55
+ expect(provider).to receive(:remember_current_user).with(true)
56
56
 
57
57
  get :remember_user, :remember => "true"
58
58
  end
59
59
  it "can forget the current user" do
60
- provider.should_receive(:remember_current_user).with(false)
60
+ expect(provider).to receive(:remember_current_user).with(false)
61
61
 
62
62
  get :remember_user, :remember => "false"
63
63
  end
64
64
  it "does nothing if switch_back is not enabled" do
65
65
  SwitchUser.switch_back = false
66
- provider.should_not_receive(:remember_current_user)
66
+ expect(provider).not_to receive(:remember_current_user)
67
67
 
68
68
  get :remember_user, :remember => "true"
69
69
  end
@@ -1,26 +1,29 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe "Using SwitchUser", :type => :request do
3
+ RSpec.describe "Using SwitchUser", :type => :request do
4
4
  let(:user) { User.create!(:email => "foo@bar.com", :admin => true) }
5
5
  let(:other_user) { User.create!(:email => "other@bar.com", :admin => false) }
6
+
6
7
  before do
7
8
  SwitchUser.reset_config
8
9
  SwitchUser.provider = :session
9
10
  SwitchUser.controller_guard = lambda { |current_user, request| Rails.env.test? }
10
11
  SwitchUser.redirect_path = lambda {|_,_| "/dummys/open"}
11
12
  end
13
+
12
14
  it "signs a user in using switch_user" do
13
15
  # can't access protected url
14
16
  get "/dummy/protected"
15
- response.should be_redirect
17
+ expect(response).to be_redirect
16
18
 
17
19
  get "/switch_user?scope_identifier=user_#{other_user.id}"
18
- response.should be_redirect
20
+ expect(response).to be_redirect
19
21
 
20
22
  # now that we are logged in via switch_user we can access
21
23
  get "/dummy/protected"
22
- response.should be_success
24
+ expect(response).to be_success
23
25
  end
26
+
24
27
  context "using switch_back" do
25
28
  before do
26
29
  SwitchUser.switch_back = true
@@ -28,6 +31,7 @@ describe "Using SwitchUser", :type => :request do
28
31
  current_user && current_user.admin? || original_user && original_user.admin?
29
32
  }
30
33
  end
34
+
31
35
  it "can switch back to a different user" do
32
36
  # login
33
37
  post "/login", :id => user.id
@@ -35,23 +39,23 @@ describe "Using SwitchUser", :type => :request do
35
39
 
36
40
  # have SwitchUser remember us
37
41
  get "/switch_user/remember_user", :remember => true
38
- session["original_user_scope_identifier"].should be_present
42
+ expect(session["original_user_scope_identifier"]).to be_present
39
43
 
40
44
  # check that we can switch to another user
41
45
  get "/switch_user?scope_identifier=user_#{other_user.id}"
42
- session["user_id"].should == other_user.id
46
+ expect(session["user_id"]).to eq other_user.id
43
47
 
44
48
  # logout
45
49
  get "/logout"
46
- session["user_id"].should be_nil
50
+ expect(session["user_id"]).to be_nil
47
51
 
48
52
  # check that we can still switch to another user
49
53
  get "/switch_user?scope_identifier=user_#{user.id}"
50
- session["user_id"].should == user.id
54
+ expect(session["user_id"]).to eq user.id
51
55
 
52
56
  # check that we can be un-remembered
53
57
  get "/switch_user/remember_user", :remember => false
54
- session["original_user"].should be_nil
58
+ expect(session["original_user"]).to be_nil
55
59
  end
56
60
  end
57
61
  end
@@ -29,7 +29,7 @@ class AuthlogicController < TestController
29
29
  end
30
30
  end
31
31
 
32
- describe SwitchUser::Provider::Authlogic do
32
+ RSpec.describe SwitchUser::Provider::Authlogic do
33
33
  let(:controller) { AuthlogicController.new }
34
34
  let(:provider) { SwitchUser::Provider::Authlogic.new(controller) }
35
35
 
@@ -15,7 +15,7 @@ class ClearanceController < TestController
15
15
  end
16
16
  end
17
17
 
18
- describe SwitchUser::Provider::Clearance do
18
+ RSpec.describe SwitchUser::Provider::Clearance do
19
19
  let(:controller) { ClearanceController.new }
20
20
  let(:provider) { SwitchUser::Provider::Clearance.new(controller) }
21
21
 
@@ -1,6 +1,17 @@
1
1
  require 'spec_helper'
2
2
  require 'switch_user/provider/devise'
3
3
 
4
+ class FakeWardenSessionSerializer
5
+ attr_accessor :user_hash
6
+
7
+
8
+ def store(user, scope)
9
+ return unless user
10
+ user_hash[scope] = user
11
+ end
12
+
13
+ end
14
+
4
15
  class FakeWarden
5
16
  attr_reader :user_hash
6
17
 
@@ -13,6 +24,12 @@ class FakeWarden
13
24
  @user_hash[scope] = user
14
25
  end
15
26
 
27
+ def session_serializer
28
+ serializer = FakeWardenSessionSerializer.new
29
+ serializer.user_hash = @user_hash
30
+ serializer
31
+ end
32
+
16
33
  def user(scope)
17
34
  @user_hash[scope]
18
35
  end
@@ -32,55 +49,55 @@ class DeviseController < TestController
32
49
  end
33
50
  end
34
51
 
35
- describe SwitchUser::Provider::Devise do
52
+ RSpec.describe SwitchUser::Provider::Devise do
36
53
  let(:controller) { DeviseController.new }
37
54
  let(:provider) { SwitchUser::Provider::Devise.new(controller) }
38
- let(:user) { stub(:user) }
55
+ let(:user) { double(:user) }
39
56
 
40
57
  it_behaves_like "a provider"
41
58
 
42
59
  it "can use alternate scopes" do
43
- user = stub(:user)
60
+ user = double(:user)
44
61
  provider.login(user, :admin)
45
62
 
46
- provider.current_user(:admin).should == user
63
+ expect(provider.current_user(:admin)).to eq user
47
64
  end
48
65
 
49
66
  describe "#login_exclusive" do
50
67
  before do
51
- SwitchUser.stub(:available_users => {:user => nil, :admin => nil})
68
+ allow(SwitchUser).to receive(:available_users).and_return({:user => nil, :admin => nil})
52
69
  provider.login(user, :admin)
53
70
  provider.login_exclusive(user, :scope => "user")
54
71
  end
55
72
 
56
73
  it "logs the user in" do
57
- provider.current_user.should == user
74
+ expect(provider.current_user).to eq user
58
75
  end
59
76
 
60
77
  it "logs out other scopes" do
61
- provider.current_user(:admin).should be_nil
78
+ expect(provider.current_user(:admin)).to be_nil
62
79
  end
63
80
  end
64
81
 
65
82
  describe "#logout_all" do
66
83
  it "logs out users under all scopes" do
67
- SwitchUser.stub(:available_users => {:user => nil, :admin => nil})
84
+ allow(SwitchUser).to receive(:available_users).and_return({:user => nil, :admin => nil})
68
85
  provider.login(user, :admin)
69
86
  provider.login(user, :user)
70
87
 
71
88
  provider.logout_all
72
89
 
73
- provider.current_user(:admin).should be_nil
74
- provider.current_user(:user).should be_nil
90
+ expect(provider.current_user(:admin)).to be_nil
91
+ expect(provider.current_user(:user)).to be_nil
75
92
  end
76
93
  end
77
94
 
78
95
  describe "#all_current_users" do
79
96
  it "pulls users from an alternate scope" do
80
- SwitchUser.stub(:available_users => {:user => nil, :admin => nil})
97
+ allow(SwitchUser).to receive(:available_users).and_return({:user => nil, :admin => nil})
81
98
  provider.login(user, :admin)
82
99
 
83
- provider.current_users_without_scope.should == [user]
100
+ expect(provider.current_users_without_scope).to eq [user]
84
101
  end
85
102
  end
86
103
  end
@@ -4,7 +4,7 @@ require 'switch_user/provider/dummy'
4
4
  class SessionController < TestController
5
5
  end
6
6
 
7
- describe SwitchUser::Provider::Session do
7
+ RSpec.describe SwitchUser::Provider::Session do
8
8
  let(:controller) { SessionController.new }
9
9
  let(:provider) { SwitchUser::Provider::Dummy.new(controller) }
10
10
 
@@ -9,7 +9,7 @@ class RestfulAuthenticationController < TestController
9
9
  end
10
10
  end
11
11
 
12
- describe SwitchUser::Provider::RestfulAuthentication do
12
+ RSpec.describe SwitchUser::Provider::RestfulAuthentication do
13
13
  let(:controller) { RestfulAuthenticationController.new }
14
14
  let(:provider) { SwitchUser::Provider::RestfulAuthentication.new(controller) }
15
15
 
@@ -7,7 +7,7 @@ class SessionController < TestController
7
7
  end
8
8
  end
9
9
 
10
- describe SwitchUser::Provider::Session do
10
+ RSpec.describe SwitchUser::Provider::Session do
11
11
  before do
12
12
  SwitchUser.session_key = :uid
13
13
  end
@@ -4,6 +4,7 @@ require 'switch_user/provider/sorcery'
4
4
  class SorceryController < TestController
5
5
  def logout
6
6
  @user = nil
7
+ reset_session
7
8
  end
8
9
 
9
10
  def auto_login(user)
@@ -15,7 +16,7 @@ class SorceryController < TestController
15
16
  end
16
17
  end
17
18
 
18
- describe SwitchUser::Provider::Sorcery do
19
+ RSpec.describe SwitchUser::Provider::Sorcery do
19
20
  let(:controller) { SorceryController.new }
20
21
  let(:provider) { SwitchUser::Provider::Sorcery.new(controller) }
21
22
 
@@ -1,10 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module SwitchUser
4
- describe Provider do
4
+ RSpec.describe Provider do
5
5
  it "initializes the provider" do
6
6
  SwitchUser.provider = :dummy
7
- Provider.init(stub(:controller)).should be_a(Provider::Dummy)
7
+ expect(Provider.init(double(:controller))).to be_a(Provider::Dummy)
8
8
  end
9
9
  end
10
10
  end
@@ -10,10 +10,15 @@ RSpec.configure do |config|
10
10
  config.filter_run :focus => true
11
11
  config.run_all_when_everything_filtered = true
12
12
  config.use_transactional_fixtures = true
13
+ config.expose_dsl_globally = false
13
14
  end
14
15
 
15
16
  class TestController
16
17
  def session
17
18
  @session_hash ||= {}
18
19
  end
20
+
21
+ def reset_session
22
+ @session_hash = {}
23
+ end
19
24
  end
@@ -43,7 +43,6 @@ end
43
43
  module MyApp
44
44
  class Application < Rails::Application
45
45
  config.active_support.deprecation = :log
46
- config.threadsafe!
47
46
  config.secret_key_base = "abc123"
48
47
  config.eager_load = true
49
48
  config.secret_token = '153572e559247c7aedd1bca5a246874d'
@@ -1,11 +1,11 @@
1
- shared_examples_for "a provider" do
1
+ RSpec.shared_examples_for "a provider" do
2
2
  let(:user) { User.create! }
3
3
  let(:other_user) { User.create! }
4
4
 
5
5
  it "can log a user in" do
6
6
  provider.login(user)
7
7
 
8
- provider.current_user.should == user
8
+ expect(provider.current_user).to eq user
9
9
  end
10
10
 
11
11
  it "can log a user out" do
@@ -13,39 +13,39 @@ shared_examples_for "a provider" do
13
13
 
14
14
  provider.logout
15
15
 
16
- provider.current_user.should == nil
16
+ expect(provider.current_user).to eq nil
17
17
  end
18
18
 
19
19
  it "responds to login_exclusive" do
20
- provider.should respond_to(:login_exclusive)
20
+ expect(provider).to respond_to(:login_exclusive)
21
21
  end
22
22
 
23
23
  it "responds to login_exclusive" do
24
- provider.should respond_to(:login_inclusive)
24
+ expect(provider).to respond_to(:login_inclusive)
25
25
  end
26
26
 
27
27
  it "knows if there are any users logged in" do
28
28
  provider.login(user)
29
29
 
30
- provider.current_users_without_scope.should == [user]
30
+ expect(provider.current_users_without_scope).to eq [user]
31
31
  end
32
32
 
33
33
  it "can lock the original user, allowing us to change current_user" do
34
34
  provider.login(user)
35
35
  provider.remember_current_user(true)
36
- provider.login(other_user)
36
+ provider.login_exclusive(other_user, scope: "user")
37
37
 
38
- provider.original_user.should == user
39
- provider.current_user.should == other_user
38
+ expect(provider.original_user).to eq user
39
+ expect(provider.current_user).to eq other_user
40
40
  end
41
41
 
42
42
  it "can forget the original_user" do
43
43
  provider.login(user)
44
44
  provider.remember_current_user(true)
45
45
 
46
- provider.original_user.should == user
46
+ expect(provider.original_user).to eq user
47
47
  provider.remember_current_user(false)
48
48
 
49
- provider.original_user.should == nil
49
+ expect(provider.original_user).to eq nil
50
50
  end
51
51
  end
@@ -1,49 +1,87 @@
1
1
  require 'switch_user/data_source'
2
2
 
3
3
  module SwitchUser
4
- describe DataSource do
5
- it "can load users" do
6
- loader = lambda { [ double, double] }
7
- source = DataSource.new(loader, :user, :id, :email)
4
+ RSpec.describe DataSources do
5
+ describe '#all' do
6
+ it 'aggregates multiple data_sources' do
7
+ user = double(:user)
8
+ s1 = double(:s1, :all => [user])
9
+ source = DataSources.new([s1, s1])
8
10
 
9
- source.users.should have(2).records
11
+ expect(source.all).to eq [user, user]
12
+ end
13
+ end
14
+
15
+ describe '#find_scope_id' do
16
+ it 'can find a corresponding record across data sources' do
17
+ user = double(:user)
18
+ s1 = double(:s1, :find_scope_id => nil)
19
+ s2 = double(:s2, :find_scope_id => user)
20
+ source = DataSources.new([s1, s2])
21
+
22
+ expect(source.find_scope_id("user_10")).to eq user
23
+ end
10
24
  end
11
25
  end
12
26
 
13
- describe DataSources do
14
- it "aggregates multiple data_sources" do
15
- user = double(:user)
16
- s1 = double(:s1, :users => [user])
17
- source = DataSources.new([s1,s1])
27
+ RSpec.describe DataSource do
28
+ pending # it's tested in integration test, need to find a good way to test it here.
29
+ end
18
30
 
19
- source.users.should == [user, user]
31
+ RSpec.describe GuestDataSource do
32
+ let(:source) { GuestDataSource.new }
33
+
34
+ describe '#users' do
35
+ it 'gets a GuestRecord' do
36
+ expect(source.users.size).to eq 1
37
+ expect(source.users.first).to be_instance_of GuestRecord
38
+ end
20
39
  end
21
40
 
22
- describe "#find_source_id" do
23
- it "can find a corresponding record across data sources" do
24
- user = double(:user, :scope_id => "user_10")
25
- s1 = double(:s1, :users => [])
26
- s2 = double(:s1, :users => [user])
27
- source = DataSources.new([s1,s2])
41
+ describe '#find_scope_id' do
42
+ it 'gets nil' do
43
+ expect(source.find_scope_id('')).to be_nil
44
+ end
45
+ end
46
+ end
28
47
 
29
- source.find_scope_id("user_10").should == user
48
+ RSpec.describe Record do
49
+ let(:source) { DataSource.new({}, :user, :id, :email) }
50
+ let(:user) { double(:user, id: '1', email: 'flyerhzm@gmail.com') }
51
+ let(:record) { Record.new(user, source) }
52
+
53
+ describe '#label' do
54
+ it 'gets user email' do
55
+ expect(record.label).to eq 'flyerhzm@gmail.com'
56
+ end
57
+ end
58
+
59
+ describe '#scope' do
60
+ it 'gets user' do
61
+ expect(record.scope).to eq :user
62
+ end
63
+ end
64
+
65
+ describe '#scope_id' do
66
+ it 'gets scope and id' do
67
+ expect(record.scope_id).to eq 'user_1'
30
68
  end
31
69
  end
32
70
  end
33
71
 
34
- describe Record do
35
- it "can be compared to a identifier string" do
36
- id1 = "user_100"
37
- id2 = "user_101"
38
- id3 = "staff_100"
39
- user = double(:user, :id => 100, :email => "test@example.com")
40
- source = DataSource.new(nil, :user, :id, :email)
72
+ RSpec.describe GuestRecord do
73
+ let(:record) { GuestRecord.new }
41
74
 
42
- record = Record.new(user, source)
75
+ describe '#label' do
76
+ it 'gets Guest' do
77
+ expect(record.label).to eq 'Guest'
78
+ end
79
+ end
43
80
 
44
- record.should be_equivalent(id1)
45
- record.should_not be_equivalent(id2)
46
- record.should_not be_equivalent(id3)
81
+ describe '#scope_id' do
82
+ it 'gets nil' do
83
+ expect(record.scope_id).to be_nil
84
+ end
47
85
  end
48
86
  end
49
87
  end
@@ -1,18 +1,18 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module SwitchUser
4
- describe LambdaGuard do
4
+ RSpec.describe LambdaGuard do
5
5
  describe "#controller_available?" do
6
6
  it "calls the controller_guard proc" do
7
- controller = stub.as_null_object
8
- provider = stub.as_null_object
7
+ controller = double.as_null_object
8
+ provider = double.as_null_object
9
9
  guard = SwitchUser::LambdaGuard.new(controller, provider)
10
10
 
11
11
  SwitchUser.controller_guard = lambda {|a| a }
12
- guard.should be_controller_available
12
+ expect(guard).to be_controller_available
13
13
 
14
14
  SwitchUser.controller_guard = lambda {|a| !a }
15
- guard.should_not be_controller_available
15
+ expect(guard).not_to be_controller_available
16
16
  end
17
17
  end
18
18
  end
@@ -1,8 +1,8 @@
1
1
  require 'spec_helper'
2
2
  require 'switch_user/user_loader'
3
3
 
4
- describe SwitchUser::UserLoader do
5
- let(:user) { stub(:user) }
4
+ RSpec.describe SwitchUser::UserLoader do
5
+ let(:user) { double(:user) }
6
6
  let(:user_result) { [user] }
7
7
 
8
8
  it "raises an exception if we are passed an invalid scope" do
@@ -12,17 +12,17 @@ describe SwitchUser::UserLoader do
12
12
  describe ".user" do
13
13
  before do
14
14
  SwitchUser.available_users_identifiers = {:user => :id}
15
- User.stub(:where).with(:id => "1").and_return(user_result)
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
18
  loaded_user = SwitchUser::UserLoader.prepare("user","1").user
19
19
 
20
- loaded_user.should == user
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
23
  loaded_user = SwitchUser::UserLoader.prepare(:scope_identifier => "user_1").user
24
24
 
25
- loaded_user.should == user
25
+ expect(loaded_user).to eq user
26
26
  end
27
27
  it "raises an error for an invalid scope" do
28
28
  expect {
@@ -32,25 +32,25 @@ describe SwitchUser::UserLoader do
32
32
  end
33
33
 
34
34
  it "returns a user" do
35
- User.stub(:where).with(:id => 1).and_return(user_result)
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
 
39
- loader.user.should == user
39
+ expect(loader.user).to eq user
40
40
  end
41
41
 
42
42
  it "returns nil if no user is found" do
43
43
  loader = SwitchUser::UserLoader.new("user", 3)
44
44
 
45
- User.find_by_id(3).should be_nil
46
- loader.user.should == nil
45
+ expect(User.find_by_id(3)).to be_nil
46
+ expect(loader.user).to eq nil
47
47
  end
48
48
 
49
49
  it "loads a user with an alternate identifier column" do
50
- User.stub(:where).with(:email => 2).and_return(user_result)
50
+ allow(User).to receive(:where).with(:email => 2).and_return(user_result)
51
51
  SwitchUser.available_users_identifiers = {:user => :email}
52
52
 
53
53
  loader = SwitchUser::UserLoader.new("user", 2)
54
- loader.user.should == user
54
+ expect(loader.user).to eq user
55
55
  end
56
56
  end
@@ -2,33 +2,33 @@ require 'spec_helper'
2
2
  require 'switch_user/user_set'
3
3
 
4
4
  module SwitchUser
5
- describe UserSet do
5
+ RSpec.describe UserSet do
6
6
  let!(:user) { User.create(:email => "test@example.com") }
7
- let(:set) { UserSet.new(:user, :id, :email, lambda { User.scoped}) }
7
+ let(:set) { UserSet.new(:user, :id, :email, lambda { 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]
11
11
 
12
- found_user.id.should == user.id
13
- found_user.scope.should == :user
14
- found_user.label.should == "test@example.com"
12
+ expect(found_user.id).to eq user.id
13
+ expect(found_user.scope).to eq :user
14
+ expect(found_user.label).to eq "test@example.com"
15
15
  end
16
16
  it "returns all available users for a scope" do
17
- set.users.should == [user]
17
+ expect(set.users).to eq [user]
18
18
  end
19
19
  it "chains the where on to the provided scope" do
20
20
  set = UserSet.new(:user, :id, :email, lambda { User.all })
21
- set.find_user(user.id).label.should == user.email
21
+ expect(set.find_user(user.id).label).to eq user.email
22
22
  end
23
23
  end
24
- describe UserSet::Record do
24
+ RSpec.describe UserSet::Record do
25
25
  it "correctly configures the record using the set" do
26
- user = stub(:user, :id => 100, :email => "test@example.com")
27
- set = stub(:set, :identifier => :id, :label => :email, :scope => :user)
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
- record.id.should == 100
30
- record.label.should == "test@example.com"
31
- record.scope.should == :user
29
+ expect(record.id).to eq 100
30
+ expect(record.label).to eq "test@example.com"
31
+ expect(record.scope).to eq :user
32
32
  end
33
33
  end
34
34
  end
@@ -1,10 +1,10 @@
1
1
  require 'spec_helper'
2
2
  require 'switch_user'
3
3
 
4
- describe SwitchUser do
4
+ RSpec.describe SwitchUser do
5
5
  describe "#available_scopes" do
6
6
  it "returns a list of available scopes" do
7
- SwitchUser.available_scopes.should == [:user]
7
+ expect(SwitchUser.available_scopes).to eq [:user]
8
8
  end
9
9
  end
10
10
 
@@ -12,7 +12,7 @@ describe SwitchUser do
12
12
  it "sets the provider" do
13
13
  # ensure we aren't breaking existing functionality
14
14
  SwitchUser.provider = :sorcery
15
- SwitchUser.provider.should == :sorcery
15
+ expect(SwitchUser.provider).to eq :sorcery
16
16
  end
17
17
  end
18
18
  end
@@ -18,7 +18,8 @@ Gem::Specification.new do |s|
18
18
  s.add_development_dependency "bundler", ">= 1.0.0"
19
19
  s.add_development_dependency "actionpack"
20
20
  s.add_development_dependency "railties"
21
- s.add_development_dependency "rspec-rails", "~> 2.11.0"
21
+ s.add_development_dependency "rspec"
22
+ s.add_development_dependency "rspec-rails"
22
23
  s.add_development_dependency "tzinfo"
23
24
  s.add_development_dependency "sqlite3"
24
25
  s.add_development_dependency "activerecord"
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: 0.9.5
4
+ version: 1.0.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: 2014-04-09 00:00:00.000000000 Z
12
+ date: 2015-06-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -67,20 +67,34 @@ dependencies:
67
67
  - - ">="
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rspec
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
70
84
  - !ruby/object:Gem::Dependency
71
85
  name: rspec-rails
72
86
  requirement: !ruby/object:Gem::Requirement
73
87
  requirements:
74
- - - "~>"
88
+ - - ">="
75
89
  - !ruby/object:Gem::Version
76
- version: 2.11.0
90
+ version: '0'
77
91
  type: :development
78
92
  prerelease: false
79
93
  version_requirements: !ruby/object:Gem::Requirement
80
94
  requirements:
81
- - - "~>"
95
+ - - ">="
82
96
  - !ruby/object:Gem::Version
83
- version: 2.11.0
97
+ version: '0'
84
98
  - !ruby/object:Gem::Dependency
85
99
  name: tzinfo
86
100
  requirement: !ruby/object:Gem::Requirement
@@ -160,6 +174,8 @@ extra_rdoc_files: []
160
174
  files:
161
175
  - ".gitignore"
162
176
  - ".rspec"
177
+ - ".travis.yml"
178
+ - CHANGELOG.md
163
179
  - Gemfile
164
180
  - LICENSE
165
181
  - README.md
@@ -227,7 +243,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
227
243
  version: 1.3.6
228
244
  requirements: []
229
245
  rubyforge_project: switch_user
230
- rubygems_version: 2.2.2
246
+ rubygems_version: 2.4.7
231
247
  signing_key:
232
248
  specification_version: 4
233
249
  summary: Easily switch current user to speed up development