misty 1.5.3 → 1.5.4

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: 51db43f31654ff73aa9fe58100552299f4e2052f
4
- data.tar.gz: f7f72291b25f45d202e7b1a7c440ce7ead73d9c3
3
+ metadata.gz: ebb0138e4483e4547e364d1480868752341806a7
4
+ data.tar.gz: 19add58cab7f876d51311685c5e65a6f77a1df9f
5
5
  SHA512:
6
- metadata.gz: 850fbb0608e2393355ae186e383dd8271011c028bc839fc7169692df82390001e69784232ce99227536aa455787a1275225a89b03e57a9509ef80fc0061be86d
7
- data.tar.gz: f0f8ef9da041ae92042cefc55b6b44d853b71f289a19f2dee1fccc2bb81626abff5021956007f40954290b9021ec52bef5ba5c79f3b23e965f6b3931d56d55a4
6
+ metadata.gz: b67157bcb2a71b6c068e3b27c010e7d524f80d81bd3f394355e21210cd5f9b260e90aa0273a4fc84d96e1a238144db73d3165e8a73991e6ffcd0cbd25da12954
7
+ data.tar.gz: 7d49599fd1913126a95239e55058511fa70e33a261bbe6c9ace0ef4d1a2e873a9edce7c3bc1065211f334fe23883117b179f0a5cbc792c1f553b40c4cca910d8
data/README.md CHANGED
@@ -212,11 +212,10 @@ defaults are applied if not specified.
212
212
  * `:auth` - Authentication credentials hash containing 'auth_url' and user context. See `Misty::Auth`.
213
213
  * `:content_type` - HTTP responses body format. :json or :hash structures. Default is `Misty::Config::CONTENT_TYPE` (`:hash`).
214
214
  * `:headers` - Hash of extra HTTP headers to be applied to all services
215
- * `:interface` - Endpoint interface, allowed values are: "public", "internal", "admin".
215
+ * `:interface` - Endpoint interface, allowed values are: "public", "internal", "admin". Default is `Misty::Config::INTERFACE` (`'public'`).
216
216
  * `:log_file` - Log destination, Value is either file path (./misty.log) or IO object (SDOUT). Default is '/dev/null'
217
217
  * `:log_level` - Value is Fixnum - Default is 1 (Logger::INFO) - See Logger from Ruby standard Library
218
218
  * `:region` - Alternative Region name. Default is `Misty::Config::REGION` (`'regionOne'`)
219
- Default is `Misty::Config::INTERFACE` (`'public'`)
220
219
  * `:ssl_verify_mode` - Boolean flag for SSL client verification. Applies when URI scheme is SSL ("https://").
221
220
  Default is `Misty::Config::SSL_VERIFY_MODE` (`true`)
222
221
  See `Misty::Config` for more details
@@ -3,7 +3,7 @@ module Misty
3
3
  module Auth
4
4
  module Token
5
5
  include Misty::HTTP::NetHTTP
6
- attr_reader :catalog, :expires, :token, :user
6
+ attr_reader :catalog, :expires, :token, :user, :data
7
7
 
8
8
  def self.build(auth)
9
9
  if auth[:tenant_id] || auth[:tenant]
@@ -43,7 +43,8 @@ module Misty
43
43
  Misty::HTTP::NetHTTP.http_request(
44
44
  creds[:uri], ssl_verify_mode: creds[:ssl_verify_mode], log: @log
45
45
  ) do |connection|
46
- response = connection.post(path, creds[:data].to_json,
46
+ connect_path = creds[:uri].path + path
47
+ response = connection.post(connect_path, creds[:data].to_json,
47
48
  { 'Content-Type' => 'application/json', 'Accept' => 'application/json' })
48
49
  unless response.code =~ /200|201/
49
50
  raise AuthenticationError, "Response code=#{response.code}, Msg=#{response.msg}"
@@ -40,10 +40,10 @@ module Misty
40
40
  end
41
41
 
42
42
  def set(response)
43
- payload = JSON.load(response.body)
44
- @token = payload['access']['token']['id']
45
- @expires = payload['access']['token']['expires']
46
- catalog = payload['access']['serviceCatalog']
43
+ @data = JSON.load(response.body)
44
+ @token = @data['access']['token']['id']
45
+ @expires = @data['access']['token']['expires']
46
+ catalog = @data['access']['serviceCatalog']
47
47
  @catalog = Misty::Auth::Catalog::V2.new(catalog)
48
48
  end
49
49
 
@@ -42,10 +42,10 @@ module Misty
42
42
  end
43
43
 
44
44
  def set(response)
45
- payload = JSON.load(response.body)
45
+ @data = JSON.load(response.body)
46
46
  @token = response['x-subject-token']
47
- @expires = payload['token']['expires_at']
48
- catalog = payload['token']['catalog']
47
+ @expires = @data['token']['expires_at']
48
+ catalog = @data['token']['catalog']
49
49
  @catalog = Misty::Auth::Catalog::V3.new(catalog)
50
50
  end
51
51
 
@@ -1,3 +1,3 @@
1
1
  module Misty
2
- VERSION = '1.5.3'
2
+ VERSION = '1.5.4'
3
3
  end
@@ -5,7 +5,7 @@ describe Misty::Auth::Token do
5
5
  describe 'V3' do
6
6
  describe '#new' do
7
7
  it 'fails when missing credentials' do
8
- stub_request(:post, 'http://localhost:5000/v3/auth/tokens').
8
+ stub_request(:post, 'http://localhost/identity/v3/auth/tokens').
9
9
  to_return(:status => 200, :body => "{\"token\":{\"catalog\":[]}}", :headers => {'x-subject-token'=>'token_data'})
10
10
  proc do
11
11
  token = Misty::Auth::Token.build({})
@@ -16,31 +16,30 @@ describe Misty::Auth::Token do
16
16
  describe 'with a project scope' do
17
17
  it 'authenticates using a project id' do
18
18
  auth = {
19
- :url => 'http://localhost:5000',
19
+ :url => 'http://localhost/identity',
20
20
  :user_id => 'user_id',
21
21
  :password => 'secret',
22
22
  :project_id => 'project_id',
23
23
  :ssl_verify_mode => false
24
24
  }
25
25
 
26
- stub_request(:post, 'http://localhost:5000/v3/auth/tokens').
26
+ stub_request(:post, 'http://localhost/identity/v3/auth/tokens').
27
27
  with(:body => "{\"auth\":{\"identity\":{\"methods\":[\"password\"],\"password\":{\"user\":{\"id\":\"user_id\",\"password\":\"secret\"}}},\"scope\":{\"project\":{\"id\":\"project_id\"}}}}").
28
28
  to_return(:status => 200, :body => JSON.dump(auth_response_v3('identity', 'keystone')), :headers => {'x-subject-token'=>'token_data_v3'})
29
-
30
29
  token = Misty::Auth::Token.build(auth)
31
30
  token.get.must_equal 'token_data_v3'
32
31
  end
33
32
 
34
33
  it 'authenticates using a project name and a project domain id' do
35
34
  auth = {
36
- :url => 'http://localhost:5000',
35
+ :url => 'http://localhost/identity',
37
36
  :user_id => 'user_id',
38
37
  :password => 'secret',
39
38
  :project => 'project',
40
39
  :project_domain_id => 'project_domain_id'
41
40
  }
42
41
 
43
- stub_request(:post, 'http://localhost:5000/v3/auth/tokens').
42
+ stub_request(:post, 'http://localhost/identity/v3/auth/tokens').
44
43
  with(:body => "{\"auth\":{\"identity\":{\"methods\":[\"password\"],\"password\":{\"user\":{\"id\":\"user_id\",\"password\":\"secret\"}}},\"scope\":{\"project\":{\"name\":\"project\",\"domain\":{\"id\":\"project_domain_id\"}}}}}").
45
44
  to_return(:status => 200, :body => JSON.dump(auth_response_v3('identity', 'keystone')), :headers => {'x-subject-token'=>'token_data'})
46
45
  token = Misty::Auth::Token.build(auth)
@@ -49,7 +48,7 @@ describe Misty::Auth::Token do
49
48
 
50
49
  it 'authenticates using a project name and a project domain name' do
51
50
  auth = {
52
- :url => 'http://localhost:5000',
51
+ :url => 'http://localhost/identity',
53
52
  :user => 'user',
54
53
  :user_domain => 'user_domain',
55
54
  :password => 'secret',
@@ -57,7 +56,7 @@ describe Misty::Auth::Token do
57
56
  :project_domain => 'project_domain'
58
57
  }
59
58
 
60
- stub_request(:post, "http://localhost:5000/v3/auth/tokens").
59
+ stub_request(:post, "http://localhost/identity/v3/auth/tokens").
61
60
  with(:body => "{\"auth\":{\"identity\":{\"methods\":[\"password\"],\"password\":{\"user\":{\"name\":\"user\",\"domain\":{\"name\":\"user_domain\"},\"password\":\"secret\"}}},\"scope\":{\"project\":{\"name\":\"project\",\"domain\":{\"name\":\"project_domain\"}}}}}").
62
61
  to_return(:status => 200, :body => JSON.dump(auth_response_v3('identity', 'keystone')), :headers => {'x-subject-token'=>'token_data'})
63
62
 
@@ -69,13 +68,13 @@ describe Misty::Auth::Token do
69
68
  describe 'with a domain scope' do
70
69
  it 'authenticates using a domain id' do
71
70
  auth = {
72
- :url => 'http://localhost:5000',
71
+ :url => 'http://localhost/identity',
73
72
  :user_id => 'user_id',
74
73
  :password => 'secret',
75
74
  :domain_id => 'domain_id'
76
75
  }
77
76
 
78
- stub_request(:post, 'http://localhost:5000/v3/auth/tokens').
77
+ stub_request(:post, 'http://localhost/identity/v3/auth/tokens').
79
78
  with(:body => "{\"auth\":{\"identity\":{\"methods\":[\"password\"],\"password\":{\"user\":{\"id\":\"user_id\",\"password\":\"secret\"}}},\"scope\":{\"domain\":{\"id\":\"domain_id\"}}}}").
80
79
  to_return(:status => 200, :body => JSON.dump(auth_response_v3('identity', 'keystone')), :headers => {'x-subject-token'=>'token_data'})
81
80
 
@@ -85,13 +84,13 @@ describe Misty::Auth::Token do
85
84
 
86
85
  it 'authenticates using a domain name' do
87
86
  auth = {
88
- :url => 'http://localhost:5000',
87
+ :url => 'http://localhost/identity',
89
88
  :user_id => 'user_id',
90
89
  :password => 'secret',
91
90
  :domain => 'domain'
92
91
  }
93
92
 
94
- stub_request(:post, 'http://localhost:5000/v3/auth/tokens').
93
+ stub_request(:post, 'http://localhost/identity/v3/auth/tokens').
95
94
  with(:body => "{\"auth\":{\"identity\":{\"methods\":[\"password\"],\"password\":{\"user\":{\"id\":\"user_id\",\"password\":\"secret\"}}},\"scope\":{\"domain\":{\"name\":\"domain\"}}}}").
96
95
  to_return(:status => 200, :body => JSON.dump(auth_response_v3('identity', 'keystone')), :headers => {'x-subject-token'=>'token_data'})
97
96
 
@@ -105,12 +104,12 @@ describe Misty::Auth::Token do
105
104
  describe 'with a project scope' do
106
105
  it 'authenticates using a project id' do
107
106
  auth = {
108
- :url => 'http://localhost:5000',
107
+ :url => 'http://localhost/identity',
109
108
  :token => 'token',
110
109
  :project_id => 'project_id'
111
110
  }
112
111
 
113
- stub_request(:post, 'http://localhost:5000/v3/auth/tokens').
112
+ stub_request(:post, 'http://localhost/identity/v3/auth/tokens').
114
113
  with(:body => "{\"auth\":{\"identity\":{\"methods\":[\"token\"],\"token\":{\"id\":\"token\"}},\"scope\":{\"project\":{\"id\":\"project_id\"}}}}").
115
114
  to_return(:status => 200, :body => JSON.dump(auth_response_v3('identity', 'keystone')), :headers => {'x-subject-token'=>'token_data'})
116
115
 
@@ -120,13 +119,13 @@ describe Misty::Auth::Token do
120
119
 
121
120
  it 'authenticates using a project name and a project domain id' do
122
121
  auth = {
123
- :url => 'http://localhost:5000',
122
+ :url => 'http://localhost/identity',
124
123
  :token => 'token',
125
124
  :project => 'project',
126
125
  :project_domain_id => 'domain_id'
127
126
  }
128
127
 
129
- stub_request(:post, 'http://localhost:5000/v3/auth/tokens').
128
+ stub_request(:post, 'http://localhost/identity/v3/auth/tokens').
130
129
  with(:body => "{\"auth\":{\"identity\":{\"methods\":[\"token\"],\"token\":{\"id\":\"token\"}},\"scope\":{\"project\":{\"name\":\"project\",\"domain\":{\"id\":\"domain_id\"}}}}}").
131
130
  to_return(:status => 200, :body => JSON.dump(auth_response_v3('identity', 'keystone')), :headers => {'x-subject-token'=>'token_data'})
132
131
 
@@ -138,12 +137,12 @@ describe Misty::Auth::Token do
138
137
  describe 'with a domain scope' do
139
138
  it 'authenticates using a domain id' do
140
139
  auth = {
141
- :url => 'http://localhost:5000',
140
+ :url => 'http://localhost/identity',
142
141
  :token => 'token',
143
142
  :domain_id => 'domain_id'
144
143
  }
145
144
 
146
- stub_request(:post, 'http://localhost:5000/v3/auth/tokens').
145
+ stub_request(:post, 'http://localhost/identity/v3/auth/tokens').
147
146
  with(:body => "{\"auth\":{\"identity\":{\"methods\":[\"token\"],\"token\":{\"id\":\"token\"}},\"scope\":{\"domain\":{\"id\":\"domain_id\"}}}}").
148
147
  to_return(:status => 200, :body => JSON.dump(auth_response_v3('identity', 'keystone')), :headers => {'x-subject-token'=>'token_data'})
149
148
 
@@ -153,12 +152,12 @@ describe Misty::Auth::Token do
153
152
 
154
153
  it 'authenticates using a domain name' do
155
154
  auth = {
156
- :url => 'http://localhost:5000',
155
+ :url => 'http://localhost/identity',
157
156
  :token => 'token',
158
157
  :domain => 'domain'
159
158
  }
160
159
 
161
- stub_request(:post, 'http://localhost:5000/v3/auth/tokens').
160
+ stub_request(:post, 'http://localhost/identity/v3/auth/tokens').
162
161
  with(:body => "{\"auth\":{\"identity\":{\"methods\":[\"token\"],\"token\":{\"id\":\"token\"}},\"scope\":{\"domain\":{\"name\":\"domain\"}}}}").
163
162
  to_return(:status => 200, :body => JSON.dump(auth_response_v3('identity', 'keystone')), :headers => {'x-subject-token'=>'token_data'})
164
163
 
@@ -172,7 +171,7 @@ describe Misty::Auth::Token do
172
171
  describe 'when authenticated' do
173
172
  let(:authv3_creds) do
174
173
  {
175
- :url => 'http://localhost:5000',
174
+ :url => 'http://localhost/identity',
176
175
  :user => 'admin',
177
176
  :password => 'secret',
178
177
  :project => 'admin',
@@ -182,7 +181,7 @@ describe Misty::Auth::Token do
182
181
 
183
182
  describe '#get' do
184
183
  it 'when token has not expired' do
185
- stub_request(:post, 'http://localhost:5000/v3/auth/tokens').
184
+ stub_request(:post, 'http://localhost/identity/v3/auth/tokens').
186
185
  to_return(:status => 200, :body => "{\"token\":{\"catalog\":[\"catalog_data\"]}}", :headers => {'x-subject-token'=>'token_data'})
187
186
 
188
187
  token = Misty::Auth::Token.build(authv3_creds)
@@ -192,7 +191,7 @@ describe Misty::Auth::Token do
192
191
  end
193
192
 
194
193
  it 'when token has expired' do
195
- stub_request(:post, 'http://localhost:5000/v3/auth/tokens').
194
+ stub_request(:post, 'http://localhost/identity/v3/auth/tokens').
196
195
  to_return(:status => 200, :body => "{\"token\":{\"catalog\":[\"catalog_data\"]}}", :headers => {'x-subject-token'=>'token_data'})
197
196
 
198
197
  token = Misty::Auth::Token.build(authv3_creds)
@@ -203,7 +202,7 @@ describe Misty::Auth::Token do
203
202
  end
204
203
 
205
204
  it '#catalog' do
206
- stub_request(:post, 'http://localhost:5000/v3/auth/tokens').
205
+ stub_request(:post, 'http://localhost/identity/v3/auth/tokens').
207
206
  to_return(:status => 200, :body => "{\"token\":{\"catalog\":[\"catalog_data\"]}}", :headers => {'x-subject-token'=>'token_data'})
208
207
 
209
208
  token = Misty::Auth::Token.build(authv3_creds)
@@ -211,7 +210,7 @@ describe Misty::Auth::Token do
211
210
  end
212
211
 
213
212
  it '#get_endpoint_url' do
214
- stub_request(:post, 'http://localhost:5000/v3/auth/tokens').
213
+ stub_request(:post, 'http://localhost/identity/v3/auth/tokens').
215
214
  to_return(:status => 200, :body => JSON.dump(auth_response_v3("identity", "keystone")), :headers => {'x-subject-token'=>'token_data'})
216
215
 
217
216
  token = Misty::Auth::Token.build(authv3_creds)
@@ -223,7 +222,7 @@ describe Misty::Auth::Token do
223
222
  describe 'V2' do
224
223
  describe '#new' do
225
224
  it 'fails when missing credentials' do
226
- stub_request(:post, 'http://localhost:5000/v2.0/tokens').
225
+ stub_request(:post, 'http://localhost/identity/v2.0/tokens').
227
226
  to_return(:status => 200, :body => "{\"access\":{\"token\":{\"id\":\"token_data\"}}}", :headers => {})
228
227
 
229
228
  proc do
@@ -234,13 +233,13 @@ describe Misty::Auth::Token do
234
233
  describe 'using the password method' do
235
234
  it 'authenticates using the tenant name' do
236
235
  auth = {
237
- :url => 'http://localhost:5000',
236
+ :url => 'http://localhost/identity',
238
237
  :user => 'user',
239
238
  :password => 'secret',
240
239
  :tenant => 'tenant',
241
240
  }
242
241
 
243
- stub_request(:post, 'http://localhost:5000/v2.0/tokens').
242
+ stub_request(:post, 'http://localhost/identity/v2.0/tokens').
244
243
  with(:body => "{\"auth\":{\"passwordCredentials\":{\"username\":\"user\",\"password\":\"secret\"},\"tenantName\":\"tenant\"}}").
245
244
  to_return(:status => 200, :body => JSON.dump(auth_response_v2('identity', 'keystone')), :headers => {})
246
245
 
@@ -250,13 +249,13 @@ describe Misty::Auth::Token do
250
249
 
251
250
  it 'authenticates using the tenant id' do
252
251
  auth = {
253
- :url => 'http://localhost:5000',
252
+ :url => 'http://localhost/identity',
254
253
  :user => 'user',
255
254
  :password => 'secret',
256
255
  :tenant_id => 'tenant_id',
257
256
  }
258
257
 
259
- stub_request(:post, 'http://localhost:5000/v2.0/tokens').
258
+ stub_request(:post, 'http://localhost/identity/v2.0/tokens').
260
259
  with(:body => "{\"auth\":{\"passwordCredentials\":{\"username\":\"user\",\"password\":\"secret\"},\"tenantId\":\"tenant_id\"}}").
261
260
  to_return(:status => 200, :body => JSON.dump(auth_response_v2('identity', 'keystone')), :headers => {})
262
261
 
@@ -268,12 +267,12 @@ describe Misty::Auth::Token do
268
267
  describe 'using the token method' do
269
268
  it 'authenticates using the tenant name' do
270
269
  auth = {
271
- :url => 'http://localhost:5000',
270
+ :url => 'http://localhost/identity',
272
271
  :token => 'token_id',
273
272
  :tenant => 'tenant',
274
273
  }
275
274
 
276
- stub_request(:post, 'http://localhost:5000/v2.0/tokens').
275
+ stub_request(:post, 'http://localhost/identity/v2.0/tokens').
277
276
  with(:body => "{\"auth\":{\"token\":{\"id\":\"token_id\"},\"tenantName\":\"tenant\"}}").
278
277
  to_return(:status => 200, :body => JSON.dump(auth_response_v2('identity', 'keystone')), :headers => {})
279
278
 
@@ -283,12 +282,12 @@ describe Misty::Auth::Token do
283
282
 
284
283
  it 'authenticates using the tenant id' do
285
284
  auth = {
286
- :url => 'http://localhost:5000',
285
+ :url => 'http://localhost/identity',
287
286
  :token => 'token_id',
288
287
  :tenant_id => 'tenant_id',
289
288
  }
290
289
 
291
- stub_request(:post, 'http://localhost:5000/v2.0/tokens').
290
+ stub_request(:post, 'http://localhost/identity/v2.0/tokens').
292
291
  with(:body => "{\"auth\":{\"token\":{\"id\":\"token_id\"},\"tenantId\":\"tenant_id\"}}").
293
292
  to_return(:status => 200, :body => JSON.dump(auth_response_v2('identity', 'keystone')), :headers => {})
294
293
 
@@ -300,7 +299,7 @@ describe Misty::Auth::Token do
300
299
  describe 'when authenticated' do
301
300
  let(:authv2_creds) do
302
301
  {
303
- :url => 'http://localhost:5000',
302
+ :url => 'http://localhost/identity',
304
303
  :user => 'admin',
305
304
  :password => 'secret',
306
305
  :tenant => 'admin'
@@ -309,7 +308,7 @@ describe Misty::Auth::Token do
309
308
 
310
309
  describe '#get' do
311
310
  it 'when token has not expired' do
312
- stub_request(:post, 'http://localhost:5000/v2.0/tokens').
311
+ stub_request(:post, 'http://localhost/identity/v2.0/tokens').
313
312
  to_return(:status => 200, :body => "{\"access\":{\"token\":{\"id\":\"token_not_expired\"},\"serviceCatalog\":[\"catalog_data\"]}}", :headers => {})
314
313
 
315
314
  token = Misty::Auth::Token.build(authv2_creds)
@@ -319,7 +318,7 @@ describe Misty::Auth::Token do
319
318
  end
320
319
 
321
320
  it 'when token has expired' do
322
- stub_request(:post, 'http://localhost:5000/v2.0/tokens').
321
+ stub_request(:post, 'http://localhost/identity/v2.0/tokens').
323
322
  to_return(:status => 200, :body => "{\"access\":{\"token\":{\"id\":\"token_expired\"},\"serviceCatalog\":[\"catalog_data\"]}}", :headers => {})
324
323
 
325
324
  token = Misty::Auth::Token.build(authv2_creds)
@@ -330,7 +329,7 @@ describe Misty::Auth::Token do
330
329
  end
331
330
 
332
331
  it '#catalog' do
333
- stub_request(:post, 'http://localhost:5000/v2.0/tokens').
332
+ stub_request(:post, 'http://localhost/identity/v2.0/tokens').
334
333
  to_return(:status => 200, :body => "{\"access\":{\"token\":{\"id\":\"token_data\"},\"serviceCatalog\":[\"catalog_data\"]}}", :headers => {})
335
334
 
336
335
  token = Misty::Auth::Token.build(authv2_creds)
@@ -338,7 +337,7 @@ describe Misty::Auth::Token do
338
337
  end
339
338
 
340
339
  it '#get_endpoint_url' do
341
- stub_request(:post, 'http://localhost:5000/v2.0/tokens').
340
+ stub_request(:post, 'http://localhost/identity/v2.0/tokens').
342
341
  to_return(:status => 200, :body => JSON.dump(auth_response_v2('identity', 'keystone')), :headers => {'x-subject-token'=>'token_data'})
343
342
 
344
343
  token = Misty::Auth::Token.build(authv2_creds)
@@ -119,7 +119,7 @@ describe Misty::Cloud do
119
119
  it 'uses Misty::Auth::Token::V3' do
120
120
  authv2 = Minitest::Mock.new
121
121
 
122
- Misty::Auth::Token::V2.stub :new, authv2 do
122
+ Misty::Auth::Token::V2.stub :new, authv2 do
123
123
  cloud = Misty::Cloud.new(:auth => authv2_data)
124
124
  assert_mock authv2
125
125
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: misty
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.3
4
+ version: 1.5.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gilles Dubreuil
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-03-23 00:00:00.000000000 Z
11
+ date: 2018-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json