class CompaniesHouse::Request

This class manages individual requests. Users of the CompaniesHouse gem should not instantiate this class and should instead use CompaniesHouse::Client.

Public Class Methods

new(args) click to toggle source
Calls superclass method
# File lib/companies_house/request.rb, line 37
def initialize(args)
  super(args)

  @uri = URI.join(endpoint, path)
  @uri.query = URI.encode_www_form(query)

  @notification_payload = {
    method: :get,
    path: path,
    query: query,
  }
end

Public Instance Methods

execute() click to toggle source
# File lib/companies_house/request.rb, line 50
def execute
  @started = Time.now.utc
  response = request_resource(@uri)
  @notification_payload[:status] = response.code

  begin
    @notification_payload[:response] = parse(response, resource_type, resource_id)
  rescue StandardError => e
    @notification_payload[:error] = e
    raise e
  ensure
    publish_notification
  end
rescue Net::OpenTimeout, Net::ReadTimeout
  raise TimeoutError
end

Private Instance Methods

parse(response, resource_type, resource_id) click to toggle source

rubocop:disable Metrics/CyclomaticComplexity

# File lib/companies_house/request.rb, line 87
def parse(response, resource_type, resource_id)
  case response.code
  when "200"
    JSON[response.body]
  when "302" then { 'location': response["location"] }
  when "401"
    raise CompaniesHouse::AuthenticationError, response
  when "404"
    raise CompaniesHouse::NotFoundError.new(resource_type, resource_id, response)
  when "429"
    raise CompaniesHouse::RateLimitError, response
  when "502"
    raise CompaniesHouse::BadGatewayError, response
  else
    raise CompaniesHouse::APIError.new("Unknown API response", response)
  end
end
publish_notification() click to toggle source
# File lib/companies_house/request.rb, line 76
def publish_notification
  instrumentation.publish(
    "companies_house.#{resource_type}",
    @started,
    Time.now.utc,
    transaction_id,
    @notification_payload,
  )
end
request_resource(uri) click to toggle source
# File lib/companies_house/request.rb, line 69
def request_resource(uri)
  req = Net::HTTP::Get.new(uri)
  req.basic_auth api_key, ""

  connection.request req
end