class CoinTools::CoinMarketCap::CoinData

Attributes

btc_price[R]
converted_price[R]
last_updated[R]
market_cap[R]
rank[R]
usd_price[R]

Public Class Methods

new(json, convert_to = nil) click to toggle source
Calls superclass method CoinTools::CoinMarketCap::Listing::new
# File lib/cointools/coinmarketcap.rb, line 38
def initialize(json, convert_to = nil)
  super(json)

  raise ArgumentError.new('Missing rank field') unless json['rank']
  raise ArgumentError.new('Invalid rank field') unless json['rank'].is_a?(Integer) && json['rank'] > 0
  @rank = json['rank']

  quotes = json['quotes']
  raise ArgumentError.new('Missing quotes field') unless quotes
  raise ArgumentError.new('Invalid quotes field') unless quotes.is_a?(Hash)

  usd_quote = quotes['USD']
  raise ArgumentError.new('Missing USD quote info') unless usd_quote
  raise ArgumentError.new('Invalid USD quote info') unless usd_quote.is_a?(Hash)

  @usd_price = usd_quote['price']&.to_f
  @market_cap = usd_quote['market_cap']&.to_f

  if convert_to
    converted_quote = quotes[convert_to.upcase]

    if converted_quote
      raise ArgumentError.new("Invalid #{convert_to.upcase} quote info") unless converted_quote.is_a?(Hash)
      @converted_price = converted_quote['price']&.to_f
    end
  else
    btc_quote = quotes['BTC']

    if btc_quote
      raise ArgumentError.new("Invalid BTC quote info") unless btc_quote.is_a?(Hash)
      @btc_price = btc_quote['price']&.to_f
    end
  end

  timestamp = json['last_updated']
  @last_updated = Time.at(timestamp) if timestamp
end