Sha256: 3f7e604bfa840458c2517b62aa73180746e452672af03ed08ee92edd708a83ef

Contents?: true

Size: 1.64 KB

Versions: 28

Compression:

Stored size: 1.64 KB

Contents

module Sawyer
  class Response
    attr_reader :agent,
      :status,
      :headers,
      :data,
      :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
      @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

    # 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

Version data entries

28 entries across 25 versions & 2 rubygems

Version Path
tdiary-5.0.13 vendor/bundle/gems/sawyer-0.8.1/lib/sawyer/response.rb
tdiary-5.0.12.1 vendor/bundle/gems/sawyer-0.8.1/lib/sawyer/response.rb
tdiary-5.0.11 vendor/bundle/gems/sawyer-0.8.1/lib/sawyer/response.rb
tdiary-5.0.9 vendor/bundle/gems/sawyer-0.8.1/lib/sawyer/response.rb
tdiary-5.0.8 vendor/bundle/gems/sawyer-0.8.1/lib/sawyer/response.rb
tdiary-5.0.8 vendor/bundle/gems/tdiary-5.0.7/vendor/bundle/gems/sawyer-0.8.1/lib/sawyer/response.rb
tdiary-5.0.8 vendor/bundle/ruby/2.5.0/gems/sawyer-0.8.1/lib/sawyer/response.rb
tdiary-5.0.7 vendor/bundle/gems/sawyer-0.8.1/lib/sawyer/response.rb
tdiary-5.0.6 vendor/bundle/gems/sawyer-0.8.1/lib/sawyer/response.rb
tdiary-5.0.5 vendor/bundle/gems/tdiary-5.0.4/vendor/bundle/gems/sawyer-0.8.1/lib/sawyer/response.rb
tdiary-5.0.5 vendor/bundle/gems/sawyer-0.8.1/lib/sawyer/response.rb
tdiary-5.0.4 vendor/bundle/gems/sawyer-0.8.1/lib/sawyer/response.rb
sawyer-0.8.1 lib/sawyer/response.rb
sawyer-0.8.0 lib/sawyer/response.rb
tdiary-5.0.2 vendor/bundle/gems/sawyer-0.7.0/lib/sawyer/response.rb
tdiary-5.0.1 vendor/bundle/gems/sawyer-0.7.0/lib/sawyer/response.rb
sawyer-0.7.0 lib/sawyer/response.rb
tdiary-4.2.1 vendor/bundle/ruby/2.2.0/gems/sawyer-0.6.0/lib/sawyer/response.rb
sawyer-0.6.0 lib/sawyer/response.rb
sawyer-0.5.5 lib/sawyer/response.rb