currency-rate 1.7.0 → 2.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. metadata +9 -125
  3. data/.document +0 -5
  4. data/.gitignore +0 -20
  5. data/.rspec +0 -1
  6. data/Gemfile +0 -6
  7. data/Gemfile.lock +0 -68
  8. data/LICENSE.txt +0 -20
  9. data/README.md +0 -73
  10. data/Rakefile +0 -43
  11. data/api_keys.yml.sample +0 -4
  12. data/currency-rate.gemspec +0 -41
  13. data/lib/adapter.rb +0 -71
  14. data/lib/adapters/crypto/binance_adapter.rb +0 -42
  15. data/lib/adapters/crypto/bitfinex_adapter.rb +0 -41
  16. data/lib/adapters/crypto/bitpay_adapter.rb +0 -29
  17. data/lib/adapters/crypto/bitstamp_adapter.rb +0 -26
  18. data/lib/adapters/crypto/btc_china_adapter.rb +0 -11
  19. data/lib/adapters/crypto/btc_e_adapter.rb +0 -18
  20. data/lib/adapters/crypto/coin_market_cap_adapter.rb +0 -31
  21. data/lib/adapters/crypto/coinbase_adapter.rb +0 -30
  22. data/lib/adapters/crypto/exmo_adapter.rb +0 -27
  23. data/lib/adapters/crypto/hit_btc_adapter.rb +0 -61
  24. data/lib/adapters/crypto/huobi_adapter.rb +0 -25
  25. data/lib/adapters/crypto/kraken_adapter.rb +0 -46
  26. data/lib/adapters/crypto/localbitcoins_adapter.rb +0 -25
  27. data/lib/adapters/crypto/okcoin_adapter.rb +0 -19
  28. data/lib/adapters/crypto/paxful_adapter.rb +0 -18
  29. data/lib/adapters/crypto/poloniex_adapter.rb +0 -33
  30. data/lib/adapters/crypto/yadio_adapter.rb +0 -19
  31. data/lib/adapters/fiat/bonbast_adapter.rb +0 -25
  32. data/lib/adapters/fiat/coinmonitor_adapter.rb +0 -14
  33. data/lib/adapters/fiat/currency_layer_adapter.rb +0 -32
  34. data/lib/adapters/fiat/fixer_adapter.rb +0 -18
  35. data/lib/adapters/fiat/forge_adapter.rb +0 -25
  36. data/lib/adapters/fiat/free_forex_adapter.rb +0 -32
  37. data/lib/adapters/fiat/yahoo_adapter.rb +0 -35
  38. data/lib/configuration.rb +0 -28
  39. data/lib/currency_rate.rb +0 -85
  40. data/lib/currency_rate/version.rb +0 -3
  41. data/lib/exceptions.rb +0 -9
  42. data/lib/fetcher.rb +0 -80
  43. data/lib/storage/file_storage.rb +0 -29
  44. data/lib/storage/serializers/yaml_serializer.rb +0 -15
  45. data/lib/synchronizer.rb +0 -54
data/lib/adapter.rb DELETED
@@ -1,71 +0,0 @@
1
- module CurrencyRate
2
- class Adapter
3
- include Singleton
4
-
5
- SUPPORTED_CURRENCIES = []
6
- FETCH_URL = nil
7
- API_KEY_PARAM = nil
8
-
9
- def name
10
- self.class.name.gsub /^.*::/, ""
11
- end
12
-
13
- def fetch_rates
14
- begin
15
- normalize exchange_data
16
- rescue StandardError => e
17
- CurrencyRate.logger.error("Error in #{self.name}#fetch_rates")
18
- CurrencyRate.logger.error(e)
19
- nil
20
- end
21
- end
22
-
23
- def normalize(data)
24
- if data.nil?
25
- CurrencyRate.logger.warn("#{self.name}#normalize: data is nil")
26
- return nil
27
- end
28
- true
29
- end
30
-
31
- def exchange_data
32
- raise "FETCH_URL is not defined!" unless self.class::FETCH_URL
33
-
34
- begin
35
- if self.class::FETCH_URL.kind_of?(Hash)
36
- self.class::FETCH_URL.each_with_object({}) do |(name, url), result|
37
- result[name] = request url
38
- end
39
- else
40
- request self.class::FETCH_URL
41
- end
42
- rescue StandardError => e
43
- CurrencyRate.logger.error("Error in #{self.name}#exchange_data")
44
- CurrencyRate.logger.error(e)
45
- nil
46
- end
47
- end
48
-
49
- def request(url)
50
- fetch_url = url
51
- if self.class::API_KEY_PARAM
52
- api_key = CurrencyRate.configuration.api_keys[self.name]
53
- if api_key.nil?
54
- CurrencyRate.logger.error("API key for #{self.name} not defined")
55
- return nil
56
- end
57
- param_symbol = fetch_url.split("/").last.include?("?") ? "&" : "?"
58
- fetch_url << "#{param_symbol}#{self.class::API_KEY_PARAM}=#{api_key}" if api_key
59
- end
60
- http_client = HTTP.timeout(connect: CurrencyRate.configuration.connect_timeout, read: CurrencyRate.configuration.read_timeout)
61
- JSON.parse(
62
- http_client
63
- .headers("Accept" => "application/json; version=1")
64
- .headers("Content-Type" => "text/plain")
65
- .get(fetch_url)
66
- .to_s
67
- )
68
- end
69
-
70
- end
71
- end
@@ -1,42 +0,0 @@
1
- module CurrencyRate
2
- class BinanceAdapter < Adapter
3
- # No need to use it for fetching, just additional information about supported currencies
4
- SUPPORTED_CURRENCIES = %w(
5
- ADA ADX AGI AMB ARK ARN AST BAT BCC BCD BCN BLZ BNB BNT BQX
6
- BRD BTG BTS CDT CMT CND CVC DCR DGD DLT DNT EDO ELF ENG ENJ
7
- EOS ETC ETH EVX FUN GAS GNT GRS GTO GVT GXS HOT HSR ICN ICX
8
- INS KEY KMD KNC LRC LSK LTC LUN MCO MDA MFT MOD MTH MTL NAS
9
- NAV NEO NXS OAX OMG ONT OST PAX PHX POA POE PPT QKC QLC QSP
10
- RCN RDN REN REP REQ RLC RPX RVN SKY SNM SNT SUB SYS TNB TNT
11
- TRX USDC USDT VEN VET VIA VIB WAN WPR WTC XEM XLM XMR XRP
12
- XVG XZC ZEC ZEN ZIL ZRX
13
- )
14
-
15
- ANCHOR_CURRENCY = "BTC"
16
-
17
- FETCH_URL = {
18
- "Binance" => "https://api.binance.com/api/v3/ticker/price",
19
- "Blockchain" => "https://blockchain.info/ticker"
20
- }
21
-
22
- def normalize(data)
23
- return nil unless super
24
- binance_result = data["Binance"].reduce({ "anchor" => ANCHOR_CURRENCY }) do |result, hash|
25
- if hash["symbol"].index(ANCHOR_CURRENCY) == 0
26
- result[hash["symbol"].sub(ANCHOR_CURRENCY, "")] = BigDecimal(hash["price"].to_s)
27
- elsif hash["symbol"].index(ANCHOR_CURRENCY) == 3
28
- result[hash["symbol"].sub(ANCHOR_CURRENCY, "")] = 1 / BigDecimal(hash["price"].to_s)
29
- end
30
- result
31
- end
32
-
33
- blockchain_result = data["Blockchain"].reduce({}) do |result, (key, value)|
34
- result[key] = BigDecimal(value["last"].to_s)
35
- result
36
- end
37
-
38
- binance_result.merge(blockchain_result)
39
- end
40
-
41
- end
42
- end
@@ -1,41 +0,0 @@
1
- module CurrencyRate
2
- class BitfinexAdapter < Adapter
3
- # No need to use it for fetching, just additional information about supported currencies
4
- SUPPORTED_CURRENCIES = %w(
5
- AGI AID AIO ANT ATM AUC AVT BAB BAT BCI BFT BNT BSV BTG CBT CFI CND CTX
6
- DAD DAI DAT DGB DASH DTA DTH EDO ELF EOS ESS ETC ETH ETP EUR FSN FUN GBP
7
- GNT HOT IOS IOT IQX JPY KNC LRC LTC LYM MIT MKR MNA MTN NCA NEO ODE OMG
8
- OMNI ORS PAI POA POY QSH QTM RBT RCN RDN REP REQ RLC RRT SAN SEE SEN SNG
9
- SNT SPK STJ TNB TRX USD USDT UTK VEE VET WAX WPR XLM XMR XRP XTZ XVG YYW ZCN
10
- ZEC ZIL ZRX
11
- )
12
-
13
- ASSET_MAP = {
14
- "DSH" => "DASH",
15
- "OMN" => "OMNI",
16
- "UST" => "USDT",
17
- }
18
-
19
- ANCHOR_CURRENCY = "BTC"
20
-
21
- FETCH_URL = "https://api.bitfinex.com/v2/tickers?symbols=ALL"
22
-
23
- def normalize(data)
24
- return nil unless super
25
- data.reduce({ "anchor" => ANCHOR_CURRENCY }) do |result, pair_info|
26
- pair_name = pair_info[0].sub("t", "")
27
- key = pair_name.sub(ANCHOR_CURRENCY, "")
28
- key = ASSET_MAP[key] || key
29
-
30
- if pair_name.index(ANCHOR_CURRENCY) == 0
31
- result[key] = BigDecimal(pair_info[7].to_s)
32
- elsif pair_name.index(ANCHOR_CURRENCY) == 3
33
- result[key] = 1 / BigDecimal(pair_info[7].to_s)
34
- end
35
-
36
- result
37
- end
38
- end
39
-
40
- end
41
- end
@@ -1,29 +0,0 @@
1
- module CurrencyRate
2
- class BitpayAdapter < Adapter
3
- # No need to use it for fetching, just additional information about supported currencies
4
- SUPPORTED_CURRENCIES = %w(
5
- AED AFN ALL AMD ANG AOA ARS AUD AWG AZN BAM BBD BCH BDT BGN BHD BIF BMD
6
- BND BOB BRL BSD BTN BWP BZD CAD CDF CHF CLF CLP CNY COP CRC CUP CVE CZK
7
- DJF DKK DOP DZD EGP ETB EUR FJD FKP GBP GEL GHS GIP GMD GNF GTQ GUSD GYD
8
- HKD HNL HRK HTG HUF IDR ILS INR IQD IRR ISK JEP JMD JOD JPY KES KGS KHR
9
- KMF KPW KRW KWD KYD KZT LAK LBP LKR LRD LSL LYD MAD MDL MGA MKD MMK MNT
10
- MOP MRU MUR MVR MWK MXN MYR MZN NAD NGN NIO NOK NPR NZD OMR PAB PAX PEN
11
- PGK PHP PKR PLN PYG QAR RON RSD RUB RWF SAR SBD SCR SDG SEK SGD SHP SLL
12
- SOS SRD STN SVC SYP SZL THB TJS TMT TND TOP TRY TTD TWD TZS UAH UGX USD
13
- USDC UYU UZS VEF VES VND VUV WST XAF XAG XAU XCD XOF XPF YER ZAR ZMW ZWL
14
- )
15
-
16
- ANCHOR_CURRENCY = "BTC"
17
-
18
- FETCH_URL = "https://bitpay.com/api/rates"
19
-
20
- def normalize(data)
21
- return nil unless super
22
- data.reject { |rate| rate["code"] == ANCHOR_CURRENCY }.reduce({ "anchor" => ANCHOR_CURRENCY }) do |result, rate|
23
- result["#{rate['code'].upcase}"] = BigDecimal(rate["rate"].to_s)
24
- result
25
- end
26
- end
27
-
28
- end
29
- end
@@ -1,26 +0,0 @@
1
- module CurrencyRate
2
- class BitstampAdapter < Adapter
3
- SUPPORTED_CURRENCIES = %w(
4
- BCH ETH LTC XRP
5
- )
6
-
7
- ANCHOR_CURRENCY = "BTC"
8
-
9
- FETCH_URL = Hash[SUPPORTED_CURRENCIES.collect { |currency| [ currency, "https://www.bitstamp.net/api/v2/ticker/#{currency}#{ANCHOR_CURRENCY}/".downcase ] }]
10
- FETCH_URL["USD"] = "https://www.bitstamp.net/api/ticker/"
11
-
12
- def normalize(data)
13
- return nil unless super
14
- data.reduce({ "anchor" => ANCHOR_CURRENCY }) do |result, (key, value)|
15
- if key == "USD"
16
- result[key] = BigDecimal(value["last"].to_s)
17
- else
18
- result[key] = 1 / BigDecimal(value["last"].to_s)
19
- end
20
-
21
- result
22
- end
23
- end
24
-
25
- end
26
- end
@@ -1,11 +0,0 @@
1
- module CurrencyRate
2
- class BtcChinaAdapter < Adapter
3
- FETCH_URL = 'https://data.btcchina.com/data/ticker'
4
-
5
- def normalize(data)
6
- return nil unless super
7
- { "BTC_CNY" => BigDecimal(data["ticker"]["last"].to_s) }
8
- end
9
-
10
- end
11
- end
@@ -1,18 +0,0 @@
1
- module CurrencyRate
2
- class BtcEAdapter < Adapter
3
- FETCH_URL = {
4
- 'BTC_USD' => 'https://wex.nz/api/2/btc_usd/ticker',
5
- 'BTC_EUR' => 'https://wex.nz/api/2/btc_eur/ticker',
6
- 'BTC_RUB' => 'https://wex.nz/api/2/btc_rur/ticker',
7
- }
8
-
9
- def normalize(data)
10
- return nil unless super
11
- data.reduce({}) do |result, (pair, value)|
12
- result[pair] = BigDecimal(value["ticker"]["last"].to_s)
13
- result
14
- end
15
- end
16
-
17
- end
18
- end
@@ -1,31 +0,0 @@
1
- module CurrencyRate
2
- class CoinMarketCapAdapter < Adapter
3
- # No need to use it for fetching, just additional information about supported currencies
4
- SUPPORTED_CURRENCIES = %w(
5
- ADA AE AION AOA ARDR ARK BAT BCD BCH BCN BCZERO BNB BNT BSV
6
- BTC BTG BTM BTS CNX CRO DAI DASH DCN DCR DEX DGB DGD DGTX DOGE
7
- ELA EOS ETC ETH ETN ETP FCT GNT GUSD HOT ICX INB IOST KCS KMD
8
- LINK LKY LRC LSK LTC MAID MANA MCO MGO MIOTA MKR MONA MXM NANO
9
- NEO NEXO NPXS ODE OMG ONT PAX PIVX POLY PPT QTUM RDD REP REPO
10
- RVN SNT STEEM STRAT TRX TUSD USDC USDT VET WAN WAVES WAX WTC
11
- XEM XIN XLM XMR XRP XTZ XVG XZC ZEC ZIL ZRX
12
- )
13
-
14
- ANCHOR_CURRENCY = "BTC"
15
-
16
- FETCH_URL = "https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest"
17
- API_KEY_PARAM = "CMC_PRO_API_KEY"
18
-
19
- def normalize(data)
20
- return nil unless super
21
- data["data"].each_with_object({ "anchor" => ANCHOR_CURRENCY }) do |payload, result|
22
- if payload["symbol"] == ANCHOR_CURRENCY
23
- result["USD"] = BigDecimal(payload["quote"]["USD"]["price"].to_s)
24
- else
25
- result[payload["symbol"]] = result["USD"] / BigDecimal(payload["quote"]["USD"]["price"].to_s)
26
- end
27
- end
28
- end
29
-
30
- end
31
- end
@@ -1,30 +0,0 @@
1
- module CurrencyRate
2
- class CoinbaseAdapter < Adapter
3
- # No need to use it for fetching, just additional information about supported currencies
4
- SUPPORTED_CURRENCIES = %w(
5
- AED AFN ALL AMD ANG AOA ARS AUD AWG AZN BAM BAT BBD BCH BDT BGN BHD BIF BMD
6
- BND BOB BRL BSD BTC BTN BWP BYN BYR BZD CAD CDF CHF CLF CLP CNH CNY COP CRC
7
- CUC CVE CZK DJF DKK DOP DZD EEK EGP ERN ETB ETC ETH EUR FJD FKP GBP GEL GGP
8
- GHS GIP GMD GNF GTQ GYD HKD HNL HRK HTG HUF IDR ILS IMP INR IQD ISK JEP JMD
9
- JOD JPY KES KGS KHR KMF KRW KWD KYD KZT LAK LBP LKR LRD LSL LTC LTL LVL LYD
10
- MAD MDL MGA MKD MMK MNT MOP MRO MTL MUR MVR MWK MXN MYR MZN NAD NGN NIO NOK
11
- NPR NZD OMR PAB PEN PGK PHP PKR PLN PYG QAR RON RSD RUB RWF SAR SBD SCR SEK
12
- SGD SHP SLL SOS SRD SSP STD SVC SZL THB TJS TMT TND TOP TRY TTD TWD TZS UAH
13
- UGX USD SDC UYU UZS VEF VND VUV WST XAF XAG XAU XCD XDR XOF XPD XPF XPT YER
14
- ZAR ZEC ZMK ZMW ZRX ZWL
15
- )
16
-
17
- ANCHOR_CURRENCY = "BTC"
18
-
19
- FETCH_URL = "https://api.coinbase.com/v2/exchange-rates?currency=#{ANCHOR_CURRENCY}"
20
-
21
- def normalize(response)
22
- return nil unless super
23
- response["data"]["rates"].reduce({ "anchor" => ANCHOR_CURRENCY }) do |result, (currency, rate)|
24
- result[currency] = BigDecimal(rate.to_s)
25
- result
26
- end
27
- end
28
-
29
- end
30
- end
@@ -1,27 +0,0 @@
1
- module CurrencyRate
2
- class ExmoAdapter < Adapter
3
- # No need to use it for fetching, just additional information about supported currencies
4
- SUPPORTED_CURRENCIES = %w(
5
- ADA BCH BTC BTCZ BTG DASH DOGE DXT EOS ETC ETH EUR GAS GNT GUSD HB
6
- HBZ INK KICK LSK LTC MNX NEO OMG PLN QTUM RUB SMART STQ TRX TRY UAH
7
- USD USDT WAVES XEM XLM XMR XRP ZEC ZRX
8
- )
9
-
10
- ANCHOR_CURRENCY = "BTC"
11
-
12
- FETCH_URL = "https://api.exmo.com/v1/ticker/"
13
-
14
- def normalize(data)
15
- return nil unless super
16
- data.reduce({ "anchor" => ANCHOR_CURRENCY }) do |result, (key, value)|
17
- if key.split("_")[0] == ANCHOR_CURRENCY
18
- result[key.sub("#{self.class::ANCHOR_CURRENCY}_", "")] = BigDecimal(value["avg"].to_s)
19
- elsif key.split("_")[1] == ANCHOR_CURRENCY
20
- result[key.sub("_#{self.class::ANCHOR_CURRENCY}", "")] = 1 / BigDecimal(value["avg"].to_s)
21
- end
22
- result
23
- end
24
- end
25
-
26
- end
27
- end
@@ -1,61 +0,0 @@
1
- module CurrencyRate
2
- class HitBTCAdapter < Adapter
3
- SUPPORTED_CURRENCIES = %w(ZRC EDG IHT AEON SOC HBAR ZRX OPT APPC DRGN PTOY
4
- XDN OKB CHSB NCT GUSD GET FUN EXP EMRX REV GHOST
5
- BMH SNC DTR ERD SCL HMQ ACT ETC QTUM MTX SBTC
6
- KIND SMT BTB SWFTC 1ST UTT AXPR NMR EVX IOTA XPRM
7
- STMX SALT DGB NTK AMM ALGO ORMEUS BDG BQX EKO FYP
8
- IPX HOT MG BTS ADX CRPT WAXP POA PLBT SHIP HTML
9
- BOX GNO UBT BTT ZEN VEO POA20 BCPT SRN XPR ETHBNT
10
- MANA QKC MLN FLP SOLO TRUE VSYS JST GNT BOS PHB
11
- ZEC ESH SWM NANO VIBE HVN SOLVE ELEC LRC AGI LNC
12
- WAVES WTC ONT STRAT GNX NEU BCN XPNT ECA ARDR KIN
13
- LSK USE IOTX CRO IDH LINK OAX CPT NGC XNS KEY TKY
14
- HSR TNT SMART TRST DCR WINGS GT MKR ONE DOGE ARN
15
- ACAT BMC RAISE EXM TIME REX FDZ HT MTH SCC BET
16
- DENT IDRT IPL ZAP CMCT TDP XAUR MTL NEBL SUSDT BAT
17
- STEEM CUR BYTZ PRO LOOM USD DRG DICE ADK COMP DRT
18
- XTZ WETH EURS CHZ NEO NPLC XCON LEVL PAX AIM PART
19
- PRE ERK HEDG FET PAXG DAG AVA CUTE NEXO DAY PITCH
20
- MITX NXT POWR PLR CVCOIN TUSD MYST DLT REM RLC DNA
21
- FOTA SBD ELF TEL C20 PNT CND UTK ASI CVC ETP ETH
22
- ZIL ARPA INK NPXS LEO MESH NIM DATX FXT PBT GST
23
- BSV GAS CBC MCO SENT GBX XRC POE SUR LOC WIKI PPT
24
- CVT APM LEND NUT DOV KMD AYA LUN XEM RVN BCD XMR
25
- NWC USG CLO NLC2 BBTC BERRY ART GRIN VITAE XBP OMG
26
- MDA KRL BCH POLY PLA BANCA ENJ TRIGX UUU PASS ANT
27
- LAMB BIZZ RFR AMB ROOBEE BST LCC RCN MIN BUSD DIT
28
- PPC AE IQ BNK CENNZ SUB OCN DGD VRA STX AERGO HGT
29
- TRAD IGNIS REP DAPP DNT CDT YCC SNGLS ICX PKT COV
30
- PAY ABYSS BLZ DAV TKN ERT SPC SEELE XZC MAID AUTO
31
- REN DATA AUC TV LAVA KAVA DAI DAPS ADA COCOS MITH
32
- SETH NRG PHX DASH VLX CHAT VET EOSDT ZSC KNC DGTX
33
- CEL SHORTUSD IOST BNB PBTT XMC EMC VIB BNT STORJ
34
- ATOM LCX SC FTT BTM XLM TRX CELR BRD DBIX ETN SNT
35
- MOF HEX XUC PLU FACE TNC SIG PXG BDP BTX TAU DCT
36
- YOYOW SYBC SWT MAN GLEEC EOS XVG NAV CURE XRP KICK
37
- BRDG LTC USDC MATIC FTX BTG PMA).freeze
38
-
39
- ANCHOR_CURRENCY = "BTC".freeze
40
-
41
- FETCH_URL = "https://api.hitbtc.com/api/2/public/ticker".freeze
42
-
43
- def normalize(data)
44
- return nil unless super
45
-
46
- data.each_with_object({ "anchor" => ANCHOR_CURRENCY }) do |pair_info, result|
47
- pair_name = pair_info["symbol"]
48
- next unless pair_name.include?(ANCHOR_CURRENCY)
49
-
50
- key = pair_name.sub(ANCHOR_CURRENCY, "")
51
-
52
- result[key] =
53
- if pair_name.index(ANCHOR_CURRENCY) == 0
54
- BigDecimal(pair_info["last"])
55
- else
56
- 1 / BigDecimal(pair_info["last"])
57
- end
58
- end
59
- end
60
- end
61
- end
@@ -1,25 +0,0 @@
1
- module CurrencyRate
2
- class HuobiAdapter < Adapter
3
- FETCH_URL = "https://api.huobi.pro/market/tickers".freeze
4
-
5
- ANCHOR_CURRENCY = "BTC"
6
-
7
- def normalize(data)
8
- return nil unless super
9
-
10
- data["data"].each_with_object({ "anchor" => ANCHOR_CURRENCY }) do |pair_info, result|
11
- pair_name = pair_info["symbol"].upcase
12
- next unless pair_name.include?(ANCHOR_CURRENCY)
13
-
14
- key = pair_name.sub(ANCHOR_CURRENCY, "")
15
-
16
- result[key] =
17
- if pair_name.index(ANCHOR_CURRENCY) == 0
18
- BigDecimal(pair_info["close"].to_s)
19
- else
20
- 1 / BigDecimal(pair_info["close"].to_s)
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,46 +0,0 @@
1
- module CurrencyRate
2
- class KrakenAdapter < Adapter
3
- SUPPORTED_CURRENCIES = %w(
4
- ADA BCH BSV BTC DAI DASH EOS ETC ETH GNO LTC MLN
5
- NMC QTUM REP USDC XDG XLM XMR XRP XTZ ZEC
6
- )
7
-
8
- ASSET_MAP = {
9
- "XXBTZ" => "BTC",
10
- "XETCX" => "ETC",
11
- "XETHX" => "ETH",
12
- "XLTCX" => "LTC",
13
- "XREPX" => "REP",
14
- "XXLMX" => "XLM",
15
- "XXMRX" => "XMR",
16
- "XXRPX" => "XRP",
17
- "XZECX" => "ZEC",
18
- "XZUSD" => "USD",
19
- "BTC" => "XBT",
20
- }
21
-
22
- ANCHOR_CURRENCY = "BTC"
23
-
24
- FETCH_URL = "https://api.kraken.com/0/public/Ticker?pair=#{ %w(ADAXBT BCHXBT BSVXBT DASHXBT EOSXBT GNOXBT QTUMXBT XTZXBT XETCXXBT XETHXXBT XLTCXXBT XREPXXBT XXLMXXBT XXMRXXBT XXRPXXBT XZECXXBT XXBTZUSD XBTDAI XBTUSDC).join(",") }"
25
-
26
- def normalize(data)
27
- return nil unless super
28
- data["result"].reduce({ "anchor" => ANCHOR_CURRENCY }) do |result, (pair, value)|
29
- key = ta(pair.sub(ta(ANCHOR_CURRENCY), ""))
30
-
31
- if %w(USD DAI USDC).include?(key)
32
- result[key] = BigDecimal(value["c"].first.to_s)
33
- else
34
- result[key] = 1 / BigDecimal(value["c"].first.to_s)
35
- end
36
- result
37
- end
38
- end
39
-
40
- def translate_asset(asset)
41
- ASSET_MAP[asset] || asset
42
- end
43
- alias_method :ta, :translate_asset
44
-
45
- end
46
- end