switch_user 0.9.3 → 0.9.4
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 +15 -0
- data/.gitignore +1 -0
- data/README.md +1 -1
- data/app/helpers/switch_user_helper.rb +7 -19
- data/app/views/switch_user/_widget.html.erb +1 -1
- data/config/database.yml +3 -0
- data/lib/switch_user.rb +1 -2
- data/lib/switch_user/provider/base.rb +15 -4
- data/lib/switch_user/user_loader.rb +1 -1
- data/lib/switch_user/user_set.rb +71 -0
- data/lib/switch_user/version.rb +1 -1
- data/spec/integration/switch_user_spec.rb +57 -0
- data/spec/provider/session_spec.rb +0 -3
- data/spec/spec_helper.rb +4 -11
- data/spec/support/application.rb +66 -3
- data/spec/support/provider.rb +2 -2
- data/spec/switch_user/user_loader_spec.rb +3 -1
- data/spec/switch_user/user_set_spec.rb +34 -0
- data/switch_user.gemspec +4 -0
- metadata +81 -35
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
YmQwZjYwMDUxNGZmNGVjMjY2ZWQ2YTE3MzUwYWUwOTA5NjA1MWEzZQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
ZTBiZTg2NDBkOGE3OTM3NDQ1ODczNzIyOWUxNzYwZGQwYzFlNDRjMg==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NGRkMDQwOGIzYjA2YThiMDc2NzU2OGUzYThhY2UyMDE2NGRiYTFlNGJiYWI5
|
10
|
+
MTU4YTBjMTIyOTBkNDdlM2U4MzVmZTBkODEzZTI5ZDJjYzQyMmNmMzk1MGNl
|
11
|
+
MmY4MjU1OTQ3NWM1NWU1NGUyZDI5ZTY3YTNhYTNjMWYwODEyNGQ=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
YThmODEyMjBmNjUzMjNiNGZmMTUzYzUxOWMzMWZlYmQ2NzU4ZjZjYzA0MTFj
|
14
|
+
M2EyMjcyNGRmZWI2MWUxNWY2MjNkM2NmMjg3ODE1ZTdjMWIyODEwYTQwNDUz
|
15
|
+
YjQ5NWViMWIyZGEyMjU3NmMzNWIwOTdlMmQxNGMxMjQyZTI2NWI=
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -127,7 +127,7 @@ Sometimes you'll want to be able to switch to an unprivileged user and then back
|
|
127
127
|
|
128
128
|
You will need to make the following modifications to your configuration:
|
129
129
|
```ruby
|
130
|
-
config.
|
130
|
+
config.switch_back = true
|
131
131
|
config.controller_guard = lambda { |current_user, request, original_user|
|
132
132
|
current_user && current_user.admin? || original_user && original_user.super_admin?
|
133
133
|
}
|
@@ -1,41 +1,29 @@
|
|
1
1
|
module SwitchUserHelper
|
2
|
-
|
2
|
+
SelectOption = Struct.new(:label, :scope_id)
|
3
3
|
def switch_user_select
|
4
4
|
return unless available?
|
5
5
|
options = []
|
6
6
|
selected_user = nil
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
current_user = provider.current_user(scope)
|
11
|
-
id_name = SwitchUser.available_users_identifiers[scope]
|
12
|
-
name = SwitchUser.available_users_names[scope]
|
13
|
-
|
14
|
-
user_proc.call.each do |user|
|
15
|
-
if user == current_user
|
16
|
-
selected_user = tag_value(user, id_name, scope)
|
17
|
-
end
|
18
|
-
options << SelectOption.new(tag_label(user, name), tag_value(user, id_name, scope))
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
8
|
+
users = SwitchUser::UserSet.users
|
9
|
+
users << SelectOption.new("Guest", "") if SwitchUser.helper_with_guest
|
22
10
|
render :partial => "switch_user/widget",
|
23
11
|
:locals => {
|
24
|
-
:options =>
|
12
|
+
:options => users,
|
25
13
|
:current_scope => selected_user
|
26
14
|
}
|
27
15
|
end
|
28
16
|
|
29
17
|
private
|
30
18
|
|
31
|
-
def
|
19
|
+
def user_tag_value(user, id_name, scope)
|
32
20
|
identifier = user.send(id_name)
|
33
21
|
|
34
22
|
"#{scope}_#{identifier}"
|
35
23
|
end
|
36
24
|
|
37
|
-
def
|
38
|
-
user.send(name)
|
25
|
+
def user_tag_label(user, name)
|
26
|
+
name.respond_to?(:call) ? name.call(user) : user.send(name)
|
39
27
|
end
|
40
28
|
|
41
29
|
def available?
|
@@ -1,4 +1,4 @@
|
|
1
1
|
<% if SwitchUser.switch_back %>
|
2
|
-
<%= check_box_tag "remember_user", "remember_user", provider.original_user.present?, :onchange => "location.href = 'switch_user/remember_user?remember=' + encodeURIComponent(this.checked)" %>
|
2
|
+
<%= check_box_tag "remember_user", "remember_user", provider.original_user.present?, :onchange => "location.href = '/switch_user/remember_user?remember=' + encodeURIComponent(this.checked)" %>
|
3
3
|
<% end %>
|
4
4
|
<%= select_tag "switch_user_identifier", options_from_collection_for_select(options, :scope_id, :label, current_scope), :onchange => "location.href = '/switch_user?scope_identifier=' + encodeURIComponent(this.options[this.selectedIndex].value)" %>
|
data/config/database.yml
ADDED
data/lib/switch_user.rb
CHANGED
@@ -3,6 +3,7 @@ if defined?(Rails)
|
|
3
3
|
end
|
4
4
|
|
5
5
|
module SwitchUser
|
6
|
+
autoload :UserSet, "switch_user/user_set"
|
6
7
|
autoload :UserLoader, "switch_user/user_loader"
|
7
8
|
autoload :Provider, "switch_user/provider"
|
8
9
|
autoload :BaseGuard, "switch_user/base_guard"
|
@@ -35,8 +36,6 @@ module SwitchUser
|
|
35
36
|
@@guard_class = klass.constantize
|
36
37
|
end
|
37
38
|
|
38
|
-
private
|
39
|
-
|
40
39
|
def self.reset_config
|
41
40
|
self.provider = :devise
|
42
41
|
self.available_users = { :user => lambda { User.all } }
|
@@ -30,19 +30,30 @@ module SwitchUser
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def original_user
|
33
|
-
@controller.session[:
|
33
|
+
user_identifier = @controller.session[:original_user_scope_identifier]
|
34
|
+
|
35
|
+
if user_identifier
|
36
|
+
UserLoader.prepare(:scope_identifier => user_identifier).user
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def original_user=(user)
|
41
|
+
user_type = user.class.to_s.underscore
|
42
|
+
user_identifier = "#{user_type}_#{user.id}"
|
43
|
+
|
44
|
+
@controller.session[:original_user_scope_identifier] = user_identifier
|
34
45
|
end
|
35
46
|
|
36
47
|
def remember_current_user(remember)
|
37
48
|
if remember
|
38
|
-
|
49
|
+
self.original_user = current_user
|
39
50
|
else
|
40
|
-
|
51
|
+
clear_original_user
|
41
52
|
end
|
42
53
|
end
|
43
54
|
|
44
55
|
def clear_original_user
|
45
|
-
@controller.session.delete(:
|
56
|
+
@controller.session.delete(:original_user_scope_identifier)
|
46
57
|
end
|
47
58
|
end
|
48
59
|
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module SwitchUser
|
2
|
+
class UserSet
|
3
|
+
def self.init_from_config
|
4
|
+
SwitchUser.available_users.map do |scope, base_scope|
|
5
|
+
identifier = SwitchUser.available_users_identifiers[scope]
|
6
|
+
label = SwitchUser.available_users_names[scope]
|
7
|
+
new(scope, identifier, label, base_scope)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.users
|
12
|
+
init_from_config.flat_map {|user_set|
|
13
|
+
user_set.users.map {|user| Record.build(user, user_set) }
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
attr_reader :scope, :user_class, :identifier, :label, :base_scope
|
18
|
+
def initialize(scope, identifier, label, base_scope)
|
19
|
+
@scope = scope
|
20
|
+
@user_class = normalize_class(scope)
|
21
|
+
@identifier = identifier
|
22
|
+
@label = label
|
23
|
+
@base_scope = normalize_scope(base_scope)
|
24
|
+
end
|
25
|
+
|
26
|
+
def find_user(id)
|
27
|
+
Record.build(users.where(:id => id).first, self)
|
28
|
+
end
|
29
|
+
alias :[] :find_user
|
30
|
+
|
31
|
+
def users
|
32
|
+
base_scope
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def normalize_class(klass)
|
38
|
+
if klass.is_a?(Class)
|
39
|
+
klass
|
40
|
+
else
|
41
|
+
klass.to_s.classify.constantize
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def normalize_scope(scope)
|
46
|
+
if scope.respond_to?(:call)
|
47
|
+
scoped = scope.call
|
48
|
+
if scoped.respond_to?(:scoped)
|
49
|
+
scoped
|
50
|
+
else
|
51
|
+
user_class.scoped
|
52
|
+
end
|
53
|
+
else
|
54
|
+
user_class.scoped
|
55
|
+
end
|
56
|
+
end
|
57
|
+
class Record < Struct.new(:id, :label, :scope)
|
58
|
+
def self.build(user, set)
|
59
|
+
id = user.send(set.identifier)
|
60
|
+
label = user.send(set.label)
|
61
|
+
scope = set.scope
|
62
|
+
|
63
|
+
new(id, label, scope)
|
64
|
+
end
|
65
|
+
|
66
|
+
def scope_id
|
67
|
+
"#{scope}_#{id}"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
data/lib/switch_user/version.rb
CHANGED
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
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
|
+
before do
|
7
|
+
SwitchUser.reset_config
|
8
|
+
SwitchUser.provider = :session
|
9
|
+
SwitchUser.controller_guard = lambda { |current_user, request| Rails.env.test? }
|
10
|
+
SwitchUser.redirect_path = lambda {|_,_| "/dummys/open"}
|
11
|
+
end
|
12
|
+
it "signs a user in using switch_user" do
|
13
|
+
# can't access protected url
|
14
|
+
get "/dummy/protected"
|
15
|
+
response.should be_redirect
|
16
|
+
|
17
|
+
get "/switch_user?scope_identifier=user_#{other_user.id}"
|
18
|
+
response.should be_redirect
|
19
|
+
|
20
|
+
# now that we are logged in via switch_user we can access
|
21
|
+
get "/dummy/protected"
|
22
|
+
response.should be_success
|
23
|
+
end
|
24
|
+
context "using switch_back" do
|
25
|
+
before do
|
26
|
+
SwitchUser.switch_back = true
|
27
|
+
SwitchUser.controller_guard = lambda { |current_user, request, original_user|
|
28
|
+
current_user && current_user.admin? || original_user && original_user.admin?
|
29
|
+
}
|
30
|
+
end
|
31
|
+
it "can switch back to a different user" do
|
32
|
+
# login
|
33
|
+
post "/login", :id => user.id
|
34
|
+
follow_redirect!
|
35
|
+
|
36
|
+
# have SwitchUser remember us
|
37
|
+
get "/switch_user/remember_user", :remember => true
|
38
|
+
session["original_user_scope_identifier"].should be_present
|
39
|
+
|
40
|
+
# check that we can switch to another user
|
41
|
+
get "/switch_user?scope_identifier=user_#{other_user.id}"
|
42
|
+
session["user_id"].should == other_user.id
|
43
|
+
|
44
|
+
# logout
|
45
|
+
get "/logout"
|
46
|
+
session["user_id"].should be_nil
|
47
|
+
|
48
|
+
# check that we can still switch to another user
|
49
|
+
get "/switch_user?scope_identifier=user_#{user.id}"
|
50
|
+
session["user_id"].should == user.id
|
51
|
+
|
52
|
+
# check that we can be un-remembered
|
53
|
+
get "/switch_user/remember_user", :remember => false
|
54
|
+
session["original_user"].should be_nil
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -9,9 +9,6 @@ end
|
|
9
9
|
|
10
10
|
describe SwitchUser::Provider::Session do
|
11
11
|
before do
|
12
|
-
user.stub(:id => 100)
|
13
|
-
User.stub(:find_by_id).with(100).and_return(user)
|
14
|
-
User.stub(:find_by_id).with(101).and_return(other_user)
|
15
12
|
SwitchUser.session_key = :uid
|
16
13
|
end
|
17
14
|
let(:controller) { SessionController.new }
|
data/spec/spec_helper.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
|
+
ENV["RAILS_ENV"] = "test"
|
1
2
|
require 'support/provider'
|
2
3
|
require 'support/application'
|
3
4
|
require 'rspec/rails'
|
4
5
|
require 'switch_user'
|
6
|
+
require 'pry'
|
7
|
+
require 'awesome_print'
|
5
8
|
|
6
9
|
RSpec.configure do |config|
|
7
10
|
config.filter_run :focus => true
|
8
11
|
config.run_all_when_everything_filtered = true
|
9
|
-
|
10
|
-
|
11
|
-
class ApplicationController < ActionController::Base
|
12
|
-
|
12
|
+
config.use_transactional_fixtures = true
|
13
13
|
end
|
14
14
|
|
15
15
|
class TestController
|
@@ -17,10 +17,3 @@ class TestController
|
|
17
17
|
@session_hash ||= {}
|
18
18
|
end
|
19
19
|
end
|
20
|
-
|
21
|
-
class User
|
22
|
-
def self.where(*)
|
23
|
-
[]
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
data/spec/support/application.rb
CHANGED
@@ -1,7 +1,70 @@
|
|
1
1
|
require "rails"
|
2
2
|
require "rails/all"
|
3
|
+
require 'switch_user/rails'
|
3
4
|
|
4
|
-
|
5
|
-
|
5
|
+
|
6
|
+
class ApplicationController < ActionController::Base
|
7
|
+
def require_user
|
8
|
+
current_user || redirect_to("/tests/open")
|
9
|
+
end
|
10
|
+
|
11
|
+
def current_user
|
12
|
+
User.find_by_id(session[SwitchUser.session_key])
|
13
|
+
end
|
14
|
+
|
15
|
+
def login
|
16
|
+
user = User.find(params[:id])
|
17
|
+
session[SwitchUser.session_key] = user.id
|
18
|
+
|
19
|
+
redirect_to("/tests/protected")
|
20
|
+
end
|
21
|
+
|
22
|
+
def logout
|
23
|
+
session[SwitchUser.session_key] = nil
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class DummyController < ApplicationController
|
28
|
+
before_filter :require_user, :only => :protected
|
29
|
+
|
30
|
+
def authenticated
|
31
|
+
render :text => current_user.inspect
|
32
|
+
end
|
33
|
+
|
34
|
+
def open
|
35
|
+
render :text => view_context.switch_user_select
|
36
|
+
end
|
37
|
+
|
38
|
+
def protected
|
39
|
+
render :text => view_context.switch_user_select
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
module MyApp
|
44
|
+
class Application < Rails::Application
|
45
|
+
config.active_support.deprecation = :log
|
46
|
+
config.threadsafe!
|
47
|
+
config.secret_key_base = "abc123"
|
48
|
+
config.eager_load = true
|
49
|
+
config.secret_token = '153572e559247c7aedd1bca5a246874d'
|
50
|
+
end
|
51
|
+
end
|
52
|
+
Rails.application.initialize!
|
53
|
+
Rails.application.routes.draw do
|
54
|
+
get 'dummy/protected', :to => "dummy#protected"
|
55
|
+
get 'dummy/open', :to => "dummy#open"
|
56
|
+
post 'login', :to => "dummy#login"
|
57
|
+
get 'logout', :to => "dummy#logout"
|
58
|
+
get 'authenticated', :to => "dummy#authenticated"
|
59
|
+
get :switch_user, :to => 'switch_user#set_current_user'
|
60
|
+
get 'switch_user/remember_user', :to => 'switch_user#remember_user'
|
61
|
+
end
|
62
|
+
|
63
|
+
connection = ActiveRecord::Base.connection
|
64
|
+
connection.create_table :users do |t|
|
65
|
+
t.column :email, :string
|
66
|
+
t.column :admin, :boolean
|
67
|
+
end
|
68
|
+
|
69
|
+
class User < ActiveRecord::Base
|
6
70
|
end
|
7
|
-
MyApp.initialize!
|
data/spec/support/provider.rb
CHANGED
@@ -40,7 +40,9 @@ describe SwitchUser::UserLoader do
|
|
40
40
|
end
|
41
41
|
|
42
42
|
it "returns nil if no user is found" do
|
43
|
-
loader = SwitchUser::UserLoader.new("user",
|
43
|
+
loader = SwitchUser::UserLoader.new("user", 3)
|
44
|
+
|
45
|
+
User.find_by_id(3).should be_nil
|
44
46
|
loader.user.should == nil
|
45
47
|
end
|
46
48
|
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'switch_user/user_set'
|
3
|
+
|
4
|
+
module SwitchUser
|
5
|
+
describe UserSet do
|
6
|
+
let!(:user) { User.create(:email => "test@example.com") }
|
7
|
+
let(:set) { UserSet.new(:user, :id, :email, lambda { User.scoped}) }
|
8
|
+
after { User.delete_all }
|
9
|
+
it "returns an object that knows it's scope, id and label" do
|
10
|
+
found_user = set[user.id]
|
11
|
+
|
12
|
+
found_user.id.should == user.id
|
13
|
+
found_user.scope.should == :user
|
14
|
+
found_user.label.should == "test@example.com"
|
15
|
+
end
|
16
|
+
it "returns all available users for a scope" do
|
17
|
+
set.users.should == [user]
|
18
|
+
end
|
19
|
+
it "chains the where on to the provided scope" do
|
20
|
+
set = UserSet.new(:user, :id, :email, lambda { User.all })
|
21
|
+
set.find_user(user.id).label.should == user.email
|
22
|
+
end
|
23
|
+
end
|
24
|
+
describe UserSet::Record do
|
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)
|
28
|
+
record = UserSet::Record.build(user, set)
|
29
|
+
record.id.should == 100
|
30
|
+
record.label.should == "test@example.com"
|
31
|
+
record.scope.should == :user
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/switch_user.gemspec
CHANGED
@@ -20,6 +20,10 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.add_development_dependency "railties"
|
21
21
|
s.add_development_dependency "rspec-rails", "~> 2.11.0"
|
22
22
|
s.add_development_dependency "tzinfo"
|
23
|
+
s.add_development_dependency "sqlite3"
|
24
|
+
s.add_development_dependency "activerecord"
|
25
|
+
s.add_development_dependency "awesome_print"
|
26
|
+
s.add_development_dependency "pry"
|
23
27
|
|
24
28
|
s.files = `git ls-files`.split("\n")
|
25
29
|
s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: switch_user
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
version: 0.9.3
|
4
|
+
version: 0.9.4
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Richard Huang
|
@@ -10,104 +9,148 @@ authors:
|
|
10
9
|
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date: 2013-
|
12
|
+
date: 2013-11-26 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
|
-
|
15
|
+
name: activesupport
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
18
|
- - ! '>='
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '0'
|
21
|
-
none: false
|
22
|
-
name: activesupport
|
23
21
|
type: :development
|
24
22
|
prerelease: false
|
25
|
-
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
24
|
requirements:
|
27
25
|
- - ! '>='
|
28
26
|
- !ruby/object:Gem::Version
|
29
27
|
version: '0'
|
30
|
-
none: false
|
31
28
|
- !ruby/object:Gem::Dependency
|
32
|
-
|
29
|
+
name: bundler
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
33
31
|
requirements:
|
34
32
|
- - ! '>='
|
35
33
|
- !ruby/object:Gem::Version
|
36
34
|
version: 1.0.0
|
37
|
-
none: false
|
38
|
-
name: bundler
|
39
35
|
type: :development
|
40
36
|
prerelease: false
|
41
|
-
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
38
|
requirements:
|
43
39
|
- - ! '>='
|
44
40
|
- !ruby/object:Gem::Version
|
45
41
|
version: 1.0.0
|
46
|
-
none: false
|
47
42
|
- !ruby/object:Gem::Dependency
|
48
|
-
|
43
|
+
name: actionpack
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
49
45
|
requirements:
|
50
46
|
- - ! '>='
|
51
47
|
- !ruby/object:Gem::Version
|
52
48
|
version: '0'
|
53
|
-
none: false
|
54
|
-
name: actionpack
|
55
49
|
type: :development
|
56
50
|
prerelease: false
|
57
|
-
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
52
|
requirements:
|
59
53
|
- - ! '>='
|
60
54
|
- !ruby/object:Gem::Version
|
61
55
|
version: '0'
|
62
|
-
none: false
|
63
56
|
- !ruby/object:Gem::Dependency
|
64
|
-
|
57
|
+
name: railties
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
65
59
|
requirements:
|
66
60
|
- - ! '>='
|
67
61
|
- !ruby/object:Gem::Version
|
68
62
|
version: '0'
|
69
|
-
none: false
|
70
|
-
name: railties
|
71
63
|
type: :development
|
72
64
|
prerelease: false
|
73
|
-
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
66
|
requirements:
|
75
67
|
- - ! '>='
|
76
68
|
- !ruby/object:Gem::Version
|
77
69
|
version: '0'
|
78
|
-
none: false
|
79
70
|
- !ruby/object:Gem::Dependency
|
80
|
-
|
71
|
+
name: rspec-rails
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
81
73
|
requirements:
|
82
74
|
- - ~>
|
83
75
|
- !ruby/object:Gem::Version
|
84
76
|
version: 2.11.0
|
85
|
-
none: false
|
86
|
-
name: rspec-rails
|
87
77
|
type: :development
|
88
78
|
prerelease: false
|
89
|
-
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
90
80
|
requirements:
|
91
81
|
- - ~>
|
92
82
|
- !ruby/object:Gem::Version
|
93
83
|
version: 2.11.0
|
94
|
-
none: false
|
95
84
|
- !ruby/object:Gem::Dependency
|
85
|
+
name: tzinfo
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ! '>='
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
96
93
|
version_requirements: !ruby/object:Gem::Requirement
|
97
94
|
requirements:
|
98
95
|
- - ! '>='
|
99
96
|
- !ruby/object:Gem::Version
|
100
97
|
version: '0'
|
101
|
-
|
102
|
-
name:
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: sqlite3
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ! '>='
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ! '>='
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: activerecord
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ! '>='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: awesome_print
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - ! '>='
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0'
|
103
133
|
type: :development
|
104
134
|
prerelease: false
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - ! '>='
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0'
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: pry
|
105
142
|
requirement: !ruby/object:Gem::Requirement
|
106
143
|
requirements:
|
107
144
|
- - ! '>='
|
108
145
|
- !ruby/object:Gem::Version
|
109
146
|
version: '0'
|
110
|
-
|
147
|
+
type: :development
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - ! '>='
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
111
154
|
description: Easily switch current user to speed up development
|
112
155
|
email:
|
113
156
|
- flyerhzm@gmail.com
|
@@ -124,6 +167,7 @@ files:
|
|
124
167
|
- app/controllers/switch_user_controller.rb
|
125
168
|
- app/helpers/switch_user_helper.rb
|
126
169
|
- app/views/switch_user/_widget.html.erb
|
170
|
+
- config/database.yml
|
127
171
|
- config/routes.rb
|
128
172
|
- lib/generators/switch_user/install/USAGE
|
129
173
|
- lib/generators/switch_user/install/install_generator.rb
|
@@ -142,8 +186,10 @@ files:
|
|
142
186
|
- lib/switch_user/provider/sorcery.rb
|
143
187
|
- lib/switch_user/rails.rb
|
144
188
|
- lib/switch_user/user_loader.rb
|
189
|
+
- lib/switch_user/user_set.rb
|
145
190
|
- lib/switch_user/version.rb
|
146
191
|
- spec/controllers/switch_user_controller_spec.rb
|
192
|
+
- spec/integration/switch_user_spec.rb
|
147
193
|
- spec/provider/authlogic_spec.rb
|
148
194
|
- spec/provider/clearance_spec.rb
|
149
195
|
- spec/provider/devise_spec.rb
|
@@ -157,10 +203,12 @@ files:
|
|
157
203
|
- spec/support/provider.rb
|
158
204
|
- spec/switch_user/lambda_guard_spec.rb
|
159
205
|
- spec/switch_user/user_loader_spec.rb
|
206
|
+
- spec/switch_user/user_set_spec.rb
|
160
207
|
- spec/switch_user_spec.rb
|
161
208
|
- switch_user.gemspec
|
162
209
|
homepage: http://rubygems.org/gems/switch_user
|
163
210
|
licenses: []
|
211
|
+
metadata: {}
|
164
212
|
post_install_message:
|
165
213
|
rdoc_options: []
|
166
214
|
require_paths:
|
@@ -170,17 +218,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
170
218
|
- - ! '>='
|
171
219
|
- !ruby/object:Gem::Version
|
172
220
|
version: '0'
|
173
|
-
none: false
|
174
221
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
175
222
|
requirements:
|
176
223
|
- - ! '>='
|
177
224
|
- !ruby/object:Gem::Version
|
178
225
|
version: 1.3.6
|
179
|
-
none: false
|
180
226
|
requirements: []
|
181
227
|
rubyforge_project: switch_user
|
182
|
-
rubygems_version: 1.
|
228
|
+
rubygems_version: 2.1.11
|
183
229
|
signing_key:
|
184
|
-
specification_version:
|
230
|
+
specification_version: 4
|
185
231
|
summary: Easily switch current user to speed up development
|
186
232
|
test_files: []
|