misty 1.5.3 → 1.5.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 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