module CurrencyRate class KrakenAdapter < Adapter SUPPORTED_CURRENCIES = %w( ADA BCH BSV BTC DASH EOS ETC ETH GNO LTC MLN NMC QTUM REP USDT XDG XLM XMR XRP XTZ ZEC ) ASSET_MAP = { "XXBTZ" => "BTC", "XETCZ" => "ETC", "XETHZ" => "ETH", "XLTCZ" => "LTC", "XREPZ" => "REP", "XXLMZ" => "XLM", "XXMRZ" => "XMR", "XXRPZ" => "XRP", "XZECZ" => "ZEC", "USDTZ" => "USDT", "TZUSD" => "USDT", } ANCHOR_CURRENCY = "USD" FETCH_URL = "https://api.kraken.com/0/public/Ticker?pair=#{ %w(ADAUSD BCHUSD BSVUSD DASHUSD EOSUSD GNOUSD QTUMUSD XTZUSD USDTZUSD XETCZUSD XETHZUSD XLTCZUSD XREPZUSD XXLMZUSD XXMRZUSD XXRPZUSD XZECZUSD XXBTZUSD).join(",") }" def normalize(data) return nil unless super data["result"].reduce({ "anchor" => ANCHOR_CURRENCY, ANCHOR_CURRENCY => BigDecimal.new("1") }) do |result, (pair, value)| result[ta(pair.sub(ANCHOR_CURRENCY, ""))] = 1 / BigDecimal.new(value["c"].first.to_s) result end end def translate_asset(asset) ASSET_MAP[asset] || asset end alias_method :ta, :translate_asset end end