class PurpleAirApi::V1::RaiseHttpException

Handles any HTTP exceptions for 400 and 500 error codes

Attributes

response[RW]

Public Class Methods

new(app) click to toggle source

Faraday syntax for implementing middleware

Calls superclass method
# File lib/purple_air_api/V1/raise_http_exception.rb, line 27
def initialize(app)
  super app
  @parser = nil
end

Public Instance Methods

call(env) click to toggle source

A switch statement which determines which error to raise depending on error code

# File lib/purple_air_api/V1/raise_http_exception.rb, line 8
def call(env)
  @app.call(env).on_complete do |response|
    self.response = response
    case response[:status].to_i
    when 400
      raise ApiError.new(error_message, parsed_response[:error], response)
    when 403
      raise ApiKeyError.new(error_message, parsed_response[:error], response)
    when 404
      raise NotFoundError.new(error_message, parsed_response[:error], response)
    when 415
      raise MissingJsonPayloadError.new(error_message, 'MissingJsonPayloadError', response)
    when 500
      raise ServerError.new(error_message, 'ServerError', response)
    end
  end
end

Private Instance Methods

error_message() click to toggle source
# File lib/purple_air_api/V1/raise_http_exception.rb, line 36
def error_message
  parsed_response[:description]
end
parsed_response() click to toggle source
# File lib/purple_air_api/V1/raise_http_exception.rb, line 40
def parsed_response
  @parsed_response ||= FastJsonparser.parse(response[:body])
rescue FastJsonparser::ParseError
  unknown_error_message
end
unknown_error_message() click to toggle source
# File lib/purple_air_api/V1/raise_http_exception.rb, line 46
def unknown_error_message
  { description: 'Something went wrong in the request.' }
end