Class: Deribit::API
- Inherits:
-
Object
- Object
- Deribit::API
- Defined in:
- lib/deribit/api.rb
Instance Attribute Summary collapse
-
#key ⇒ Object
Returns the value of attribute key.
-
#secret ⇒ Object
Returns the value of attribute secret.
Instance Method Summary collapse
- #generate_signature(uri, params = {}) ⇒ Object
- #get_token ⇒ Object
-
#initialize(key, secret, test_server: false) ⇒ API
constructor
A new instance of API.
- #is_error_response?(response) ⇒ Boolean
-
#method_missing(name, **params, &block) ⇒ Object
For direct calls like
deribit.get_account_summaryTrying to find API method in Deribit::REST_METHODS. - #process(response) ⇒ Object
- #send(route, params = {}) ⇒ Object
Constructor Details
#initialize(key, secret, test_server: false) ⇒ API
Returns a new instance of API.
9 10 11 12 13 |
# File 'lib/deribit/api.rb', line 9 def initialize(key, secret, test_server: false) @key = key @secret = secret @server = set_server_uri(test_server) end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, **params, &block) ⇒ Object
For direct calls like deribit.get_account_summary Trying to find API method in Deribit::REST_METHODS
17 18 19 20 |
# File 'lib/deribit/api.rb', line 17 def method_missing(name, **params, &block) method = Deribit.find_method(name, params) send(method[:path], params) end |
Instance Attribute Details
#key ⇒ Object
Returns the value of attribute key.
7 8 9 |
# File 'lib/deribit/api.rb', line 7 def key @key end |
#secret ⇒ Object
Returns the value of attribute secret.
7 8 9 |
# File 'lib/deribit/api.rb', line 7 def secret @secret end |
Instance Method Details
#generate_signature(uri, params = {}) ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/deribit/api.rb', line 63 def generate_signature(uri, params = {}) = (Time.now.utc.to_f * 1000).to_i nonce = rand(100000000) http_method = "GET" path = uri.path path << "?" << uri.query if uri.query body = "" data = [, nonce, http_method, path, body, ""].join("\n") sig = OpenSSL::HMAC.hexdigest("SHA256", secret, data) { signature: sig, header: "deri-hmac-sha256 id=#{key},ts=#{},sig=#{sig},nonce=#{nonce}", } end |
#get_token ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/deribit/api.rb', line 22 def get_token return @token if @token params = { grant_type: "client_credentials", client_id: key, client_secret: secret, scope: "session:default" } result = send "public/auth", params puts "Auth result: #{result.inspect}" @refresh_token = result[:refresh_token] @expires = result[:expires_in] @token = result[:access_token] end |
#is_error_response?(response) ⇒ Boolean
79 80 81 |
# File 'lib/deribit/api.rb', line 79 def is_error_response?(response) response.code.to_i.yield_self { |code| code == 0 || code >= 400 } end |
#process(response) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/deribit/api.rb', line 49 def process(response) json = JSON.parse(response.body, symbolize_names: true) if json.include?(:error) raise Error.new(message: "Failed for #{key}. " + json[:error]) elsif json.include?(:result) json[:result] elsif json.include?(:message) json[:message] else "ok" end end |
#send(route, params = {}) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/deribit/api.rb', line 34 def send(route, params = {}) uri = URI(@server + route.to_s) response = get(uri, params) if is_error_response?(response) json = JSON.parse(response.body) rescue nil = "Failed for #{key}. " << json["error"].to_s if json raise Error.new(code: response.code, message: ) else process(response) end end |