class Oyi::Client
The REST client that talks to OY API
Public Class Methods
configure(api_url:, api_username:, api_key:)
click to toggle source
# File lib/oyi/client.rb, line 7 def configure(api_url:, api_username:, api_key:) @api_url = api_url @api_username = api_username @api_key = api_key end
configured?()
click to toggle source
# File lib/oyi/client.rb, line 13 def configured? @api_url && @api_username && @api_key end
error_class(status)
click to toggle source
# File lib/oyi/client.rb, line 53 def error_class(status) case status when HTTP_BAD_REQUEST_CODE BadRequestError when HTTP_UNAUTHORIZED_CODE UnauthorizedError when HTTP_FORBIDDEN_CODE ForbiddenError when HTTP_NOT_FOUND_CODE NotFoundError when HTTP_UNPROCESSABLE_ENTITY_CODE UnprocessableEntityError else ApiError end end
request(http_method:, endpoint:, params: nil)
click to toggle source
# File lib/oyi/client.rb, line 17 def request(http_method:, endpoint:, params: nil) raise Error.new(message: 'Oyi client not configured') unless configured? begin response = RestClient::Request.execute method: http_method, url: "#{@api_url}#{endpoint}", payload: params&.to_json, headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', 'X-OY-Username': @api_username, 'X-Api-Key': @api_key } @status = response.code @message = begin JSON.parse(response.body) rescue JSON::ParserError response.body end rescue RestClient::RequestFailed => e @status = e.http_code @message = e.message end custom_status = @message['status'] if @status == HTTP_OK_CODE raise ApiError.new(message: @message['message']) if custom_status == false custom_error_code = custom_status.is_a?(Hash) && custom_status['code'] if custom_error_code && !VALID_CODES.include?(custom_error_code) raise ApiError.new(message: @message['status']&.[]('message')) end return @message end raise error_class(@status).new(status: @status, message: @message) end