switch_user 0.9.4 → 0.9.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- YmQwZjYwMDUxNGZmNGVjMjY2ZWQ2YTE3MzUwYWUwOTA5NjA1MWEzZQ==
5
- data.tar.gz: !binary |-
6
- ZTBiZTg2NDBkOGE3OTM3NDQ1ODczNzIyOWUxNzYwZGQwYzFlNDRjMg==
2
+ SHA1:
3
+ metadata.gz: 924cc5fa100afa7570a5123a211b67c238c7d502
4
+ data.tar.gz: 499e47bb57936f4ba85346dd715de82f7992754e
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- NGRkMDQwOGIzYjA2YThiMDc2NzU2OGUzYThhY2UyMDE2NGRiYTFlNGJiYWI5
10
- MTU4YTBjMTIyOTBkNDdlM2U4MzVmZTBkODEzZTI5ZDJjYzQyMmNmMzk1MGNl
11
- MmY4MjU1OTQ3NWM1NWU1NGUyZDI5ZTY3YTNhYTNjMWYwODEyNGQ=
12
- data.tar.gz: !binary |-
13
- YThmODEyMjBmNjUzMjNiNGZmMTUzYzUxOWMzMWZlYmQ2NzU4ZjZjYzA0MTFj
14
- M2EyMjcyNGRmZWI2MWUxNWY2MjNkM2NmMjg3ODE1ZTdjMWIyODEwYTQwNDUz
15
- YjQ5NWViMWIyZGEyMjU3NmMzNWIwOTdlMmQxNGMxMjQyZTI2NWI=
6
+ metadata.gz: 9f64a50974a3e93a2d880b1d09e3b122d0bfcbbf76be3f9cd0211a95e827c5e1a6e1924d9354c5106688211bd4c52a25b45856e32efed9ceba5df83fdbf2b545
7
+ data.tar.gz: 8afe11f071e813f079299dddbc235409ab0284811f33c55429022ad3e35bfc5826a85d70938a3b7f62eb3211c9319a46803736403d81748cb61b8a926795eca2
@@ -30,11 +30,15 @@ class SwitchUserController < ApplicationController
30
30
  if params[:scope_identifier].blank?
31
31
  provider.logout_all
32
32
  else
33
- loader = SwitchUser::UserLoader.prepare(params)
33
+ record = SwitchUser.data_sources.find_scope_id(params[:scope_identifier])
34
+ unless record
35
+ provider.logout_all
36
+ return
37
+ end
34
38
  if SwitchUser.login_exclusive
35
- provider.login_exclusive(loader.user, :scope => loader.scope)
39
+ provider.login_exclusive(record.user, :scope => record.scope)
36
40
  else
37
- provider.login_inclusive(loader.user, :scope => loader.scope)
41
+ provider.login_inclusive(record.user, :scope => record.scope)
38
42
  end
39
43
  end
40
44
  end
@@ -2,14 +2,16 @@ module SwitchUserHelper
2
2
  SelectOption = Struct.new(:label, :scope_id)
3
3
  def switch_user_select
4
4
  return unless available?
5
- options = []
6
- selected_user = nil
7
5
 
8
- users = SwitchUser::UserSet.users
9
- users << SelectOption.new("Guest", "") if SwitchUser.helper_with_guest
6
+ if provider.current_user
7
+ selected_user = "user_#{current_user.id}"
8
+ else
9
+ selected_user = nil
10
+ end
11
+
10
12
  render :partial => "switch_user/widget",
11
13
  :locals => {
12
- :options => users,
14
+ :options => SwitchUser.all_users,
13
15
  :current_scope => selected_user
14
16
  }
15
17
  end
@@ -3,6 +3,7 @@ if defined?(Rails)
3
3
  end
4
4
 
5
5
  module SwitchUser
6
+ require 'switch_user/data_source'
6
7
  autoload :UserSet, "switch_user/user_set"
7
8
  autoload :UserLoader, "switch_user/user_loader"
8
9
  autoload :Provider, "switch_user/provider"
@@ -36,6 +37,20 @@ module SwitchUser
36
37
  @@guard_class = klass.constantize
37
38
  end
38
39
 
40
+ def self.all_users
41
+ data_sources.users
42
+ end
43
+
44
+ def self.data_sources
45
+ sources = available_users.map do |scope, loader|
46
+ identifier = available_users_identifiers.fetch(scope)
47
+ name = available_users_names.fetch(scope)
48
+ DataSource.new(loader, scope, identifier, name)
49
+ end
50
+ sources.unshift(GuestDataSource.new("Guest")) if helper_with_guest
51
+ DataSources.new(sources)
52
+ end
53
+
39
54
  def self.reset_config
40
55
  self.provider = :devise
41
56
  self.available_users = { :user => lambda { User.all } }
@@ -0,0 +1,58 @@
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
7
+
8
+ GuestRecord = Struct.new(:scope) do
9
+ def equivalent?(other_scope_id)
10
+ scope_id == other_scope_id
11
+ end
12
+
13
+ def label
14
+ "Guest"
15
+ end
16
+
17
+ def scope_id
18
+ end
19
+ end
20
+
21
+ class GuestDataSource
22
+ def initialize(name)
23
+ @name = name
24
+ end
25
+
26
+ def users
27
+ [ GuestRecord.new(self) ]
28
+ end
29
+ end
30
+
31
+ DataSources = Struct.new(:sources) do
32
+ def users
33
+ sources.flat_map {|source| source.users }
34
+ end
35
+
36
+ def find_scope_id(scope_id)
37
+ users.flat_map.detect {|u| u.scope_id == scope_id }
38
+ end
39
+ end
40
+
41
+ Record = Struct.new(:user, :source) do
42
+ def equivalent?(other_scope_id)
43
+ scope_id == other_scope_id
44
+ end
45
+
46
+ def scope_id
47
+ "#{source.scope}_#{user.send(source.identifier)}"
48
+ end
49
+
50
+ def label
51
+ user.send(source.name)
52
+ end
53
+
54
+ def scope
55
+ source.scope
56
+ end
57
+ end
58
+ end
@@ -1,3 +1,3 @@
1
1
  module SwitchUser
2
- VERSION = "0.9.4"
2
+ VERSION = "0.9.5"
3
3
  end
@@ -0,0 +1,49 @@
1
+ require 'switch_user/data_source'
2
+
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)
8
+
9
+ source.users.should have(2).records
10
+ end
11
+ end
12
+
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])
18
+
19
+ source.users.should == [user, user]
20
+ end
21
+
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])
28
+
29
+ source.find_scope_id("user_10").should == user
30
+ end
31
+ end
32
+ end
33
+
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)
41
+
42
+ record = Record.new(user, source)
43
+
44
+ record.should be_equivalent(id1)
45
+ record.should_not be_equivalent(id2)
46
+ record.should_not be_equivalent(id3)
47
+ end
48
+ end
49
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: switch_user
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.4
4
+ version: 0.9.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Huang
@@ -9,146 +9,146 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-26 00:00:00.000000000 Z
12
+ date: 2014-04-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ! '>='
18
+ - - ">="
19
19
  - !ruby/object:Gem::Version
20
20
  version: '0'
21
21
  type: :development
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - ! '>='
25
+ - - ">="
26
26
  - !ruby/object:Gem::Version
27
27
  version: '0'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: bundler
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - ! '>='
32
+ - - ">="
33
33
  - !ruby/object:Gem::Version
34
34
  version: 1.0.0
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - ! '>='
39
+ - - ">="
40
40
  - !ruby/object:Gem::Version
41
41
  version: 1.0.0
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: actionpack
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - ! '>='
46
+ - - ">="
47
47
  - !ruby/object:Gem::Version
48
48
  version: '0'
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - ! '>='
53
+ - - ">="
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: railties
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - ! '>='
60
+ - - ">="
61
61
  - !ruby/object:Gem::Version
62
62
  version: '0'
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - ! '>='
67
+ - - ">="
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0'
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: rspec-rails
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
- - - ~>
74
+ - - "~>"
75
75
  - !ruby/object:Gem::Version
76
76
  version: 2.11.0
77
77
  type: :development
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
- - - ~>
81
+ - - "~>"
82
82
  - !ruby/object:Gem::Version
83
83
  version: 2.11.0
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: tzinfo
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
- - - ! '>='
88
+ - - ">="
89
89
  - !ruby/object:Gem::Version
90
90
  version: '0'
91
91
  type: :development
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
- - - ! '>='
95
+ - - ">="
96
96
  - !ruby/object:Gem::Version
97
97
  version: '0'
98
98
  - !ruby/object:Gem::Dependency
99
99
  name: sqlite3
100
100
  requirement: !ruby/object:Gem::Requirement
101
101
  requirements:
102
- - - ! '>='
102
+ - - ">="
103
103
  - !ruby/object:Gem::Version
104
104
  version: '0'
105
105
  type: :development
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
108
  requirements:
109
- - - ! '>='
109
+ - - ">="
110
110
  - !ruby/object:Gem::Version
111
111
  version: '0'
112
112
  - !ruby/object:Gem::Dependency
113
113
  name: activerecord
114
114
  requirement: !ruby/object:Gem::Requirement
115
115
  requirements:
116
- - - ! '>='
116
+ - - ">="
117
117
  - !ruby/object:Gem::Version
118
118
  version: '0'
119
119
  type: :development
120
120
  prerelease: false
121
121
  version_requirements: !ruby/object:Gem::Requirement
122
122
  requirements:
123
- - - ! '>='
123
+ - - ">="
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: awesome_print
128
128
  requirement: !ruby/object:Gem::Requirement
129
129
  requirements:
130
- - - ! '>='
130
+ - - ">="
131
131
  - !ruby/object:Gem::Version
132
132
  version: '0'
133
133
  type: :development
134
134
  prerelease: false
135
135
  version_requirements: !ruby/object:Gem::Requirement
136
136
  requirements:
137
- - - ! '>='
137
+ - - ">="
138
138
  - !ruby/object:Gem::Version
139
139
  version: '0'
140
140
  - !ruby/object:Gem::Dependency
141
141
  name: pry
142
142
  requirement: !ruby/object:Gem::Requirement
143
143
  requirements:
144
- - - ! '>='
144
+ - - ">="
145
145
  - !ruby/object:Gem::Version
146
146
  version: '0'
147
147
  type: :development
148
148
  prerelease: false
149
149
  version_requirements: !ruby/object:Gem::Requirement
150
150
  requirements:
151
- - - ! '>='
151
+ - - ">="
152
152
  - !ruby/object:Gem::Version
153
153
  version: '0'
154
154
  description: Easily switch current user to speed up development
@@ -158,8 +158,8 @@ executables: []
158
158
  extensions: []
159
159
  extra_rdoc_files: []
160
160
  files:
161
- - .gitignore
162
- - .rspec
161
+ - ".gitignore"
162
+ - ".rspec"
163
163
  - Gemfile
164
164
  - LICENSE
165
165
  - README.md
@@ -174,6 +174,7 @@ files:
174
174
  - lib/generators/switch_user/install/templates/switch_user.rb
175
175
  - lib/switch_user.rb
176
176
  - lib/switch_user/base_guard.rb
177
+ - lib/switch_user/data_source.rb
177
178
  - lib/switch_user/lambda_guard.rb
178
179
  - lib/switch_user/provider.rb
179
180
  - lib/switch_user/provider/authlogic.rb
@@ -201,6 +202,7 @@ files:
201
202
  - spec/spec_helper.rb
202
203
  - spec/support/application.rb
203
204
  - spec/support/provider.rb
205
+ - spec/switch_user/data_source_spec.rb
204
206
  - spec/switch_user/lambda_guard_spec.rb
205
207
  - spec/switch_user/user_loader_spec.rb
206
208
  - spec/switch_user/user_set_spec.rb
@@ -215,17 +217,17 @@ require_paths:
215
217
  - lib
216
218
  required_ruby_version: !ruby/object:Gem::Requirement
217
219
  requirements:
218
- - - ! '>='
220
+ - - ">="
219
221
  - !ruby/object:Gem::Version
220
222
  version: '0'
221
223
  required_rubygems_version: !ruby/object:Gem::Requirement
222
224
  requirements:
223
- - - ! '>='
225
+ - - ">="
224
226
  - !ruby/object:Gem::Version
225
227
  version: 1.3.6
226
228
  requirements: []
227
229
  rubyforge_project: switch_user
228
- rubygems_version: 2.1.11
230
+ rubygems_version: 2.2.2
229
231
  signing_key:
230
232
  specification_version: 4
231
233
  summary: Easily switch current user to speed up development