Class: BookingSync::API::Response

Inherits:
Object
  • Object
show all
Defined in:
lib/bookingsync/api/response.rb

Constant Summary collapse

SPECIAL_JSONAPI_FIELDS =
[:links, :linked, :meta]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client, res) ⇒ Response

Build a Response after a completed request.

Parameters:

  • client (BookingSync::API::Client)

    The client that is managing the API connection.

  • res (Faraday::Response)

    Faraday response object



11
12
13
14
15
16
17
# File 'lib/bookingsync/api/response.rb', line 11

def initialize(client, res)
  @client  = client
  @status  = res.status
  @headers = res.headers
  @env     = res.env
  @body    = res.body
end

Instance Attribute Details

#bodyObject (readonly)

Returns the value of attribute body.



4
5
6
# File 'lib/bookingsync/api/response.rb', line 4

def body
  @body
end

#clientObject (readonly)

Returns the value of attribute client.



4
5
6
# File 'lib/bookingsync/api/response.rb', line 4

def client
  @client
end

#dataObject (readonly)

Returns the value of attribute data.



4
5
6
# File 'lib/bookingsync/api/response.rb', line 4

def data
  @data
end

#headersObject (readonly)

Returns the value of attribute headers.



4
5
6
# File 'lib/bookingsync/api/response.rb', line 4

def headers
  @headers
end

#relationsHash (readonly)

Return a Hash of relations to other pages built from ‘Link’ response header

Returns:

  • (Hash)

    Hash of relations to first, last, next and prev pages



61
62
63
# File 'lib/bookingsync/api/response.rb', line 61

def relations
  @relations
end

#statusObject (readonly)

Returns the value of attribute status.



4
5
6
# File 'lib/bookingsync/api/response.rb', line 4

def status
  @status
end

Instance Method Details

#metaHash

Returns a Hash of meta information taken from the response body

Returns:

  • (Hash)

    Meta hash



68
69
70
# File 'lib/bookingsync/api/response.rb', line 68

def meta
  @meta ||= decoded_body[:meta]
end

#process_data(hash) ⇒ Array

Turn parsed contents from an API response into a Resource or collection of Resources.

Parameters:

  • hash (Hash)

    A Hash of resources parsed from JSON.

Returns:

  • (Array)

    An Array of Resources.



24
25
26
27
28
# File 'lib/bookingsync/api/response.rb', line 24

def process_data(hash)
  Array(hash).map do |hash|
    Resource.new(client, hash, resource_relations, resources_key)
  end
end

#resource_relationsHash

Returns a Hash of relations built from given links templates. These relations are the same for each resource, so we calculate them once here and pass to every top level resource.

Returns:

  • (Hash)

    Hash of relations to associated resources



52
53
54
55
# File 'lib/bookingsync/api/response.rb', line 52

def resource_relations
  @resource_relations ||= Relation.from_links(client,
    decoded_body[:links])
end

#resourcesArray<BookingSync::API::Resource>

Return an array of Resources from the response body

Returns:



43
44
45
# File 'lib/bookingsync/api/response.rb', line 43

def resources
  @resources ||= process_data(decoded_body[resources_key])
end

#resources_keySymbol

Return name of the key in the response body hash where fetched resources are, like bookings or rentals

Returns:

  • (Symbol)

    Key name in the body hash



34
35
36
37
38
# File 'lib/bookingsync/api/response.rb', line 34

def resources_key
  decoded_body.keys.delete_if { |key|
    SPECIAL_JSONAPI_FIELDS.include?(key)
  }.pop
end