Files
news.gitea.happylizard.me/bin/gems/sawyer-0.9.2/lib/sawyer/response.rb
T
pizza2d1 4cee170d66
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 9s
Add bin and edit workflow
2026-09-16 13:11:16 -06:00

73 lines
1.7 KiB
Ruby

module Sawyer
class Response
attr_reader :agent,
:status,
:headers,
:env,
:body,
:rels
# Builds a Response after a completed request.
#
# agent - The Sawyer::Agent that is managing the API connection.
# res - A Faraday::Response.
def initialize(agent, res, options = {})
@agent = agent
@status = res.status
@headers = res.headers
@env = res.env
@body = res.body
@rels = process_rels
@started = options[:sawyer_started]
@ended = options[:sawyer_ended]
end
def data
@data ||= begin
return(body) unless (headers[:content_type] =~ /json|msgpack/)
process_data(agent.decode_body(body))
end
end
# 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.
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
# Finds link relations from 'Link' response header
#
# Returns an array of Relations
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
def timing
@timing ||= @ended - @started
end
def time
@ended
end
def inspect
%(#<#{self.class}: #{@status} @rels=#{@rels.inspect} @data=#{data.inspect}>)
end
end
end