class Hibp::Request
Used to make requests to the hibp API @see https://haveibeenpwned.com/API/v3
Attributes
headers[R]
Public Class Methods
new(endpoint:, parser: Parsers::Json.new)
click to toggle source
@param parser [Hibp::Parser] -
A tool to parse and convert data into appropriate models
@param endpoint [String] -
A specific API endpoint to call appropriate method
# File lib/hibp/request.rb, line 19 def initialize(endpoint:, parser: Parsers::Json.new) @endpoint = endpoint @parser = parser @headers = { 'Content-Type' => 'application/json', 'User-Agent' => "Ruby HIBP-Client #{Hibp::VERSION}" } end
Public Instance Methods
get(params: nil, headers: nil)
click to toggle source
Perform a GET request
@param params [Hash] -
Additional query params
@param headers [Hash] -
Additional HTTP headers
@raise [Hibp::ServiceError]
# File lib/hibp/request.rb, line 39 def get(params: nil, headers: nil) response = rest_client.get(@endpoint) do |request| configure_request(request: request, params: params, headers: headers) end @parser ? @parser.parse_response(response) : response.body rescue Faraday::ResourceNotFound nil rescue StandardError => e handle_error(e) end
Private Instance Methods
configure_request(request: nil, params: nil, headers: nil, body: nil)
click to toggle source
# File lib/hibp/request.rb, line 62 def configure_request(request: nil, params: nil, headers: nil, body: nil) return if request.nil? request.params.merge!(params) if params request.headers.merge!(headers) if headers request.body = body if body end
handle_error(error)
click to toggle source
# File lib/hibp/request.rb, line 70 def handle_error(error) error_params = parsable_error?(error) ? parse_error(error) : {} error_to_raise = ServiceError.new(error.message, error_params) raise error_to_raise end
parsable_error?(error)
click to toggle source
# File lib/hibp/request.rb, line 78 def parsable_error?(error) error.is_a?(Faraday::ClientError) && error.response end
parse_error(error)
click to toggle source
# File lib/hibp/request.rb, line 82 def parse_error(error) error_params = { status_code: error.response[:status], raw_body: error.response[:body] } begin parsed_response = Oj.load(error.response[:body], {}) return error_params unless parsed_response error_params[:body] = parsed_response %w[title detail].each do |section| next if parsed_response[section].nil? error_params[section.to_sym] = parsed_response[section] end rescue Oj::ParseError end error_params end
rest_client()
click to toggle source
# File lib/hibp/request.rb, line 53 def rest_client Faraday.new do |faraday| faraday.headers = @headers faraday.response(:raise_error) faraday.adapter(Faraday.default_adapter) end end