class Binance::Session

Session has the http request connection

Public Class Methods

add_param(query, key, value) click to toggle source
# File lib/binance/session.rb, line 35
def self.add_param(query, key, value)
  if query.nil? || query.empty?
    query = ''
  else
    query << '&'
  end
  query << "#{Faraday::Utils.escape key}=#{Faraday::Utils.escape value}"
end
new(options = {}) click to toggle source
# File lib/binance/session.rb, line 11
def initialize(options = {})
  @base_url = options[:base_url] || 'https://api.binance.com'
  @headers = options[:headers] || {}
  @auth ||= Authentication.new(options[:key], options[:secret])
  @show_weight_usage = options[:show_weight_usage]
  @logger = options[:logger]
  @show_weight_usage = options[:show_weight_usage] || false
  @show_header = options[:show_header] || false
  @timeout = options[:timeout]
end

Public Instance Methods

public_request(path: '/', params: {}) click to toggle source
# File lib/binance/session.rb, line 22
def public_request(path: '/', params: {})
  process_request(public_conn, :get, path, params.compact)
end
sign_request(method, path, params: {}) click to toggle source
# File lib/binance/session.rb, line 26
def sign_request(method, path, params: {})
  if method == :post
    path = path_with_query(path, params.compact)
    params = nil
  end

  process_request(signed_conn, method, path, params.nil? ? nil : params.compact)
end

Private Instance Methods

build_connection() { |client| ... } click to toggle source
# File lib/binance/session.rb, line 85
def build_connection
  Faraday.new(url: @base_url) do |client|
    prepare_headers(client)
    client.options.timeout = @timeout
    yield client if block_given?
    client.use Faraday::Response::RaiseError
    logger_response(client)
    client.adapter Faraday.default_adapter
  end
end
extract_response(response) click to toggle source
# File lib/binance/session.rb, line 55
def extract_response(response)
  data = JSON.parse(response.body, symbolize_names: true)

  return { data: data, weight_usage: response.headers.select { |k, _| weight_usage?(k) } } if @show_weight_usage

  return { data: data, header: response.headers } if @show_header

  data
end
logger_response(client) click to toggle source
# File lib/binance/session.rb, line 96
def logger_response(client)
  client.response :logger, @logger if @logger
end
path_with_query(path, params) click to toggle source
# File lib/binance/session.rb, line 69
def path_with_query(path, params)
  "#{path}?#{Binance::Utils::Url.build_query(params)}"
end
prepare_headers(client) click to toggle source
# File lib/binance/session.rb, line 100
def prepare_headers(client)
  client.headers['Content-Type'] = 'application/json'
  client.headers['User-Agent'] = "binance-connector-ruby/#{Binance::VERSION}"
end
process_request(conn, method, path, params) click to toggle source
# File lib/binance/session.rb, line 46
def process_request(conn, method, path, params)
  response = conn.send(method, path, params)
  extract_response(response)
rescue Faraday::ClientError => e
  raise Binance::ClientError, e.response
rescue Faraday::ServerError => e
  raise Binance::ServerError, e
end
public_conn() click to toggle source
# File lib/binance/session.rb, line 73
def public_conn
  build_connection
end
signed_conn() click to toggle source
# File lib/binance/session.rb, line 77
def signed_conn
  build_connection do |conn|
    conn.headers['X-MBX-APIKEY'] = @auth.key
    conn.use Timestamp
    conn.use Signature, @auth.secret
  end
end
weight_usage?(key) click to toggle source
# File lib/binance/session.rb, line 65
def weight_usage?(key)
  key.start_with?('x-mbx-used-weight')
end