class MercadoBitcoin::BaseApiCall

Attributes

coin[RW]
parsed[RW]
parser[RW]
parser_error_class[RW]
response[R]
rest_client[RW]

Public Class Methods

new(coin = :bitcoin, opts = {}) click to toggle source
# File lib/mercado_bitcoin/base_api_call.rb, line 4
def initialize(coin = :bitcoin, opts = {})
  @coin               = coin.to_s.downcase.to_sym
  raise MercadoBitcoin::CoinTypeError.new("bitcoin or litecoin expected #{coin} received") unless valid_coin?
  @parser             = opts[:parser]             || JSON
  @rest_client        = opts[:rest_client]        || RestClient
  @parser_error_class = opts[:parser_error_class] || JSON::ParserError
end

Public Instance Methods

action() click to toggle source
# File lib/mercado_bitcoin/base_api_call.rb, line 25
def action
  ''
end
base_url() click to toggle source
# File lib/mercado_bitcoin/base_api_call.rb, line 29
def base_url
  @base_url ||= "https://www.mercadobitcoin.net/api".freeze
end
bitcoin?() click to toggle source
# File lib/mercado_bitcoin/base_api_call.rb, line 33
def bitcoin?
  coin == :bitcoin
end
fetch() click to toggle source
# File lib/mercado_bitcoin/base_api_call.rb, line 16
def fetch
  @parsed = parse(get(url))
  model.new(parsed)
end
get(url) click to toggle source
# File lib/mercado_bitcoin/base_api_call.rb, line 55
def get(url)
  @response = rest_client.get(url)
end
litecoin?() click to toggle source
# File lib/mercado_bitcoin/base_api_call.rb, line 37
def litecoin?
  coin == :litecoin
end
model() click to toggle source
# File lib/mercado_bitcoin/base_api_call.rb, line 21
def model
  raise NotImplementedError.new
end
params() click to toggle source
# File lib/mercado_bitcoin/base_api_call.rb, line 41
def params
  {}
end
parse(body) click to toggle source
# File lib/mercado_bitcoin/base_api_call.rb, line 59
def parse(body)
  parser.parse(body)
rescue parser_error_class
  raise MercadoBitcoin::ParserError.new("#{url} responded an invalid json data")
end
url() click to toggle source
# File lib/mercado_bitcoin/base_api_call.rb, line 45
def url
  return @url if @url
  ac = action.is_a?(String) && action != '' ? File.join(base_url, action) : base_url
  @url = URI.parse(ac)
  @url.query = URI.encode_www_form(params) if !params.nil? && !params.empty?
  @url = @url.to_s
end
valid_coin?() click to toggle source
# File lib/mercado_bitcoin/base_api_call.rb, line 12
def valid_coin?
  bitcoin? || litecoin?
end