class Deribit::Request
Attributes
base_uri[RW]
key[RW]
secret[RW]
Public Class Methods
new(key, secret, test_server: nil)
click to toggle source
# File lib/deribit/request.rb, line 9 def initialize(key, secret, test_server: nil) test_server = ENV['DERIBIT_TEST_SERVER'] if test_server == nil @key = key @secret = secret @base_uri = test_server ? URI(TEST_URL) : URI(SERVER_URL) end
Public Instance Methods
generate_signature(path, params = {})
click to toggle source
# File lib/deribit/request.rb, line 53 def generate_signature(path, params = {}) timestamp = Time.now.utc.to_i + 1000 signature_data = { _: timestamp, _ackey: key, _acsec: secret, _action: path } signature_data.update(params) sorted_signature_data = signature_data.sort converter = ->(data){ key = data[0] value = data[1] if value.is_a?(Array) [key.to_s, value.join].join('=') else [key.to_s, value.to_s].join('=') end } items = sorted_signature_data.map(&converter) signature_string = items.join('&') sha256 = OpenSSL::Digest::SHA256.new sha256_signature = sha256.digest(signature_string.encode('utf-8')) base64_signature = Base64.encode64(sha256_signature).encode('utf-8') [key, timestamp, base64_signature].join('.').strip end
is_error_response?(response)
click to toggle source
# File lib/deribit/request.rb, line 87 def is_error_response?(response) code = response.code.to_i code == 0 || code >= 400 end
process(response)
click to toggle source
# File lib/deribit/request.rb, line 39 def process(response) json = JSON.parse(response.body, symbolize_names: true) raise Error.new(message: "Failed for #{key}: " + json[:message]) unless json[:success] if json.include?(:result) json[:result] elsif json.include?(:message) json[:message] else "ok" end end
send(path: DEFAULT_REQUEST_PATH, params: {})
click to toggle source
# File lib/deribit/request.rb, line 16 def send(path: DEFAULT_REQUEST_PATH, params: {}) uri = base_uri + path if path.start_with?(PRIVATE_PATH) request = Net::HTTP::Post.new(uri.path) request.body = URI.encode_www_form(params) request.add_field 'x-deribit-sig', generate_signature(path, params) response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http| http.request(request) end else uri.query = URI.encode_www_form(params) response = Net::HTTP.get_response(uri) end if is_error_response?(response) raise Error.new(code: response.code) else process(response) end end