switch_user 0.9.5 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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