Sha256: c43e9507b5958d828ec871d1e5a9d99190d29ab81f9a4e8041ca5cc194b59163

Contents?: true

Size: 903 Bytes

Versions: 3

Compression:

Stored size: 903 Bytes

Contents

module EBayEnterpriseAffiliateNetwork
  class APIResponse
    attr_reader :meta, :data, :request

    def initialize(response)
      @request = response.request
      body = JSON.parse(response.body)
      @meta = RecursiveOpenStruct.new(body["meta"])
      @data = parse(body["data"])
    end

    def all
      while meta.pagination.next
        uri = Addressable::URI.parse(meta.pagination.next.href)
        next_page_response = EBayEnterpriseAffiliateNetwork::Publisher.new.request(uri.origin + uri.path, uri.query_values)
        @meta = next_page_response.meta
        @data += next_page_response.data
      end
      @data
    end

    private

    def parse(raw_data)
      data = []
      data = [raw_data] if raw_data.is_a?(Hash) # If we got exactly one result, put it in an array.
      raw_data.each { |item| data << RecursiveOpenStruct.new(item) } if raw_data
      data
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
ebay_enterprise_affiliate_network-1.0.3 lib/ebay_enterprise_affiliate_network/api_response.rb
ebay_enterprise_affiliate_network-1.0.2 lib/ebay_enterprise_affiliate_network/api_response.rb
ebay_enterprise_affiliate_network-1.0.1 lib/ebay_enterprise_affiliate_network/api_response.rb