class OmiseGO::Request

Constants

PARAM_FIELDS

Public Class Methods

new(client) click to toggle source
# File lib/omisego/request.rb, line 5
def initialize(client)
  @client = client
  @config = @client.config
end

Public Instance Methods

send(path, body, params: {}, conn: new_conn) click to toggle source
# File lib/omisego/request.rb, line 10
def send(path, body, params: {}, conn: new_conn)
  body = add_params(body, params)

  response = conn.post do |req|
    req.url path
    req.headers['Authorization'] = authorization
    req.headers['Accept'] = content_type
    req.headers['Content-Type'] = content_type
    req.body = body.to_json if body
    logger.log_request(req)
  end

  logger.log_response(response)

  unless [200, 500].include?(response.status)
    return error('invalid_status_code',
                 "The server returned an invalid status code: #{response.status}")
  end

  json = JSON.parse(response.body)
  Response.new(json, @client)
rescue JSON::ParserError => e
  error('json_parsing_error',
        "The JSON received from the server could not be parsed: #{e.message}")
rescue Faraday::Error::ConnectionFailed => e
  error('connection_failed', e.message)
end

Private Instance Methods

add_params(body, params) click to toggle source
# File lib/omisego/request.rb, line 40
def add_params(body, params)
  params = params.select { |key, _| PARAM_FIELDS.include?(key) }
  body.merge(params)
end
authorization() click to toggle source
# File lib/omisego/request.rb, line 66
def authorization
  keys = "#{@config.access_key}:#{@config.secret_key}"
  encoded = Base64.encode64(keys).delete("\n")
  "#{@config.auth_scheme} #{encoded}"
end
content_type() click to toggle source
# File lib/omisego/request.rb, line 62
def content_type
  "application/vnd.omisego.v#{@config.api_version}+json"
end
error(code, description) click to toggle source
# File lib/omisego/request.rb, line 45
def error(code, description)
  Response.new({
                 'success' => false,
                 'version' => @config.api_version,
                 'data' => {
                   'object' => 'error',
                   'code' => code,
                   'description' => description,
                   'messages' => []
                 }
               }, @client)
end
logger() click to toggle source
# File lib/omisego/request.rb, line 58
def logger
  @logger ||= HTTPLogger.new(@config.logger)
end
new_conn() click to toggle source
# File lib/omisego/request.rb, line 72
def new_conn
  @conn = Faraday.new(url: "#{@config.base_url}#{@config.api_prefix}")
end