signet 0.8.1 → 0.9.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
- SHA1:
3
- metadata.gz: f858d637b4719f2d27e40d16e8c689d93b3d3d65
4
- data.tar.gz: 7ccf68a7582ddde1819df1c2aa9d6a439682801d
2
+ SHA256:
3
+ metadata.gz: a9d9e93e57fb53fc7a45b67134f7974e11f15b5c7ea0c6807f0a4cd068964a51
4
+ data.tar.gz: b9a0806442f9e6fc2a6b68fa8e4e247125dd029335a2a729bdfd8fcc73a7cf96
5
5
  SHA512:
6
- metadata.gz: 2c43038b3e32e0fd3deeae112f5e3662feed641d5b0b90f79715a7caf69cad1075d71ebfb8bf9b5fc5bcd1ea409bf766131eedc081fb6808801e71aee94fe417
7
- data.tar.gz: 104297c55f4719756ade6ddca8e04276f22ceb338e0071b1d9e187d2dbe829ef1e2c5628b017450127fcd357f12e4304da4b17500b865d4026d9731c058b5e3e
6
+ metadata.gz: 7655de7dfd4f1cec0bc59ea8347188ba36181735007b9dfd9a3d8daa70ee5db7804d03bbdc89a57ddfdfe53b6e0a56fa75d7b7f13d40419a7620e2e39731cda7
7
+ data.tar.gz: fa9fbc85f62b104703192145af6512053b53e75508e1d0b813cd43e0e10728113617baf93e31e4338128fea998810a0f0228ab8b51d53aeb5ef7496bdcda16ff
@@ -1,3 +1,9 @@
1
+ ## 0.9.0 (2018-08-16)
2
+ * Add RemoteServerError class for 5xx level errors.
3
+ * Allow to_json to be called with arguments
4
+ * Expires_in now sets and reflects current expires_at value
5
+ * Expires_within(0) now returns false when expires_at is nil.
6
+
1
7
  ## 0.8.1 (2017-10-13)
2
8
 
3
9
  * Restore support for Ruby 1.9.3
data/README.md CHANGED
@@ -7,8 +7,8 @@
7
7
  <dt>License</dt><dd>Apache 2.0</dd>
8
8
  </dl>
9
9
 
10
+ [![Gem Version](https://badge.fury.io/rb/signet.svg)](https://badge.fury.io/rb/signet)
10
11
  [![Build Status](https://secure.travis-ci.org/google/signet.png)](http://travis-ci.org/google/signet)
11
- [![Dependency Status](https://gemnasium.com/google/signet.png)](https://gemnasium.com/google/signet)
12
12
 
13
13
  ## Description
14
14
 
@@ -31,7 +31,7 @@ Signet is an OAuth 1.0 / OAuth 2.0 implementation.
31
31
  require 'signet/oauth_2/client'
32
32
  client = Signet::OAuth2::Client.new(
33
33
  :authorization_uri => 'https://accounts.google.com/o/oauth2/auth',
34
- :token_credential_uri => 'https://www.googleapis.com/oauth2/v3/token',
34
+ :token_credential_uri => 'https://oauth2.googleapis.com/token',
35
35
  :client_id => '44410190108-74nkm6jc5e3vvjqis803frkvmu88cu3a.apps.googleusercontent.com',
36
36
  :client_secret => 'X1NUhvO-rQr9sm8uUSMY8i7v',
37
37
  :scope => 'email profile',
@@ -33,6 +33,12 @@ module Signet
33
33
  class MalformedAuthorizationError < StandardError
34
34
  end
35
35
 
36
+ ##
37
+ # An error indicating that the server failed at processing the request
38
+ # due to a internal error
39
+ class RemoteServerError < StandardError
40
+ end
41
+
36
42
  ##
37
43
  # An error indicating the remote server refused to authorize the client.
38
44
  class AuthorizationError < StandardError
@@ -95,7 +95,6 @@ module Signet
95
95
  @client_secret = nil
96
96
  @code = nil
97
97
  @expires_at = nil
98
- @expires_in = nil
99
98
  @issued_at = nil
100
99
  @issuer = nil
101
100
  @password = nil
@@ -723,32 +722,37 @@ module Signet
723
722
 
724
723
  ##
725
724
  # Returns the lifetime of the access token in seconds.
725
+ # Returns nil if the token does not expire.
726
726
  #
727
- # @return [Integer] The access token lifetime.
727
+ # @return [Integer, nil] The access token lifetime.
728
728
  def expires_in
729
- return @expires_in
729
+ if @expires_at.nil? || @issued_at.nil?
730
+ nil
731
+ else
732
+ (@expires_at - @issued_at).to_i
733
+ end
730
734
  end
731
735
 
732
736
  ##
733
- # Sets the lifetime of the access token in seconds. Resets the issued
734
- # timestamp.
737
+ # Sets the lifetime of the access token in seconds. Resets the issued_at
738
+ # timestamp. Nil values will be treated as though the token does
739
+ # not expire.
735
740
  #
736
- # @param [String, Integer] new_expires_in
741
+ # @param [String, Integer, nil] new_expires_in
737
742
  # The access token lifetime.
738
743
  def expires_in=(new_expires_in)
739
744
  if new_expires_in != nil
740
- @expires_in = new_expires_in.to_i
741
745
  @issued_at = Time.now
746
+ @expires_at = @issued_at + new_expires_in.to_i
742
747
  else
743
- @expires_in, @issued_at = nil, nil
748
+ @expires_at, @issued_at = nil, nil
744
749
  end
745
- @expires_at = nil
746
750
  end
747
751
 
748
752
  ##
749
753
  # Returns the timestamp the access token was issued at.
750
754
  #
751
- # @return [Time] The access token issuance time.
755
+ # @return [Time, nil] The access token issuance time.
752
756
  def issued_at
753
757
  return @issued_at
754
758
  end
@@ -764,29 +768,26 @@ module Signet
764
768
 
765
769
  ##
766
770
  # Returns the timestamp the access token will expire at.
771
+ # Returns nil if the token does not expire.
767
772
  #
768
- # @return [Time] The access token lifetime.
773
+ # @return [Time, nil] The access token lifetime.
769
774
  def expires_at
770
- if @expires_at
771
- @expires_at
772
- elsif @issued_at && @expires_in
773
- return @issued_at + @expires_in
774
- else
775
- return nil
776
- end
775
+ @expires_at
777
776
  end
778
777
 
779
778
  ##
780
779
  # Limits the lifetime of the access token as number of seconds since
781
- # the Epoch
782
- # @param [String,Integer,Time] new_expires_at
783
- # The access token issuance time.
780
+ # the Epoch. Nil values will be treated as though the token does
781
+ # not expire.
782
+ # @param [String,Integer,Time, nil] new_expires_at
783
+ # The access token expiration time.
784
784
  def expires_at=(new_expires_at)
785
- @expires_at = normalize_timestamp(new_expires_at)
785
+ @expires_at = normalize_timestamp new_expires_at
786
786
  end
787
787
 
788
788
  ##
789
789
  # Returns true if the access token has expired.
790
+ # Returns false if the token has not expired or has an nil @expires_at.
790
791
  #
791
792
  # @return [TrueClass, FalseClass]
792
793
  # The expiration state of the access token.
@@ -796,7 +797,7 @@ module Signet
796
797
 
797
798
  ##
798
799
  # Returns true if the access token has expired or expires within
799
- # the next n seconds
800
+ # the next n seconds. Returns false for tokens with a nil @expires_at.
800
801
  #
801
802
  # @param [Integer] sec
802
803
  # Max number of seconds from now where a token is still considered
@@ -804,7 +805,7 @@ module Signet
804
805
  # @return [TrueClass, FalseClass]
805
806
  # The expiration state of the access token.
806
807
  def expires_within?(sec)
807
- return self.expires_at.nil? || Time.now >= (self.expires_at - sec)
808
+ return self.expires_at != nil && Time.now >= (self.expires_at - sec)
808
809
  end
809
810
 
810
811
  ##
@@ -817,7 +818,7 @@ module Signet
817
818
  @password = nil
818
819
  @code = nil
819
820
  @issued_at = nil
820
- @expires_in = nil
821
+ @expires_at = nil
821
822
  end
822
823
 
823
824
 
@@ -883,7 +884,7 @@ module Signet
883
884
  # @note A serialized client contains sensitive information. Persist or transmit with care.
884
885
  #
885
886
  # @return [String] A serialized JSON representation of the client.
886
- def to_json
887
+ def to_json(*)
887
888
  return MultiJson.dump({
888
889
  'authorization_uri' => self.authorization_uri ? self.authorization_uri.to_s : nil,
889
890
  'token_credential_uri' => self.token_credential_uri ? self.token_credential_uri.to_s : nil,
@@ -988,6 +989,12 @@ module Signet
988
989
  raise ::Signet::AuthorizationError.new(
989
990
  message, :response => response
990
991
  )
992
+ elsif status.to_s[0] == "5"
993
+ message = 'Remote server error.'
994
+ if body.to_s.strip.length > 0
995
+ message += " Server message:\n#{response.body.to_s.strip}"
996
+ end
997
+ raise ::Signet::RemoteServerError.new(message)
991
998
  else
992
999
  message = "Unexpected status code: #{response.status}."
993
1000
  if body.to_s.strip.length > 0
@@ -1000,8 +1007,6 @@ module Signet
1000
1007
  end
1001
1008
 
1002
1009
  def fetch_access_token!(options={})
1003
- options = deep_hash_normalize(options)
1004
-
1005
1010
  token_hash = self.fetch_access_token(options)
1006
1011
  if token_hash
1007
1012
  # No-op for grant types other than `authorization_code`.
@@ -1017,8 +1022,6 @@ module Signet
1017
1022
  ##
1018
1023
  # Refresh the access token, if possible
1019
1024
  def refresh!(options={})
1020
- options = deep_hash_normalize(options)
1021
-
1022
1025
  self.fetch_access_token!(options)
1023
1026
  end
1024
1027
 
@@ -17,8 +17,8 @@ unless defined? Signet::VERSION
17
17
  module Signet
18
18
  module VERSION
19
19
  MAJOR = 0
20
- MINOR = 8
21
- TINY = 1
20
+ MINOR = 9
21
+ TINY = 0
22
22
  PRE = nil
23
23
 
24
24
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
@@ -29,8 +29,8 @@ Gem::Specification.new do |s|
29
29
  s.add_runtime_dependency 'multi_json', '~> 1.10'
30
30
  s.add_runtime_dependency 'jwt', '>= 1.5', '< 3.0'
31
31
 
32
- s.add_development_dependency 'rake', '~> 10.0'
33
- s.add_development_dependency 'yard', '~> 0.8'
32
+ s.add_development_dependency 'rake', '~> 12.0'
33
+ s.add_development_dependency 'yard', '~> 0.9', '>= 0.9.12'
34
34
  s.add_development_dependency 'rspec', '~> 3.1'
35
35
  s.add_development_dependency 'launchy', '~> 2.4'
36
36
  s.add_development_dependency 'kramdown', '~> 1.5'
@@ -187,10 +187,10 @@ describe Signet::OAuth2::Client, 'configured for assertions profile' do
187
187
  @key = OpenSSL::PKey::RSA.new 2048
188
188
  @client = Signet::OAuth2::Client.new(
189
189
  :token_credential_uri =>
190
- 'https://accounts.google.com/o/oauth2/token',
190
+ 'https://oauth2.googleapis.com/token',
191
191
  :scope => 'https://www.googleapis.com/auth/userinfo.profile',
192
192
  :issuer => 'app@example.com',
193
- :audience => 'https://accounts.google.com/o/oauth2/token',
193
+ :audience => 'https://oauth2.googleapis.com/token',
194
194
  :signing_key => @key
195
195
  )
196
196
  end
@@ -202,7 +202,7 @@ describe Signet::OAuth2::Client, 'configured for assertions profile' do
202
202
  claim, header = JWT.decode(jwt, @key.public_key, true, algorithm: 'RS256')
203
203
  expect(claim["iss"]).to eq 'app@example.com'
204
204
  expect(claim["scope"]).to eq 'https://www.googleapis.com/auth/userinfo.profile'
205
- expect(claim["aud"]).to eq 'https://accounts.google.com/o/oauth2/token'
205
+ expect(claim["aud"]).to eq 'https://oauth2.googleapis.com/token'
206
206
  end
207
207
 
208
208
  it 'should generate valid JWTs for impersonation' do
@@ -214,7 +214,7 @@ describe Signet::OAuth2::Client, 'configured for assertions profile' do
214
214
  expect(claim["iss"]).to eq 'app@example.com'
215
215
  expect(claim["prn"]).to eq 'user@example.com'
216
216
  expect(claim["scope"]).to eq 'https://www.googleapis.com/auth/userinfo.profile'
217
- expect(claim["aud"]).to eq 'https://accounts.google.com/o/oauth2/token'
217
+ expect(claim["aud"]).to eq 'https://oauth2.googleapis.com/token'
218
218
  end
219
219
 
220
220
  it 'should generate valid JWTs for impersonation using deprecated person attribute' do
@@ -226,7 +226,7 @@ describe Signet::OAuth2::Client, 'configured for assertions profile' do
226
226
  expect(claim["iss"]).to eq 'app@example.com'
227
227
  expect(claim["prn"]).to eq 'user@example.com'
228
228
  expect(claim["scope"]).to eq 'https://www.googleapis.com/auth/userinfo.profile'
229
- expect(claim["aud"]).to eq 'https://accounts.google.com/o/oauth2/token'
229
+ expect(claim["aud"]).to eq 'https://oauth2.googleapis.com/token'
230
230
  end
231
231
 
232
232
  it 'should generate valid JWTs for impersonation using the sub attribute' do
@@ -238,7 +238,7 @@ describe Signet::OAuth2::Client, 'configured for assertions profile' do
238
238
  expect(claim["iss"]).to eq 'app@example.com'
239
239
  expect(claim["sub"]).to eq 'user@example.com'
240
240
  expect(claim["scope"]).to eq 'https://www.googleapis.com/auth/userinfo.profile'
241
- expect(claim["aud"]).to eq 'https://accounts.google.com/o/oauth2/token'
241
+ expect(claim["aud"]).to eq 'https://oauth2.googleapis.com/token'
242
242
  end
243
243
 
244
244
  it 'should generate a JSON representation of the client' do
@@ -247,16 +247,16 @@ describe Signet::OAuth2::Client, 'configured for assertions profile' do
247
247
  expect(json).not_to be_nil
248
248
 
249
249
  deserialized = MultiJson.load(json)
250
- expect(deserialized["token_credential_uri"]).to eq 'https://accounts.google.com/o/oauth2/token'
250
+ expect(deserialized["token_credential_uri"]).to eq 'https://oauth2.googleapis.com/token'
251
251
  expect(deserialized["scope"]).to eq ['https://www.googleapis.com/auth/userinfo.profile']
252
252
  expect(deserialized["issuer"]).to eq 'app@example.com'
253
- expect(deserialized["audience"]).to eq 'https://accounts.google.com/o/oauth2/token'
253
+ expect(deserialized["audience"]).to eq 'https://oauth2.googleapis.com/token'
254
254
  expect(deserialized["signing_key"]).to eq @key.to_s
255
255
  end
256
256
 
257
257
  it 'should send valid access token request' do
258
258
  stubs = Faraday::Adapter::Test::Stubs.new do |stub|
259
- stub.post('/o/oauth2/token') do |env|
259
+ stub.post('/token') do |env|
260
260
  params = Addressable::URI.form_unencode(env[:body])
261
261
  claim, header = JWT.decode(params.assoc("assertion").last, @key.public_key, true, algorithm: 'RS256')
262
262
  expect(params.assoc("grant_type")).to eq ['grant_type','urn:ietf:params:oauth:grant-type:jwt-bearer']
@@ -282,10 +282,10 @@ describe Signet::OAuth2::Client, 'configured for assertions profile' do
282
282
  @key = 'my secret key'
283
283
  @client = Signet::OAuth2::Client.new(
284
284
  :token_credential_uri =>
285
- 'https://accounts.google.com/o/oauth2/token',
285
+ 'https://oauth2.googleapis.com/token',
286
286
  :scope => 'https://www.googleapis.com/auth/userinfo.profile',
287
287
  :issuer => 'app@example.com',
288
- :audience => 'https://accounts.google.com/o/oauth2/token',
288
+ :audience => 'https://oauth2.googleapis.com/token',
289
289
  :signing_key => @key
290
290
  )
291
291
  end
@@ -297,7 +297,7 @@ describe Signet::OAuth2::Client, 'configured for assertions profile' do
297
297
  claim, header = JWT.decode(jwt, @key, true, algorithm: 'HS256')
298
298
  expect(claim["iss"]).to eq 'app@example.com'
299
299
  expect(claim["scope"]).to eq 'https://www.googleapis.com/auth/userinfo.profile'
300
- expect(claim["aud"]).to eq 'https://accounts.google.com/o/oauth2/token'
300
+ expect(claim["aud"]).to eq 'https://oauth2.googleapis.com/token'
301
301
  end
302
302
  end
303
303
  end
@@ -308,7 +308,7 @@ describe Signet::OAuth2::Client, 'configured for Google userinfo API' do
308
308
  :authorization_uri =>
309
309
  'https://accounts.google.com/o/oauth2/auth',
310
310
  :token_credential_uri =>
311
- 'https://accounts.google.com/o/oauth2/token',
311
+ 'https://oauth2.googleapis.com/token',
312
312
  :scope => 'https://www.googleapis.com/auth/userinfo.profile'
313
313
  )
314
314
  end
@@ -442,9 +442,38 @@ describe Signet::OAuth2::Client, 'configured for Google userinfo API' do
442
442
  expect(@client).to_not be_expired
443
443
  end
444
444
 
445
- it 'should indicate the token is expired if expired_at nil' do
445
+ it 'should set expires_in when expires_at is set' do
446
+ issued_at = Time.now
447
+ expires_at = Time.now+100
448
+ @client.expires_at = expires_at.to_i
449
+ @client.issued_at = issued_at
450
+ expect(@client.expires_in).to be_within(1).of (expires_at - issued_at).to_i
446
451
  @client.expires_at = nil
447
- expect(@client.expires_within?(60)).to be true
452
+ expect(@client.expires_in).to be_nil
453
+ end
454
+
455
+ it 'should set expires_in to nil when expires_at is set to nil' do
456
+ @client.expires_at = nil
457
+ expect(@client.expires_in).to be_nil
458
+ end
459
+
460
+ it 'should set expires_at when expires_in is set' do
461
+ expires_in = 100
462
+ @client.expires_in = expires_in
463
+ expect(@client.expires_at).to eq (@client.issued_at + expires_in)
464
+ @client.expires_in = nil
465
+ expect(@client.expires_at).to be_nil
466
+ end
467
+
468
+ it 'should set expires_at to nil when expires_in is set to nil' do
469
+ @client.expires_in = nil
470
+ expect(@client.expires_at).to be_nil
471
+ end
472
+
473
+ it 'should indicate the token is not expired if expired_at nil' do
474
+ @client.expires_at = nil
475
+ expect(@client.expires_within?(60)).to be false
476
+ expect(@client.expired?).to be false
448
477
  end
449
478
 
450
479
  it 'should indicate the token is not expiring when expiry beyond window' do
@@ -478,7 +507,7 @@ describe Signet::OAuth2::Client, 'configured for Google userinfo API' do
478
507
  @client.client_id = 'client-12345'
479
508
  @client.client_secret = 'secret-12345'
480
509
  stubs = Faraday::Adapter::Test::Stubs.new do |stub|
481
- stub.post('/o/oauth2/token') do
510
+ stub.post('/token') do
482
511
  [401, {}, 'User authorization failed or something.']
483
512
  end
484
513
  end
@@ -493,14 +522,33 @@ describe Signet::OAuth2::Client, 'configured for Google userinfo API' do
493
522
  stubs.verify_stubbed_calls
494
523
  end
495
524
 
496
- it 'should raise an error if the token server gives an unexpected status' do
525
+ it 'should raise a remote server error if the server gives a 5xx status' do
497
526
  @client.client_id = 'client-12345'
498
527
  @client.client_secret = 'secret-12345'
499
528
  stubs = Faraday::Adapter::Test::Stubs.new do |stub|
500
- stub.post('/o/oauth2/token') do
529
+ stub.post('/token') do
501
530
  [509, {}, 'Rate limit hit or something.']
502
531
  end
503
532
  end
533
+ expect(lambda do
534
+ connection = Faraday.new(:url => 'https://www.google.com') do |builder|
535
+ builder.adapter(:test, stubs)
536
+ end
537
+ @client.fetch_access_token!(
538
+ :connection => connection
539
+ )
540
+ end).to raise_error(Signet::RemoteServerError)
541
+ stubs.verify_stubbed_calls
542
+ end
543
+
544
+ it 'should raise an error if the token server gives an unexpected status' do
545
+ @client.client_id = 'client-12345'
546
+ @client.client_secret = 'secret-12345'
547
+ stubs = Faraday::Adapter::Test::Stubs.new do |stub|
548
+ stub.post('/token') do
549
+ [309, {}, 'Rate limit hit or something.']
550
+ end
551
+ end
504
552
  expect(lambda do
505
553
  connection = Faraday.new(:url => 'https://www.google.com') do |builder|
506
554
  builder.adapter(:test, stubs)
@@ -518,7 +566,7 @@ describe Signet::OAuth2::Client, 'configured for Google userinfo API' do
518
566
  @client.code = '00000'
519
567
  @client.redirect_uri = 'https://www.example.com/'
520
568
  stubs = Faraday::Adapter::Test::Stubs.new do |stub|
521
- stub.post('/o/oauth2/token') do
569
+ stub.post('/token') do
522
570
  build_json_response({
523
571
  'access_token' => '12345',
524
572
  'refresh_token' => '54321',
@@ -544,7 +592,7 @@ describe Signet::OAuth2::Client, 'configured for Google userinfo API' do
544
592
  @client.username = 'johndoe'
545
593
  @client.password = 'incognito'
546
594
  stubs = Faraday::Adapter::Test::Stubs.new do |stub|
547
- stub.post('/o/oauth2/token') do
595
+ stub.post('/token') do
548
596
  build_json_response({
549
597
  'access_token' => '12345',
550
598
  'refresh_token' => '54321',
@@ -569,7 +617,7 @@ describe Signet::OAuth2::Client, 'configured for Google userinfo API' do
569
617
  @client.client_secret = 'secret-12345'
570
618
  @client.refresh_token = '54321'
571
619
  stubs = Faraday::Adapter::Test::Stubs.new do |stub|
572
- stub.post('/o/oauth2/token') do
620
+ stub.post('/token') do
573
621
  build_json_response({
574
622
  'access_token' => '12345',
575
623
  'refresh_token' => '54321',
@@ -755,7 +803,7 @@ JSON
755
803
  @client.client_id = 'client-12345'
756
804
  @client.client_secret = 'secret-12345'
757
805
  stubs = Faraday::Adapter::Test::Stubs.new do |stub|
758
- stub.post('/o/oauth2/token') do
806
+ stub.post('/token') do
759
807
  build_json_response({
760
808
  'access_token' => '12345',
761
809
  'refresh_token' => '54321',
@@ -796,7 +844,7 @@ JSON
796
844
  @client.client_id = 'client-54321'
797
845
  @client.client_secret = 'secret-12345'
798
846
  stubs = Faraday::Adapter::Test::Stubs.new do |stub|
799
- stub.post('/o/oauth2/token') do
847
+ stub.post('/token') do
800
848
  build_json_response({
801
849
  'access_token' => '12345',
802
850
  'refresh_token' => '54321',
@@ -831,7 +879,7 @@ JSON
831
879
  @client.client_id = 'client-12345'
832
880
  @client.client_secret = 'secret-12345'
833
881
  stubs = Faraday::Adapter::Test::Stubs.new do |stub|
834
- stub.post('/o/oauth2/token') do
882
+ stub.post('/token') do
835
883
  build_json_response({
836
884
  'access_token' => '12345',
837
885
  'refresh_token' => '54321',
@@ -861,11 +909,11 @@ JSON
861
909
  end
862
910
 
863
911
  it 'should raise an error if the id token cannot be verified' do
864
- pending "Need to update test data"
912
+ pending "Need to set test data"
865
913
  @client.client_id = 'client-12345'
866
914
  @client.client_secret = 'secret-12345'
867
915
  stubs = Faraday::Adapter::Test::Stubs.new do |stub|
868
- stub.post('/o/oauth2/token') do
916
+ stub.post('/token') do
869
917
  build_json_response({
870
918
  'access_token' => '12345',
871
919
  'refresh_token' => '54321',
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: signet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bob Aman
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-10-13 00:00:00.000000000 Z
12
+ date: 2018-08-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: addressable
@@ -79,28 +79,34 @@ dependencies:
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '10.0'
82
+ version: '12.0'
83
83
  type: :development
84
84
  prerelease: false
85
85
  version_requirements: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '10.0'
89
+ version: '12.0'
90
90
  - !ruby/object:Gem::Dependency
91
91
  name: yard
92
92
  requirement: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0.8'
96
+ version: '0.9'
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: 0.9.12
97
100
  type: :development
98
101
  prerelease: false
99
102
  version_requirements: !ruby/object:Gem::Requirement
100
103
  requirements:
101
104
  - - "~>"
102
105
  - !ruby/object:Gem::Version
103
- version: '0.8'
106
+ version: '0.9'
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: 0.9.12
104
110
  - !ruby/object:Gem::Dependency
105
111
  name: rspec
106
112
  requirement: !ruby/object:Gem::Requirement
@@ -227,7 +233,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
227
233
  version: 1.3.5
228
234
  requirements: []
229
235
  rubyforge_project:
230
- rubygems_version: 2.6.13
236
+ rubygems_version: 2.7.6
231
237
  signing_key:
232
238
  specification_version: 4
233
239
  summary: Signet is an OAuth 1.0 / OAuth 2.0 implementation.