ocean-rails 4.0.3 → 4.0.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: 695bf42c433ee293191b3c856bdea9659fa6026b
4
- data.tar.gz: 2472561dd035df00ca8ee24d923d6576ba3bc79f
3
+ metadata.gz: 9e13cc2480ac989b37242e14182c41931b25b5ff
4
+ data.tar.gz: e84d495747487e35a951cc80eb1c53508d742351
5
5
  SHA512:
6
- metadata.gz: c32548ba8c61a9b8348f8f710e97864ac26a58f2dd18dce8f2ceb2d872472630d2d30f3780e756e14d4336ab3fffcdcf818c56784d7e420e4293f69082a52c6a
7
- data.tar.gz: 722dc5edec98fcf8a921fcc5f3b9372804eaedb4e33f6206b0090c48d4bf8a2e82f1add6e81bacc98dd9f768bb1c7861a1584aec8d3f42f9117f5de359acc74c
6
+ metadata.gz: c75d7190f2c20ada7c2349e625523fb2bf5161bd7e805d680d5bd4b2872605850fa3e65cd067022aad9f2ad3b18be0e0203c4b9215839df3d1c716562594a2ae
7
+ data.tar.gz: 17e85cd0ce7257bbedac4b231e4222f62e563bc21089ee43a29c448f68314ea94f41e82a175d04417f3065953b4295f8c36958bd4d469df8ea9b8050b3596925
data/lib/ocean/api.rb CHANGED
@@ -349,7 +349,7 @@ class Api
349
349
  # If not successful, +nil+ is returned.
350
350
  #
351
351
  def self.authenticate(username=API_USER, password=API_PASSWORD)
352
- response = Api.request "#{INTERNAL_OCEAN_API_URL}/v1/authentications", :post,
352
+ response = Api.request "/v1/authentications", :post,
353
353
  headers: {'X-API-Authenticate' => credentials(username, password)}
354
354
  case response.status
355
355
  when 201
@@ -423,8 +423,7 @@ class Api
423
423
  #
424
424
  def self.permitted?(token, args={})
425
425
  raise unless token
426
- Api.request "#{INTERNAL_OCEAN_API_URL}/v1/authentications/#{token}", :get,
427
- args: args
426
+ Api.request "/v1/authentications/#{token}", :get, args: args
428
427
  end
429
428
 
430
429
 
@@ -480,7 +479,7 @@ class Api
480
479
  subject: nil,
481
480
  plaintext: nil, html: nil,
482
481
  plaintext_url: nil, html_url: nil, substitutions: nil)
483
- Api.request "#{INTERNAL_OCEAN_API_URL}/v1/mails", :post,
482
+ Api.request "/v1/mails", :post,
484
483
  x_api_token: Api.service_token, credentials: Api.credentials,
485
484
  body: {
486
485
  from: from, to: to, subject: subject,
@@ -555,7 +554,7 @@ class Api
555
554
  #
556
555
  def self.run_async_job(href=nil, method=nil, job: nil, **keywords, &block)
557
556
  job ||= async_job_body(href, method, **keywords)
558
- Api.request "#{INTERNAL_OCEAN_API_URL}/v1/async_jobs", :post,
557
+ Api.request "/v1/async_jobs", :post,
559
558
  body: job.to_json, x_api_token: Api.service_token
560
559
  rescue TimeoutError, NoResponseError => e
561
560
  raise e unless block
@@ -107,6 +107,11 @@ class Api
107
107
  # The above is a Thing resource, wrapped with its type. Attributes should appear in the inner
108
108
  # hash, which must have at least a +_links+ hyperlink attribute with a href and a content type.
109
109
  #
110
+ # If any of the four getters (.get!, .get, #get!, and #get) receive an Ocean collection,
111
+ # the instance method +#collection+ will return an array of RemoteResources. NB: the getters
112
+ # will still, in all cases, return the RemoteResource itself. The collection is always made
113
+ # available as the value of +#collection+ on the RemoteResource which was used to obtain it.
114
+ #
110
115
  # To refresh a resource using a conditional GET:
111
116
  #
112
117
  # thing.refresh
@@ -126,13 +131,11 @@ class Api
126
131
  # +nil+, you can always chack +#status+, +#status_message+, and/or +#headers+ to determine what
127
132
  # went wrong. After fetching non-resource data, +#present?+ will always be false.
128
133
  #
129
- # TODO: If .get or .get! retrieve an Ocean collection, let them return an array of RemoteResources.
130
- #
131
134
  class RemoteResource
132
135
 
133
136
  attr_reader :uri, :args, :content_type, :retries, :backoff_time, :backoff_rate, :backoff_max
134
137
  attr_reader :raw, :resource, :resource_type, :status, :headers, :credentials, :x_api_token
135
- attr_reader :status_message, :response, :etag
138
+ attr_reader :status_message, :response, :etag, :collection
136
139
 
137
140
  #
138
141
  # The credentials and the x_api_token, if both are left unspecified, will default to
@@ -435,7 +438,7 @@ class Api
435
438
 
436
439
  attr_accessor :present
437
440
  attr_writer :raw, :resource, :resource_type, :status, :headers, :status_message, :response
438
- attr_writer :etag
441
+ attr_writer :etag, :collection
439
442
 
440
443
 
441
444
  def _credentials(rr)
@@ -491,11 +494,16 @@ class Api
491
494
  end
492
495
 
493
496
 
494
- def _setup(body, response)
495
- self.raw = body
496
- type, resource = verify_resource body
497
- self.resource = resource
498
- self.resource_type = type
497
+ def _setup(wrapped, response)
498
+ self.raw = wrapped
499
+ if raw && raw.is_a?(Hash) && raw['_collection']
500
+ self.collection = raw['_collection']['resources'].map { |wrapped| _make wrapped, response }
501
+ self.resource_type = '_collection'
502
+ else
503
+ type, resource = verify_resource wrapped
504
+ self.resource = resource
505
+ self.resource_type = type
506
+ end
499
507
  self.response = response
500
508
  self.status = response.status
501
509
  self.status_message = response.message
@@ -505,10 +513,20 @@ class Api
505
513
  end
506
514
 
507
515
 
508
- def verify_resource(json)
509
- raise JsonIsNoResource unless json.is_a? Hash
510
- raise JsonIsNoResource unless json.size == 1
511
- resource_type, attributes = json.to_a.first
516
+ def _make(wrapped, response)
517
+ resource_type, attributes = wrapped.to_a.first
518
+ r = Api::RemoteResource.new attributes['_links']['self']['href'],
519
+ retries: retries, backoff_time: backoff_time,
520
+ backoff_rate: backoff_rate, backoff_max: backoff_max
521
+ r.send :_setup, wrapped, response
522
+ r
523
+ end
524
+
525
+
526
+ def verify_resource(wrapped)
527
+ raise JsonIsNoResource unless wrapped.is_a? Hash
528
+ raise JsonIsNoResource unless wrapped.size == 1
529
+ resource_type, attributes = wrapped.to_a.first
512
530
  raise JsonIsNoResource unless attributes.is_a? Hash
513
531
  raise JsonIsNoResource unless attributes['_links'].is_a? Hash
514
532
  raise JsonIsNoResource unless attributes['_links']['self'].is_a? Hash
data/lib/ocean/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ocean
2
- VERSION = "4.0.3"
2
+ VERSION = "4.0.4"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ocean-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.3
4
+ version: 4.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Bengtson