currency-rate 1.7.0 → 2.0.6

Sign up to get free protection for your applications and to get access to all the features.
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