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, options = {}) ⇒ 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
21
22
# File 'lib/sawyer/response.rb', line 13

def initialize(agent, res, options = {})
  @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
  @started = options[:sawyer_started]
  @ended   = options[:sawyer_ended]
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



60
61
62
# File 'lib/sawyer/response.rb', line 60

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.



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

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



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

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



56
57
58
# File 'lib/sawyer/response.rb', line 56

def time
  @ended
end

#timingObject



52
53
54
# File 'lib/sawyer/response.rb', line 52

def timing
  @timing ||= @ended - @started
end