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