lib/adapters/crypto/bitfinex_adapter.rb in currency-rate-1.2.0 vs lib/adapters/crypto/bitfinex_adapter.rb in currency-rate-1.4.1
- old
+ new
@@ -1,15 +1,38 @@
module CurrencyRate
class BitfinexAdapter < Adapter
- FETCH_URL = {
- "BTC_USD" => "https://api.bitfinex.com/v1/pubticker/btcusd",
- "LTC_USD" => "https://api.bitfinex.com/v1/pubticker/ltcusd",
- }
+ # No need to use it for fetching, just additional information about supported currencies
+ SUPPORTED_CURRENCIES = %w(
+ AGI AID AIO ANT ATM AUC AVT BAB BAT BCI BFT BNT BSV BTG CBT CFI CND CTX
+ DAD DAI DAT DGB DASH DTA DTH EDO ELF EOS ESS ETC ETH ETP EUR FSN FUN GBP
+ GNT HOT IOS IOT IQX JPY KNC LRC LTC LYM MIT MKR MNA MTN NCA NEO ODE OMG
+ OMNI ORS PAI POA POY QSH QTM RBT RCN RDN REP REQ RLC RRT SAN SEE SEN SNG
+ SNT SPK STJ TNB TRX USD UTK VEE VET WAX WPR XLM XMR XRP XTZ XVG YYW ZCN
+ ZEC ZIL ZRX
+ )
+ ASSET_MAP = {
+ "DSH" => "DASH",
+ "OMN" => "OMNI",
+ }
+
+ ANCHOR_CURRENCY = "BTC"
+
+ FETCH_URL = "https://api.bitfinex.com/v2/tickers?symbols=ALL"
+
def normalize(data)
return nil unless super
- data.reduce({}) do |result, (pair, value)|
- result[pair] = BigDecimal.new(value["last_price"].to_s)
+ data.reduce({ "anchor" => ANCHOR_CURRENCY }) do |result, pair_info|
+ pair_name = pair_info[0].sub("t", "")
+ key = pair_name.sub(ANCHOR_CURRENCY, "")
+ key = ASSET_MAP[key] || key
+
+ if pair_name.index(ANCHOR_CURRENCY) == 0
+ result[key] = BigDecimal.new(pair_info[7].to_s)
+ elsif pair_name.index(ANCHOR_CURRENCY) == 3
+ result[key] = 1 / BigDecimal.new(pair_info[7].to_s)
+ end
+
result
end
end
end