class CryptomktRuby::Client

Public Class Methods

new(key, secret, options = {}) click to toggle source
# File lib/cryptomkt_ruby/client.rb, line 10
def initialize(key, secret, options = {})
  @key = key
  @secret = secret
  @logger = options.delete(:logger)
end

Public Instance Methods

active_orders(market:, page: 0, limit: 20) click to toggle source

Retorna lista de órdenes activas en CryptoMarket pertenecientes al usuario propietario de las credenciales. @param [String] market @param [String] page @param [String] limit @return [Hash]

# File lib/cryptomkt_ruby/client.rb, line 78
def active_orders(market:, page: 0, limit: 20)
  path = '/v1/orders/active'

  params = {
    market: market,
    page: page,
    limit: limit
  }

  private_get(path, params)
end
balance() click to toggle source

Permite obtener el balance actual de tus billeteras en CryptoMarket @return [Array]

# File lib/cryptomkt_ruby/client.rb, line 180
def balance
  path = '/v1/balance'

  private_get(path)
end
book(market:, type:, page: 1, limit: 20) click to toggle source

Retorna lista de órdenes activas en CryptoMarket. @param [String] market @param [String] type @param [String] page @param [String] limit @return [Hash]

# File lib/cryptomkt_ruby/client.rb, line 22
def book(market:, type:, page: 1, limit: 20)
  path = '/v1/book'

  params = {
    market: market,
    type: type,
    page: page,
    limit: limit
  }

  public_get(path, params)
end
cancel_order(id) click to toggle source

Permite cancelar una orden @param [String] id @return [Hash]

# File lib/cryptomkt_ruby/client.rb, line 110
def cancel_order(id)
  path = '/v1/orders/cancel'

  private_post(path, id: id)
end
create_instant_order(market:, type:, amount:) click to toggle source

Permite crear una orden instantánea en el Instant Exchange de CryptoMarket @param [String] market @param [String] type @param [String] amount @return [Hash]

# File lib/cryptomkt_ruby/client.rb, line 166
def create_instant_order(market:, type:, amount:)
  path = '/v1/orders/instant/create'

  params = {
    market: market,
    type: type,
    amount: amount
  }

  private_post(path, params)
end
create_market_order(market:, type:, amount:, price:) click to toggle source

Permite crear una orden de compra o venta dentro de CryptoMarket @param [String] market @param [String] type @param [String] amount @param [String] price @return [Hash]

# File lib/cryptomkt_ruby/client.rb, line 148
def create_market_order(market:, type:, amount:, price:)
  path = '/v1/orders/create'

  params = {
    market: market,
    type: type,
    amount: amount,
    price: price
  }

  private_post(path, params)
end
executed_orders(market:, page: 0, limit: 20) click to toggle source

Retorna lista de órdenes ejecutadas en CryptoMarket pertenecientes al usuario propietario de las credenciales. @param [String] market @param [String] page @param [String] limit @return [Hash]

# File lib/cryptomkt_ruby/client.rb, line 95
def executed_orders(market:, page: 0, limit: 20)
  path = '/v1/orders/executed'

  params = {
    market: market,
    page: page,
    limit: limit
  }

  private_get(path, params)
end
instant_order(market:, type:, amount:) click to toggle source

Permite obtener en base al estado actual del mercado, la cantidad de criptomonedas o moneda local a recibir si se ejecuta una compra o venta respectivamente. @param [String] market @param [String] type @param [String] amount @return [Hash]

# File lib/cryptomkt_ruby/client.rb, line 130
def instant_order(market:, type:, amount:)
  path = '/v1/orders/instant/get'

  params = {
    market: market,
    type: type,
    amount: amount
  }

  private_get(path, params)
end
market() click to toggle source

El mercado corresponde a los pares de mercados disponibles en CryptoMarket. @return [Array]

# File lib/cryptomkt_ruby/client.rb, line 58
def market
  path = '/v1/market'

  public_get(path, {})
end
status_order(id) click to toggle source

Retorna el estado de una orden @param [String] id @return [Hash]

# File lib/cryptomkt_ruby/client.rb, line 119
def status_order(id)
  path = '/v1/orders/status'

  private_get(path, id: id)
end
ticker(market: nil) click to toggle source

Retorna una lista de objetos ticker de mercados activos. Si está presente parámetro market solo se retorna ticker de mercado especificado. @param [String] market @return [Array]

# File lib/cryptomkt_ruby/client.rb, line 67
def ticker(market: nil)
  path = '/v1/ticker'

  public_get(path, market: market)
end
trades(market:, start_at: Time.now, end_at: Time.now, page: 1, limit: 20) click to toggle source

Corresponden a las transacciones realizadas en CryptoMarket. @param [String] market @param [String] start_at @param [String] end_at @param [String] page @param [String] limit @return [Hash]

# File lib/cryptomkt_ruby/client.rb, line 42
def trades(market:, start_at: Time.now, end_at: Time.now, page: 1, limit: 20)
  path = '/v1/trades'

  params = {
    market: market,
    start: start_at.strftime('%Y-%m-%d'),
    end: end_at.strftime('%Y-%m-%d'),
    page: page,
    limit: limit
  }

  public_get(path, params)
end

Private Instance Methods

conn() click to toggle source
# File lib/cryptomkt_ruby/client.rb, line 188
def conn
  @conn ||= Faraday.new(url: API_URL) do |faraday|
    faraday.use ErrorHandler
    faraday.response :logger if @logger
    faraday.adapter  Faraday.default_adapter # make requests with Net::HTTP
  end
end
parsed_response(response) click to toggle source
# File lib/cryptomkt_ruby/client.rb, line 196
def parsed_response(response)
  json = JSON.parse(response.body)
  json['data']
end
private_get(path, params = {}) click to toggle source
# File lib/cryptomkt_ruby/client.rb, line 207
def private_get(path, params = {})
  timestamp = Time.now.to_i.to_s
  response = conn.get path, params do |req|
    req.headers['X-MKT-APIKEY'] = @key
    req.headers['X-MKT-SIGNATURE'] = signature(timestamp, path)
    req.headers['X-MKT-TIMESTAMP'] = timestamp
  end

  parsed_response(response)
end
private_post(path, params = {}) click to toggle source
# File lib/cryptomkt_ruby/client.rb, line 218
def private_post(path, params = {})
  timestamp = Time.now.to_i.to_s
  response = conn.post path, URI.encode_www_form(params) do |req|
    req.headers['X-MKT-APIKEY'] = @key
    req.headers['X-MKT-SIGNATURE'] = signature(timestamp, path, params)
    req.headers['X-MKT-TIMESTAMP'] = timestamp
  end

  parsed_response(response)
end
public_get(path, params) click to toggle source
# File lib/cryptomkt_ruby/client.rb, line 201
def public_get(path, params)
  response = conn.get path, params

  parsed_response(response)
end
signature(timestamp, path, body = '') click to toggle source
# File lib/cryptomkt_ruby/client.rb, line 229
def signature(timestamp, path, body = '')
  body = body.sort.to_h.values.reduce(:+) if body.is_a? Hash

  message = [timestamp, path, body].inject(:+)
  OpenSSL::HMAC.hexdigest('SHA384', @secret, message)
end