module Tradecow::Network

Constants

FUTURE_FUL_URL
FUTURE_URL
SPOT_FUL_URL
SPOT_URL

Public Class Methods

build_query(data) click to toggle source
# File lib/tradecow/network.rb, line 12
def self.build_query(data)
  data.map do |k, v|
    URI.encode_www_form_component(k) << '=' << URI.encode_www_form_component(v)
  end.join('&')
end
dm_url(method, path, req_data = nil) click to toggle source
# File lib/tradecow/network.rb, line 45
def self.dm_url method, path, req_data = nil
  h = Tradecow::Network.rest_auth_token(method, FUTURE_URL, path, req_data)
  params = Tradecow::Network.build_query(h)
  Tradecow.req_url(FUTURE_FUL_URL, path, params)
end
hash_sort(hsh) click to toggle source
# File lib/tradecow/network.rb, line 18
def self.hash_sort(hsh)
  Hash[hsh.sort_by { |k, _| k }]
end
rest_auth_token(method, host, path, req_data = nil) click to toggle source
# File lib/tradecow/network.rb, line 26
def self.rest_auth_token(method, host, path, req_data = nil)
  params = {
    'AccessKeyId' => Tradecow.access_key,
    'SignatureMethod' => 'HmacSHA256',
    'SignatureVersion' => 2,
    'Timestamp' => Time.now.getutc.strftime('%Y-%m-%dT%H:%M:%S')
  }
  params = method == 'GET' && !req_data.nil? ? params.merge(req_data.stringify_keys) : params
  sign_data = "#{method}\n#{host}\n#{path}\n#{build_query(hash_sort(params))}"
  params = params.merge({ 'Signature' => sign(sign_data) })
  params
end
sign(sign_data) click to toggle source
# File lib/tradecow/network.rb, line 22
def self.sign(sign_data)
  Base64.encode64(OpenSSL::HMAC.digest('sha256', Tradecow.secret_key, sign_data)).gsub("\n", '')
end
url(method, path, req_data = nil) click to toggle source
# File lib/tradecow/network.rb, line 39
def self.url method, path, req_data = nil
  h = Tradecow::Network.rest_auth_token(method, SPOT_URL, path, req_data)
  params = Tradecow::Network.build_query(h)
  Tradecow.req_url(SPOT_FUL_URL, path, params)
end