g5_authentication_client 0.3.0 → 0.4.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: 475820a142d4fd801168d3e1bc7f5ffca38dd3d1
4
- data.tar.gz: 2992ed1d10a40c9bdfc60d34c635b469150d777a
3
+ metadata.gz: 8f1b72b556d88ccf5d3db877677efbbd8f969c1b
4
+ data.tar.gz: 21a75a23db8b2e8106999de8e481923701fd9fad
5
5
  SHA512:
6
- metadata.gz: 810219c6c6824c08aa6fd4b0499606ce94c4fdc70ccd00594b2f8649888946acdced45f6fcd19c76c449a1732f9b36eefc24c5071c831b3bdea325d1a5668a5d
7
- data.tar.gz: e114437fc35c187dcc121ef0d39cb5d58eface8ab734f08ab5715a7e06f5f60257892253a6d7431f956820ea1d3b06e6344668a8c7a60b6b358f0fe0e3d92717
6
+ metadata.gz: 5eb630f56608ad0dda5705d63ee64c9cba567621220c37b7459239c7755d9b4ee3c2bcb12bc36919ee05653ed8073e644773604684f784c662ac3b38a5bfb27a
7
+ data.tar.gz: b216905352a09469399fa36194e8973cca41a22cb715d810a64af6792b66d75e74469119c4cb2cfcbe325ff1d5c579c42fcf84bd69439b4cc15238ad1afafcd7
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.1.2
1
+ 2.1.6
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ - 2.1.6
5
+ - 2.2.2
6
+ script:
7
+ - bundle exec rspec spec
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## v0.4.0 (2015-05-20)
2
+
3
+ * Add `G5AuthenticationClient::Client#list_roles`, a new
4
+ `G5AuthenticationClient::Role` model, and support for retrieving/updating
5
+ roles in the user data
6
+ ([#23](https://github.com/G5/g5_authentication_client/pull/23))
7
+
1
8
  ## v0.3.0 (2015-01-08)
2
9
 
3
10
  * Add `G5AuthenticationClient::Client#list_users`
@@ -14,7 +21,7 @@
14
21
  ## v0.1.5 (2014-03-07)
15
22
 
16
23
  * Add `allow_password_credentials` flag to determine whether client instances
17
- * will allow use of username/passwored attributes
24
+ will allow use of username/passwored attributes
18
25
 
19
26
  ## v0.1.4 (2014-03-06)
20
27
 
data/README.md CHANGED
@@ -4,7 +4,7 @@ A client library for the g5-authentication service.
4
4
 
5
5
  ## Current version ##
6
6
 
7
- 0.3.0
7
+ 0.4.0
8
8
 
9
9
  ## Requirements ##
10
10
 
@@ -206,6 +206,28 @@ auth_client.sign_out_url('https://myapp.host/callback')
206
206
  # => "https://auth.g5search.com/users/sign_out?redirect_url=https%3A%2F%2Fmyapp.host%2Fcallback"
207
207
  ```
208
208
 
209
+ ### Retrieving user roles ###
210
+
211
+ A user's assigned roles will be included automatically when you retrieve user
212
+ data via `get_user` or `list_users`.
213
+
214
+ To retrieve a list of all roles (to which you have access) in the G5 auth
215
+ service:
216
+
217
+ ```ruby
218
+ auth_client = G5AuthenticationClient::Client.new(access_token: 'my_access_token')
219
+ auth_client.list_roles
220
+ # => [#<G5AuthenticationClient::Role id=3 name="editor">, #<G5AuthenticationClient::Role id=4 name="viewer">, ...]
221
+ ```
222
+
223
+ To retrieve information about a particular role:
224
+
225
+ ```ruby
226
+ auth_client = G5AuthenticationClient::Client.new(access_token: 'my_access_token')
227
+ auth_client.get_role(4)
228
+ # => #<G5AuthenticationClient::Role id=4 name="viewer">
229
+ ```
230
+
209
231
  ## Examples ##
210
232
 
211
233
  These examples assume that you have already registered your client application
@@ -3,6 +3,7 @@ require 'g5_authentication_client/version'
3
3
  require 'g5_authentication_client/configuration'
4
4
  require 'g5_authentication_client/user'
5
5
  require 'g5_authentication_client/token_info'
6
+ require 'g5_authentication_client/role'
6
7
 
7
8
  module G5AuthenticationClient
8
9
  extend Configuration
@@ -176,6 +176,13 @@ module G5AuthenticationClient
176
176
  response.parsed.collect { |parsed_user| User.new(parsed_user) }
177
177
  end
178
178
 
179
+ # Return all user roles from the remote service
180
+ # @return [Array<G5AuthenticationClient::Role>]
181
+ def list_roles
182
+ response = oauth_access_token.get('/v1/roles')
183
+ response.parsed.collect { |parsed_role| Role.new(parsed_role) }
184
+ end
185
+
179
186
  private
180
187
 
181
188
  def user_hash(h)
@@ -0,0 +1,13 @@
1
+ require 'modelish'
2
+
3
+ module G5AuthenticationClient
4
+ # G5 Authentication user role info
5
+ class Role < Modelish::Base
6
+ ignore_unknown_properties!
7
+
8
+ # @!attribute [rw] name
9
+ # @return [String]
10
+ # The name associated with this user role
11
+ property :name, type: String, required: true
12
+ end
13
+ end
@@ -1,4 +1,5 @@
1
1
  require 'modelish'
2
+ require 'g5_authentication_client/role'
2
3
 
3
4
  module G5AuthenticationClient
4
5
 
@@ -50,10 +51,16 @@ module G5AuthenticationClient
50
51
  # The user's phone number. Not required to create a user.
51
52
  property :phone_number, type: String
52
53
 
54
+ # @!attribute [rw] roles
55
+ # @return [Array<G5AuthenticationClient::Role>]
56
+ # The user's roles. Not required to create a user.
57
+ property :roles, default: [],
58
+ type: proc { |val| val.map { |r| Role.new(r) } },
59
+ validator: proc { |val| "User roles must be valid" if val && val.detect { |r| !r.valid? } }
60
+
53
61
  def validate_for_create!
54
62
  validate!
55
63
  raise ArgumentError.new("Password required for new user.") unless !password.nil?
56
64
  end
57
-
58
65
  end
59
66
  end
@@ -1,3 +1,3 @@
1
1
  module G5AuthenticationClient
2
- VERSION = '0.3.0'
2
+ VERSION = '0.4.0'
3
3
  end
@@ -42,7 +42,8 @@ describe G5AuthenticationClient::Client do
42
42
  let(:new_user_options) do
43
43
  {email: email,
44
44
  password: "#{password}x",
45
- id: user_id}
45
+ id: user_id,
46
+ roles: [{name: role_name}]}
46
47
  end
47
48
 
48
49
  let(:new_user_request) do
@@ -54,14 +55,17 @@ describe G5AuthenticationClient::Client do
54
55
  "password"=>"#{password}x",
55
56
  "password_confirmation"=>"",
56
57
  "phone_number"=>"",
57
- "title"=>""
58
+ "title"=>"",
59
+ "roles"=>["name"=>role_name]
58
60
  }
59
61
  end
60
62
 
61
63
  let(:email){'foo@blah.com'}
62
64
  let(:password){'mybigtestpasswored'}
63
65
  let(:user_id){1}
64
- let(:returned_user){{id: user_id,email: email}}
66
+ let(:role_name) { 'my_role' }
67
+ let(:returned_user){{id: user_id,email: email,roles:[returned_role]}}
68
+ let(:returned_role) { {'name' => role_name} }
65
69
 
66
70
  context 'with default configuration' do
67
71
  subject(:client) { G5AuthenticationClient::Client.new }
@@ -444,4 +448,26 @@ describe G5AuthenticationClient::Client do
444
448
  it_should_behave_like 'an oauth protected resource', G5AuthenticationClient::User
445
449
  end
446
450
  end
451
+
452
+ describe '#list_roles' do
453
+ subject(:list_roles) { client.list_roles }
454
+
455
+ before do
456
+ stub_request(:get, /#{endpoint}\/v1\/roles/).
457
+ with(headers: {'Authorization' => auth_header_value}).
458
+ to_return(status: 200,
459
+ body: [returned_role].to_json,
460
+ headers: {'Content-Type' => 'application/json'})
461
+ end
462
+
463
+ it 'should return one role' do
464
+ expect(list_roles.size).to eq(1)
465
+ end
466
+
467
+ describe 'the first role' do
468
+ subject(:role) { list_roles.first }
469
+
470
+ it_should_behave_like 'an oauth protected resource', G5AuthenticationClient::Role
471
+ end
472
+ end
447
473
  end
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+
3
+ describe G5AuthenticationClient::Role do
4
+ subject(:role) { G5AuthenticationClient::Role.new(attributes) }
5
+
6
+ let(:attributes) { {name: name} }
7
+ let(:name) { 'awesome_role' }
8
+
9
+ context 'with default initialization' do
10
+ let(:attributes) {}
11
+
12
+ it 'should have a nil name' do
13
+ expect(role.name).to be_nil
14
+ end
15
+ end
16
+
17
+ context 'with full initialization' do
18
+ it 'should have the correct name' do
19
+ expect(role.name).to eq(name)
20
+ end
21
+ end
22
+
23
+ context 'when attributes include unknown properties' do
24
+ let(:attributes) { {name: name, resource: 'Application'} }
25
+
26
+ it 'should not raise an error' do
27
+ expect { role }.to_not raise_error
28
+ end
29
+
30
+ it 'should have the correct name' do
31
+ expect(role.name).to eq(name)
32
+ end
33
+
34
+ it 'should ignore the unknown attribute' do
35
+ expect(role).to_not respond_to(:resource)
36
+ end
37
+ end
38
+
39
+ describe '#validate!' do
40
+ subject(:validate!) { role.validate! }
41
+
42
+ context 'when all attributes are set' do
43
+ it 'should not raise an error' do
44
+ expect { validate! }.to_not raise_error
45
+ end
46
+ end
47
+
48
+ context 'when name is not set' do
49
+ let(:name) {}
50
+
51
+ it 'should raise an error' do
52
+ expect { validate! }.to raise_error
53
+ end
54
+ end
55
+ end
56
+
57
+ describe '#to_hash' do
58
+ subject(:hash) { role.to_hash }
59
+
60
+ it 'should have the correct name' do
61
+ expect(hash['name']).to eq(name)
62
+ end
63
+ end
64
+ end
@@ -12,7 +12,8 @@ describe G5AuthenticationClient::User do
12
12
  last_name: last_name,
13
13
  title: title,
14
14
  organization_name: organization_name,
15
- phone_number: phone_number
15
+ phone_number: phone_number,
16
+ roles: [{name: role_name}]
16
17
  }
17
18
  end
18
19
 
@@ -25,6 +26,7 @@ describe G5AuthenticationClient::User do
25
26
  let(:organization_name) { 'Things, Inc.' }
26
27
  let(:phone_number) { '8675309123' }
27
28
  let(:title) { 'Developer' }
29
+ let(:role_name) { 'Editor' }
28
30
 
29
31
  context 'with default initialization' do
30
32
  let(:attributes){}
@@ -44,10 +46,13 @@ describe G5AuthenticationClient::User do
44
46
  it 'should have nil password_confirmation' do
45
47
  expect(user.password_confirmation).to be_nil
46
48
  end
49
+
50
+ it 'should have empty roles' do
51
+ expect(user.roles).to be_empty
52
+ end
47
53
  end
48
54
 
49
55
  context 'with full initialization' do
50
-
51
56
  it 'should have correct email' do
52
57
  expect(user.email).to eq(email)
53
58
  end
@@ -83,6 +88,14 @@ describe G5AuthenticationClient::User do
83
88
  it 'should have correct organization_name' do
84
89
  expect(user.organization_name).to eq(organization_name)
85
90
  end
91
+
92
+ it 'should have the correct number of roles' do
93
+ expect(user.roles.size).to eq(attributes[:roles].size)
94
+ end
95
+
96
+ it 'should have the correct role name' do
97
+ expect(user.roles.first.name).to eq(role_name)
98
+ end
86
99
  end
87
100
 
88
101
  describe '#validate!' do
@@ -159,6 +172,22 @@ describe G5AuthenticationClient::User do
159
172
  expect { validate! }.to_not raise_error
160
173
  end
161
174
  end
175
+
176
+ context 'without roles' do
177
+ let(:roles) {}
178
+
179
+ it 'should not raise an error' do
180
+ expect { validate! }.to_not raise_error
181
+ end
182
+ end
183
+
184
+ context 'with invalid roles' do
185
+ let(:role_name) {}
186
+
187
+ it 'should raise an error' do
188
+ expect { validate! }.to raise_error
189
+ end
190
+ end
162
191
  end
163
192
 
164
193
  describe '#validate_for_create!' do
@@ -212,5 +241,9 @@ describe G5AuthenticationClient::User do
212
241
  it 'should have an id' do
213
242
  expect(to_hash['id']).to eq(id)
214
243
  end
244
+
245
+ it 'should have roles' do
246
+ expect(to_hash['roles']).to eq([{'name' => role_name}])
247
+ end
215
248
  end
216
249
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: g5_authentication_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob Revels
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-01-08 00:00:00.000000000 Z
12
+ date: 2015-05-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: modelish
@@ -204,6 +204,7 @@ files:
204
204
  - ".gitignore"
205
205
  - ".rspec"
206
206
  - ".ruby-version"
207
+ - ".travis.yml"
207
208
  - CHANGELOG.md
208
209
  - Gemfile
209
210
  - LICENSE
@@ -213,11 +214,13 @@ files:
213
214
  - lib/g5_authentication_client.rb
214
215
  - lib/g5_authentication_client/client.rb
215
216
  - lib/g5_authentication_client/configuration.rb
217
+ - lib/g5_authentication_client/role.rb
216
218
  - lib/g5_authentication_client/token_info.rb
217
219
  - lib/g5_authentication_client/user.rb
218
220
  - lib/g5_authentication_client/version.rb
219
221
  - spec/g5_authentication_client/client_spec.rb
220
222
  - spec/g5_authentication_client/configuration_spec.rb
223
+ - spec/g5_authentication_client/role_spec.rb
221
224
  - spec/g5_authentication_client/token_info_spec.rb
222
225
  - spec/g5_authentication_client/user_spec.rb
223
226
  - spec/g5_authentication_client_spec.rb
@@ -243,7 +246,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
243
246
  version: '0'
244
247
  requirements: []
245
248
  rubyforge_project: g5_authentication_client
246
- rubygems_version: 2.2.2
249
+ rubygems_version: 2.2.3
247
250
  signing_key:
248
251
  specification_version: 4
249
252
  summary: Client for the G5 Auth service