ocean-rails 3.8.2 → 3.8.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ocean/api.rb +15 -0
- data/lib/ocean/api_remote_resource.rb +115 -3
- data/lib/ocean/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b8016bcce74120528096b71766f7756e0f02b5c6
|
4
|
+
data.tar.gz: e6c5b28ce615e5a0b5e479f73d21663359a9f672
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5c63d4c52002d236081bc816a8fe8e57283ac6c2a4ab2f1ec5ddf59448c08ae5918161b54ef0066540fd25436c68b469f8c9c746378469dc8f85fbb1272b6544
|
7
|
+
data.tar.gz: b91f6a5a283e7970e481e39cd02a21a512021c6c5acd38edc1cc5d0e2bca0ea952a8579e1a1458c7695d9dfad318887e65ef0c740ac7325a48513e9dcf2f4c22
|
data/lib/ocean/api.rb
CHANGED
@@ -503,6 +503,21 @@ class Api
|
|
503
503
|
end
|
504
504
|
|
505
505
|
|
506
|
+
#
|
507
|
+
# Constructs a hash suitable as the body of a POST to async_jobs. It lets you set
|
508
|
+
# all the allowed attributes, and it also provides a terse shortcut for one-step
|
509
|
+
# jobs (by far the most common ones). The following:
|
510
|
+
#
|
511
|
+
# Api.async_body "/v1/foos", :put
|
512
|
+
#
|
513
|
+
# is equivalent to
|
514
|
+
#
|
515
|
+
# Api.async_body steps: [{"url" => "#{INTERNAL_OCEAN_API_URL}/v1/foos"}
|
516
|
+
# "method" => "PUT",
|
517
|
+
# "body" => {}}]
|
518
|
+
#
|
519
|
+
# A URL not starting with a / will be internalized.
|
520
|
+
#
|
506
521
|
def self.async_job_body(href=nil, method=:get, body: {},
|
507
522
|
credentials: nil,
|
508
523
|
token: nil,
|
@@ -134,6 +134,12 @@ class Api
|
|
134
134
|
attr_reader :raw, :resource, :resource_type, :status, :headers, :credentials, :x_api_token
|
135
135
|
attr_reader :status_message, :response, :etag
|
136
136
|
|
137
|
+
#
|
138
|
+
# The credentials and the x_api_token, if both are left unspecified, will default to
|
139
|
+
# the local credentials and service token. If both are specified and different from
|
140
|
+
# the default values, they will be used instead. Specifying only one of them is not
|
141
|
+
# permitted.
|
142
|
+
#
|
137
143
|
def initialize(uri, type="application/json",
|
138
144
|
credentials: nil, x_api_token: nil,
|
139
145
|
retries: 3, backoff_time: 1, backoff_rate: 0.9, backoff_max: 30)
|
@@ -155,47 +161,105 @@ class Api
|
|
155
161
|
@x_api_token = x_api_token
|
156
162
|
end
|
157
163
|
|
164
|
+
#
|
165
|
+
# True if the resource has been read successfully.
|
166
|
+
#
|
158
167
|
def present?
|
159
168
|
@present
|
160
169
|
end
|
161
170
|
|
162
|
-
|
171
|
+
#
|
172
|
+
# Returns a resource attribute. If the resource isn't present, +get!+ will used to
|
173
|
+
# retrieve it.
|
174
|
+
#
|
163
175
|
def [](key)
|
164
176
|
get!
|
165
177
|
resource[key]
|
166
178
|
end
|
167
179
|
|
180
|
+
#
|
181
|
+
# Sets a resource attribute. The resource will not be retrieved if not present.
|
182
|
+
#
|
168
183
|
def []=(key, value)
|
169
184
|
resource[key] = value
|
170
185
|
end
|
171
186
|
|
187
|
+
#
|
188
|
+
# Returns the hash of hyperlinks. The resource will not be retrieved if not present.
|
189
|
+
#
|
172
190
|
def hyperlink
|
173
191
|
self['_links']
|
174
192
|
end
|
175
193
|
|
194
|
+
#
|
195
|
+
# Returns resources own href. The resource will not be retrieved if not present.
|
196
|
+
#
|
176
197
|
def href
|
177
198
|
hyperlink['self']['href']
|
178
199
|
end
|
179
200
|
|
201
|
+
#
|
202
|
+
# Returns resources own content type. The resource will not be retrieved if not present.
|
203
|
+
#
|
180
204
|
def type
|
181
205
|
hyperlink['self']['type']
|
182
206
|
end
|
183
207
|
|
184
|
-
|
208
|
+
#
|
209
|
+
# Raised when a POST fails, i.e. the response status isn't 2xx.
|
210
|
+
#
|
185
211
|
class PostFailed < StandardError; end
|
212
|
+
|
213
|
+
#
|
214
|
+
# Raised when a GET fails, i.e. the response status isn't 2xx.
|
215
|
+
#
|
186
216
|
class GetFailed < StandardError; end
|
217
|
+
|
218
|
+
#
|
219
|
+
# Raised when a Conditional GET fails, i.e. the response status isn't 2xx.
|
220
|
+
#
|
221
|
+
class ConditionalGetFailed < StandardError; end
|
222
|
+
|
223
|
+
#
|
224
|
+
# Raised when a PUT fails, i.e. the response status isn't 2xx.
|
225
|
+
#
|
187
226
|
class PutFailed < StandardError; end
|
227
|
+
|
228
|
+
#
|
229
|
+
# Raised when a DELETE fails, i.e. the response status isn't 2xx.
|
230
|
+
#
|
188
231
|
class DeleteFailed < StandardError; end
|
232
|
+
|
233
|
+
#
|
234
|
+
# Raised when a POST, GET, or PUT doesn't return JSON or when the returned JSON
|
235
|
+
# doesn't parse.
|
236
|
+
#
|
189
237
|
class UnparseableJson < StandardError; end
|
238
|
+
|
239
|
+
#
|
240
|
+
# Raised when what a POST, GET, or PUT returns parses correctly but isn't an
|
241
|
+
# Ocean resource in the proper format.
|
242
|
+
#
|
190
243
|
class JsonIsNoResource < StandardError; end
|
244
|
+
|
245
|
+
#
|
246
|
+
# Raised when a specified hyperlink doesn't exist in the resource representation.
|
247
|
+
#
|
191
248
|
class HyperlinkMissing < StandardError; end
|
192
|
-
class ConditionalGetFailed < StandardError; end
|
193
249
|
|
194
250
|
|
251
|
+
#
|
252
|
+
# Class method to retrieve a resource. Will raise exceptions if problems occur,
|
253
|
+
# otherwise returns the resource itself. The args are passed directly to +new+.
|
254
|
+
#
|
195
255
|
def self.get!(*args)
|
196
256
|
_retrieve new(*args)
|
197
257
|
end
|
198
258
|
|
259
|
+
#
|
260
|
+
# Class method to retrieve a resource. Will not raise exceptions if problems occur,
|
261
|
+
# but will always return the resource itself. The args are passed directly to +new+.
|
262
|
+
#
|
199
263
|
def self.get(*args)
|
200
264
|
rr = new(*args)
|
201
265
|
rr.get! rescue nil
|
@@ -203,6 +267,10 @@ class Api
|
|
203
267
|
end
|
204
268
|
|
205
269
|
|
270
|
+
#
|
271
|
+
# Instance method to GET a resource or any of its hyperlinks. Will raise exceptions
|
272
|
+
# if they occur, otherwise will return the resource itself.
|
273
|
+
#
|
206
274
|
def get!(hlink=nil)
|
207
275
|
RemoteResource._retrieve self unless present?
|
208
276
|
hlink = hlink.to_s if hlink
|
@@ -215,6 +283,11 @@ class Api
|
|
215
283
|
end
|
216
284
|
end
|
217
285
|
|
286
|
+
#
|
287
|
+
# Instance method to GET a resource or any of its hyperlinks. Will not raise
|
288
|
+
# exceptions if problems occur, but will always return the resource itself.
|
289
|
+
# A missing hyperlink, though, will always raise a HyperlinkMissing exception.
|
290
|
+
#
|
218
291
|
def get(hlink=nil)
|
219
292
|
get! rescue nil
|
220
293
|
hlink = hlink.to_s if hlink
|
@@ -228,6 +301,10 @@ class Api
|
|
228
301
|
end
|
229
302
|
|
230
303
|
|
304
|
+
#
|
305
|
+
# Instance method to do a PUT to a resource or any of its hyperlinks. Will raise exceptions
|
306
|
+
# if they occur, otherwise will return the resource itself.
|
307
|
+
#
|
231
308
|
def put!(hlink=nil, body: {})
|
232
309
|
get!
|
233
310
|
hlink = hlink.to_s if hlink
|
@@ -243,6 +320,11 @@ class Api
|
|
243
320
|
end
|
244
321
|
end
|
245
322
|
|
323
|
+
#
|
324
|
+
# Instance method to do a PUT to a resource or any of its hyperlinks. Will not raise
|
325
|
+
# exceptions if they occur, but will always return the resource itself.
|
326
|
+
# A missing hyperlink, though, will always raise a HyperlinkMissing exception.
|
327
|
+
#
|
246
328
|
def put(hlink=nil, body: {})
|
247
329
|
get
|
248
330
|
hlink = hlink.to_s if hlink
|
@@ -259,6 +341,10 @@ class Api
|
|
259
341
|
end
|
260
342
|
|
261
343
|
|
344
|
+
#
|
345
|
+
# Instance method to do a POST to a resource or any of its hyperlinks. Will raise exceptions
|
346
|
+
# if they occur, otherwise will return the resource itself.
|
347
|
+
#
|
262
348
|
def post!(hlink=nil, body: {})
|
263
349
|
get!
|
264
350
|
hlink = (hlink || 'self').to_s
|
@@ -267,6 +353,11 @@ class Api
|
|
267
353
|
_create(hl_data['href'], body)
|
268
354
|
end
|
269
355
|
|
356
|
+
#
|
357
|
+
# Instance method to do a POST to a resource or any of its hyperlinks. Will not raise
|
358
|
+
# exceptions if they occur, but will always return the resource itself.
|
359
|
+
# A missing hyperlink, though, will always raise a HyperlinkMissing exception.
|
360
|
+
#
|
270
361
|
def post(hlink=nil, body: {})
|
271
362
|
get
|
272
363
|
hlink = (hlink || 'self').to_s
|
@@ -276,6 +367,10 @@ class Api
|
|
276
367
|
end
|
277
368
|
|
278
369
|
|
370
|
+
#
|
371
|
+
# Instance method to do a DELETE to a resource or any of its hyperlinks. Will raise exceptions
|
372
|
+
# if they occur, otherwise will return the resource itself.
|
373
|
+
#
|
279
374
|
def delete!(hlink=nil)
|
280
375
|
get!
|
281
376
|
hlink = (hlink || 'self').to_s
|
@@ -285,6 +380,11 @@ class Api
|
|
285
380
|
self
|
286
381
|
end
|
287
382
|
|
383
|
+
#
|
384
|
+
# Instance method to do a DELETE to a resource or any of its hyperlinks. Will not raise
|
385
|
+
# exceptions if they occur, but will always return the resource itself.
|
386
|
+
# A missing hyperlink, though, will always raise a HyperlinkMissing exception.
|
387
|
+
#
|
288
388
|
def delete(hlink=nil)
|
289
389
|
get
|
290
390
|
hlink = (hlink || 'self').to_s
|
@@ -295,6 +395,12 @@ class Api
|
|
295
395
|
end
|
296
396
|
|
297
397
|
|
398
|
+
#
|
399
|
+
# If the resource is present and has received an ETag in previous requests,
|
400
|
+
# will perform a Conditional GET to update the local representation. If the resource
|
401
|
+
# isn't present or has no ETag, a normal +#get!+ will be done. If no exception is
|
402
|
+
# raised, the resource itself is returned.
|
403
|
+
#
|
298
404
|
def refresh!
|
299
405
|
if present? && etag.present?
|
300
406
|
_conditional_get
|
@@ -304,6 +410,12 @@ class Api
|
|
304
410
|
self
|
305
411
|
end
|
306
412
|
|
413
|
+
#
|
414
|
+
# If the resource is present and has received an ETag in previous requests,
|
415
|
+
# will perform a Conditional GET to update the local representation. If the resource
|
416
|
+
# isn't present or has no ETag, a normal +#get+ will be done. The resource will
|
417
|
+
# always be returned.
|
418
|
+
#
|
307
419
|
def refresh
|
308
420
|
if present? && etag.present?
|
309
421
|
_conditional_get rescue nil
|
data/lib/ocean/version.rb
CHANGED