Class: Sawyer::Response

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(agent, res) ⇒ Response

Builds a Response after a completed request.

agent - The Sawyer::Agent that is managing the API connection. res - A Faraday::Response.



13
14
15
16
17
18
19
20
# File 'lib/sawyer/response.rb', line 13

def initialize(agent, res)
  @agent   = agent
  @status  = res.status
  @headers = res.headers
  @env     = res.env
  @data    = @headers[:content_type] =~ /json|msgpack/ ? process_data(@agent.decode_body(res.body)) : res.body
  @rels    = process_rels
end

Instance Attribute Details

#agentObject (readonly)

Returns the value of attribute agent.



3
4
5
# File 'lib/sawyer/response.rb', line 3

def agent
  @agent
end

#dataObject (readonly)

Returns the value of attribute data.



3
4
5
# File 'lib/sawyer/response.rb', line 3

def data
  @data
end

#headersObject (readonly)

Returns the value of attribute headers.



3
4
5
# File 'lib/sawyer/response.rb', line 3

def headers
  @headers
end

#relsObject (readonly)

Returns the value of attribute rels.



3
4
5
# File 'lib/sawyer/response.rb', line 3

def rels
  @rels
end

#statusObject (readonly)

Returns the value of attribute status.



3
4
5
# File 'lib/sawyer/response.rb', line 3

def status
  @status
end

Instance Method Details

#inspectObject



58
59
60
# File 'lib/sawyer/response.rb', line 58

def inspect
  %(#<#{self.class}: #{@status} @rels=#{@rels.inspect} @data=#{@data.inspect}>)
end

#process_data(data) ⇒ Object

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

data - Either an Array or Hash parsed from JSON.

Returns either a Resource or Array of Resources.



28
29
30
31
32
33
34
35
# File 'lib/sawyer/response.rb', line 28

def process_data(data)
  case data
  when Hash  then Resource.new(agent, data)
  when Array then data.map { |hash| process_data(hash) }
  when nil   then nil
  else data
  end
end

#process_relsObject

Finds link relations from ‘Link’ response header

Returns an array of Relations



40
41
42
43
44
45
46
47
48
# File 'lib/sawyer/response.rb', line 40

def process_rels
  links = ( @headers["Link"] || "" ).split(', ').map do |link|
    href, name = link.match(/<(.*?)>; rel="(\w+)"/).captures

    [name.to_sym, Relation.from_link(@agent, name, :href => href)]
  end

  Hash[*links.flatten]
end

#timeObject



54
55
56
# File 'lib/sawyer/response.rb', line 54

def time
  @env[:sawyer_ended]
end

#timingObject



50
51
52
# File 'lib/sawyer/response.rb', line 50

def timing
  @timing ||= @env[:sawyer_ended] - @env[:sawyer_started]
end