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