41 lines
1.1 KiB
Ruby
41 lines
1.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module StrikeMe
|
|
module API
|
|
# The BaseClient module is to be included in objects using the Strike client
|
|
# to make calls and transform the responses to objects.
|
|
# Factory of BaseModel instances
|
|
module BaseClient
|
|
extend ActiveSupport::Concern
|
|
|
|
def client
|
|
@client ||= Client.new
|
|
end
|
|
|
|
module ClassMethods
|
|
def autoload_default(name)
|
|
autoload name, "#{"#{self.name}/#{name}".underscore}.rb"
|
|
end
|
|
end
|
|
|
|
# cumbersome, but better for later debugging and handling
|
|
class ResponseError < StandardError
|
|
attr_reader :url, :response_body, :status, :reason
|
|
|
|
def initialize(url, response_body)
|
|
@reason = response_body.try(:[], 'data').try(:[], 'message')
|
|
@status = response_body.try(:[], 'data').try(:[], 'status')
|
|
|
|
super "[#{status}, {}, [\"#{reason}\"]]" if reason
|
|
@url = url
|
|
@response_body = response_body
|
|
end
|
|
|
|
# def inspect
|
|
# "StrikeMe::API::BaseClient::ResponseError: #{url} status: #{faraday_response.status}"
|
|
# end
|
|
end
|
|
end
|
|
end
|
|
end
|