module Bitsor::Connection

Public Instance Methods

delete(url, options = {}) click to toggle source
# File lib/bitsor/concerns/connection.rb, line 29
def delete(url, options = {})
  request :delete, url, parse_body(options)
end
get(url, options = {}) click to toggle source
# File lib/bitsor/concerns/connection.rb, line 13
def get(url, options = {})
  request :get, url, nil, parse_query(options)
end
last_response() click to toggle source
# File lib/bitsor/concerns/connection.rb, line 33
def last_response
  @last_response if defined? @last_response
end
patch(url, options = {}) click to toggle source
# File lib/bitsor/concerns/connection.rb, line 25
def patch(url, options = {})
  request :patch, url, parse_body(options)
end
post(url, options = {}) click to toggle source
# File lib/bitsor/concerns/connection.rb, line 17
def post(url, options = {})
  request :post, url, parse_body(options)
end
put(url, options = {}) click to toggle source
# File lib/bitsor/concerns/connection.rb, line 21
def put(url, options = {})
  request :put, url, parse_body(options)
end

Protected Instance Methods

endpoint() click to toggle source
# File lib/bitsor/concerns/connection.rb, line 39
def endpoint
  Bitsor::Default.api_endpoint
end

Private Instance Methods

complete_request(response) click to toggle source
# File lib/bitsor/concerns/connection.rb, line 65
def complete_request(response)
  if error = Bitsor::Error.from_response(response)
    raise error
  end

  JSON.parse(response.body, symbolize_names: true)[:payload]
end
parse_body(options) click to toggle source
# File lib/bitsor/concerns/connection.rb, line 80
def parse_body(options)
  return '' if options.nil? || options.empty?
  options = (options || {}).delete_if { |_k, v| v.nil? }
  options.to_json
end
parse_query(options) click to toggle source
# File lib/bitsor/concerns/connection.rb, line 73
def parse_query(options)
  return nil if options.empty? || !options

  options = options.select { |_key, value| !value.nil? || (value && !value.empty?) }
  "?#{URI.encode_www_form(options)}"
end
request(method, path, body = nil, params = nil) click to toggle source
# File lib/bitsor/concerns/connection.rb, line 45
def request(method, path, body = nil, params = nil)
  nonce = DateTime.now.strftime('%Q')
  message = nonce + method.to_s.upcase + path + params.to_s + body.to_s
  signature = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), api_secret, message)

  url = "#{endpoint}#{path}#{params}"
  request_options = {
    method: method,
    headers: {
      Authorization: "Bitso #{api_key}:#{nonce}:#{signature}",
      'Content-Type': 'application/json',
    },
  }
  request_options[:body] = body
  response = Typhoeus::Request.new(url, request_options).run
  @last_response = response

  complete_request(response)
end