class ImpactRadiusAPI::APIResponse

Attributes

data[R]
num_pages[R]
page[R]
page_size[R]
request[R]

Public Class Methods

new(response, resource) click to toggle source
# File lib/impact_radius_api/api_response.rb, line 5
def initialize(response, resource)
  @request = response.request
  result = response["ImpactRadiusResponse"]
  @page = result[resource]["page"].to_i
  @num_pages = result[resource]["numpages"].to_i
  @page_size = result[resource]["pagesize"]
  @data = parse(result[resource][resource[0..-2]])
end

Public Instance Methods

all() click to toggle source
# File lib/impact_radius_api/api_response.rb, line 14
def all
  page = @page
  num_pages = @num_pages
  
  while num_pages > page
    uri = Addressable::URI.parse(request.uri)
    class_name = uri.path.match(/^\/[a-z]+\//i)[0].gsub("/","")
    params = uri.query_values
    params.merge!({ 'Page' => "#{page.to_i + 1}" })
    next_page_response =  ImpactRadiusAPI.const_get(class_name).new.request( "https://" + uri.authority + uri.path, params )
    page = next_page_response.page
    @data += next_page_response.data
  end
  @data
end

Private Instance Methods

parse(raw_data) click to toggle source
# File lib/impact_radius_api/api_response.rb, line 32
def parse(raw_data)
  data = []
  data = [RecursiveOpenStruct.new(raw_data)] if raw_data.is_a?(Hash) # If we got exactly one result, put it in an array.
  raw_data.each { |i| data << RecursiveOpenStruct.new(i) } if raw_data.is_a?(Array)
  data
end