class OpenDataAPIRequest

Attributes

api_key[R]
request[R]

Public Class Methods

api_key() click to toggle source
# File lib/opendata-api/request.rb, line 15
def self.api_key()
  @@api_key
end
http_base() click to toggle source
# File lib/opendata-api/request.rb, line 31
def self.http_base()
  @@http_base
end
new(http, uri, api_key) click to toggle source
# File lib/opendata-api/request.rb, line 8
def initialize(http, uri, api_key)
  @http = http
  @uri = uri
  @api_key = api_key
  @request = self.generate_request_for_api(uri, api_key)
end
set_api_key(api_key) click to toggle source
# File lib/opendata-api/request.rb, line 19
def self.set_api_key(api_key)
  @@api_key = api_key
end
set_http_base(http_base) click to toggle source
# File lib/opendata-api/request.rb, line 35
def self.set_http_base(http_base)
  @@http_base = http_base
end
set_uri_base(uri_base) click to toggle source
# File lib/opendata-api/request.rb, line 27
def self.set_uri_base(uri_base)
  @@uri_base = uri_base
end
uri_base() click to toggle source
# File lib/opendata-api/request.rb, line 23
def self.uri_base()
  @@uri_base
end

Public Instance Methods

fetch(http_session, request, limit = 10) click to toggle source

Fetch specific request

# File lib/opendata-api/request.rb, line 54
def fetch(http_session, request, limit = 10)
  raise "Too many HTTP redirects" if limit == 0
  response = http_session.request(request) # Net::HTTPResponse object
  
  case response
  when Net::HTTPSuccess then
    if response['content-type'] =~ /json/i
      # puts """Response:\n\t
      # Code: #{response.code}\n\t
      # Message: #{response.message}\n\t
      # Class: #{response.class.name}\n\t
      # Headers: \n #{JSON.pretty_generate(response.to_hash)}
      # Body: \n #{JSON.pretty_generate(JSON.parse(response.body))}
      # """
      # puts "Response code #{response.code} for request to: #{request.uri}"
      response
    else
      raise Exception.new("Only JSON response supported")
    end
  when Net::HTTPRedirection then
    location = response['location']
    # puts Net::HTTP.get(URI.parse(location))
    warn "Redirected to #{location}"
    request = Net::HTTP::Get.new(location)
    self.fetch(http_session, request, limit - 1)
  else
    raise Exception.new("Unsupported HTTP Response #{response.inspect}")
  end
end
generate_request_for_api(uri, api_key) click to toggle source
# File lib/opendata-api/request.rb, line 39
def generate_request_for_api(uri, api_key)
  # puts "Generating Request for URI: #{uri.to_s}\nURI Host/Port: #{uri.host}, #{uri.port}"
  request = Net::HTTP::Get.new(uri)

  request.initialize_http_header({
    "Accept" => "application/json",
    "Content-Type" => "application/json",
    "Authorization" => "apikey #{api_key}",
    "User-Agent" => "ruby/net::http"
  })
  # puts "Generated Request with Headers: #{request.to_hash.inspect}"
  request
end