class Bitstamper::Rest::Client

Attributes

configuration[RW]
url[RW]

Public Class Methods

new(configuration: ::Bitstamper.configuration) click to toggle source
# File lib/bitstamper/rest/client.rb, line 6
def initialize(configuration: ::Bitstamper.configuration)
  self.url              =   "https://www.bitstamp.net/api"
  self.configuration    =   configuration
end

Public Instance Methods

auth(data = {}) click to toggle source
# File lib/bitstamper/rest/client.rb, line 57
def auth(data = {})
  if configured?
    data[:key]          =   self.configuration.key
    data[:nonce]        =   (Time.now.to_f * 1_000_000_000).to_i.to_s
    message             =   data[:nonce] + self.configuration.client_id.to_s + data[:key]
    data[:signature]    =   HMAC::SHA256.hexdigest(self.configuration.secret, message).upcase
  end

  return data
end
check_credentials!() click to toggle source
# File lib/bitstamper/rest/client.rb, line 29
def check_credentials!
  unless configured?
    raise ::Bitstamper::Errors::MissingConfigError.new("Bitstamp Gem not properly configured")
  end
end
configured?() click to toggle source
# File lib/bitstamper/rest/client.rb, line 25
def configured?
  !self.configuration.key.to_s.empty? && !self.configuration.secret.to_s.empty? && !self.configuration.client_id.to_s.empty?
end
get(path, params: {}, options: {}) click to toggle source
# File lib/bitstamper/rest/client.rb, line 49
def get(path, params: {}, options: {})
  request path, method: :get, options: options
end
parse(response) click to toggle source
# File lib/bitstamper/rest/client.rb, line 44
def parse(response)
  error?(response)
  response
end
path_with_currency_pair(path, currency_pair) click to toggle source
# File lib/bitstamper/rest/client.rb, line 35
def path_with_currency_pair(path, currency_pair)
  path += "/#{::Bitstamper::Utilities.fix_currency_pair(currency_pair)}" if !currency_pair.to_s.empty?
  return path
end
post(path, params: {}, data: {}, options: {}) click to toggle source
# File lib/bitstamper/rest/client.rb, line 53
def post(path, params: {}, data: {}, options: {})
  request path, method: :post, params: params, data: data.merge(auth), options: options
end
request(path, method: :get, params: {}, data: {}, options: {}) click to toggle source
# File lib/bitstamper/rest/client.rb, line 68
def request(path, method: :get, params: {}, data: {}, options: {})
  user_agent    =   options.fetch(:user_agent, self.configuration.faraday.fetch(:user_agent, nil))
  proxy         =   options.fetch(:proxy, nil)
    
  connection    =   Faraday.new(url: to_uri(path)) do |builder|
    builder.headers[:user_agent] = user_agent if !user_agent.to_s.empty?
    builder.request  :url_encoded if method.eql?(:post)
    builder.response :logger      if self.configuration.verbose_faraday?
    builder.response :json

    if proxy
      puts "[Bitstamper::Rest::Client] - Will connect to Bitstamp using proxy: #{proxy.inspect}" if self.configuration.verbose_faraday?
      builder.proxy = proxy
    end

    builder.adapter self.configuration.faraday.fetch(:adapter, :net_http)
  end
    
  case method
    when :get
      connection.get do |request|
        request.params  =   params if params && !params.empty?
      end&.body
    when :post
      connection.post do |request|
        request.body    =   data
        request.params  =   params if params && !params.empty?
      end&.body
  end
end
to_uri(path) click to toggle source
# File lib/bitstamper/rest/client.rb, line 40
def to_uri(path)
  "#{self.url}#{path}/"
end