currency-rate 2.0.0 → 2.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. metadata +8 -119
  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/currency-rate.gemspec +0 -41
  12. data/lib/adapter.rb +0 -100
  13. data/lib/adapters/crypto/binance_adapter.rb +0 -42
  14. data/lib/adapters/crypto/bitfinex_adapter.rb +0 -41
  15. data/lib/adapters/crypto/bitpay_adapter.rb +0 -29
  16. data/lib/adapters/crypto/bitstamp_adapter.rb +0 -26
  17. data/lib/adapters/crypto/coin_market_cap_adapter.rb +0 -29
  18. data/lib/adapters/crypto/coinbase_adapter.rb +0 -30
  19. data/lib/adapters/crypto/exmo_adapter.rb +0 -27
  20. data/lib/adapters/crypto/hit_BTC_adapter.rb +0 -64
  21. data/lib/adapters/crypto/huobi_adapter.rb +0 -25
  22. data/lib/adapters/crypto/kraken_adapter.rb +0 -46
  23. data/lib/adapters/crypto/localbitcoins_adapter.rb +0 -25
  24. data/lib/adapters/crypto/okcoin_adapter.rb +0 -17
  25. data/lib/adapters/crypto/paxful_adapter.rb +0 -18
  26. data/lib/adapters/crypto/poloniex_adapter.rb +0 -33
  27. data/lib/adapters/crypto/yadio_adapter.rb +0 -19
  28. data/lib/adapters/fiat/bonbast_adapter.rb +0 -23
  29. data/lib/adapters/fiat/coinmonitor_adapter.rb +0 -13
  30. data/lib/adapters/fiat/currency_layer_adapter.rb +0 -31
  31. data/lib/adapters/fiat/fixer_adapter.rb +0 -17
  32. data/lib/adapters/fiat/forge_adapter.rb +0 -34
  33. data/lib/adapters/fiat/free_forex_adapter.rb +0 -36
  34. data/lib/container.rb +0 -203
  35. data/lib/currency_rate.rb +0 -41
  36. data/lib/currency_rate/version.rb +0 -3
  37. data/lib/exceptions.rb +0 -9
  38. data/lib/storage/file_storage.rb +0 -34
  39. data/lib/storage/serializers/yaml_serializer.rb +0 -15
  40. data/lib/utils/string_extensions.rb +0 -19
data/lib/adapter.rb DELETED
@@ -1,100 +0,0 @@
1
- module CurrencyRate
2
- class Adapter
3
- include Singleton
4
-
5
- SUPPORTED_CURRENCIES = []
6
- FETCH_URL = nil
7
-
8
- attr_reader :rates
9
- attr_accessor :container
10
- attr_accessor :api_key
11
-
12
- def name(format=:snake_case)
13
- @camel_case_name ||= self.class.name.gsub(/^.*::/, "").sub("Adapter", "")
14
- @snake_case_name ||= @camel_case_name.to_snake_case
15
- format == :camel_case ? @camel_case_name : @snake_case_name
16
- end
17
-
18
- def get_rate(from, to)
19
- @rates = @container.storage.read(self.name) if @rates.nil? && @container.storage.exists?(self.name)
20
- return BigDecimal(rates[to]) if ANCHOR_CURRENCY == from && rates[to]
21
- return BigDecimal(1 / rates[from]) if ANCHOR_CURRENCY == to && rates[from]
22
- return BigDecimal(rates[to] / rates[from]) if rates[from] && rates[to]
23
- nil
24
- end
25
-
26
- def fetch_rates
27
- begin
28
- @rates = normalize(exchange_data)
29
- rescue StandardError => e
30
- @container.log(:error, e)
31
- nil
32
- end
33
- end
34
-
35
- def normalize(data)
36
- @rates = if data.nil?
37
- @container.log(:warn, "#{self.name}#normalize: data is nil")
38
- return nil
39
- else
40
- parse_raw_data(data)
41
- end
42
- end
43
-
44
- def exchange_data
45
- raise "FETCH_URL is not defined!" unless self.class::FETCH_URL
46
-
47
- begin
48
- if self.class::FETCH_URL.kind_of?(Hash)
49
- self.class::FETCH_URL.each_with_object({}) do |(name, url), result|
50
- result[name] = request url
51
- end
52
- else
53
- result = request self.class::FETCH_URL
54
- end
55
- rescue StandardError => e
56
- @container.log(:error, e)
57
- nil
58
- end
59
- end
60
-
61
- def url_with_api_key(url)
62
- if url.include?("__API_KEY__")
63
- if api_key.nil?
64
- @container.log(:error, "API key for #{self.name} is not set")
65
- return nil
66
- else
67
- url.sub("__API_KEY__", api_key.strip)
68
- end
69
- else
70
- url
71
- end
72
- end
73
-
74
- def request(url)
75
- unless url = url_with_api_key(url)
76
- return nil
77
- end
78
- http_client = HTTP.timeout(connect: @container.connect_timeout, read: @container.read_timeout)
79
- http_client
80
- .headers("Accept" => "application/json; version=1")
81
- .headers("Content-Type" => "text/plain")
82
- .get(url)
83
- .to_s
84
- end
85
-
86
- def parse_raw_data(data)
87
- if data.kind_of?(Hash)
88
- data.each { |k,v| data[k] = parse_raw_data(v) }
89
- data
90
- else
91
- begin
92
- return JSON.parse(data)
93
- rescue JSON::ParserError
94
- return data
95
- end
96
- end
97
- end
98
-
99
- end
100
- 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 data = 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 data = 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 data = 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 data = 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,29 +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
- FETCH_URL = "https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest?CMC_PRO_API_KEY=__API_KEY__"
16
-
17
- def normalize(data)
18
- return nil unless data = super
19
- data["data"].each_with_object({ "anchor" => ANCHOR_CURRENCY }) do |payload, result|
20
- if payload["symbol"] == ANCHOR_CURRENCY
21
- result["USD"] = BigDecimal(payload["quote"]["USD"]["price"].to_s)
22
- else
23
- result[payload["symbol"]] = result["USD"] / BigDecimal(payload["quote"]["USD"]["price"].to_s)
24
- end
25
- end
26
- end
27
-
28
- end
29
- 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(data)
22
- return nil unless data = super
23
- data["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 data = 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,64 +0,0 @@
1
- module CurrencyRate
2
- class HitBTCAdapter < Adapter
3
- SUPPORTED_CURRENCIES = %w(
4
- ZRC EDG IHT AEON SOC HBAR ZRX OPT APPC DRGN PTOY
5
- XDN OKB CHSB NCT GUSD GET FUN EXP EMRX REV GHOST
6
- BMH SNC DTR ERD SCL HMQ ACT ETC QTUM MTX SBTC
7
- KIND SMT BTB SWFTC 1ST UTT AXPR NMR EVX IOTA XPRM
8
- STMX SALT DGB NTK AMM ALGO ORMEUS BDG BQX EKO FYP
9
- IPX HOT MG BTS ADX CRPT WAXP POA PLBT SHIP HTML
10
- BOX GNO UBT BTT ZEN VEO POA20 BCPT SRN XPR ETHBNT
11
- MANA QKC MLN FLP SOLO TRUE VSYS JST GNT BOS PHB
12
- ZEC ESH SWM NANO VIBE HVN SOLVE ELEC LRC AGI LNC
13
- WAVES WTC ONT STRAT GNX NEU BCN XPNT ECA ARDR KIN
14
- LSK USE IOTX CRO IDH LINK OAX CPT NGC XNS KEY TKY
15
- HSR TNT SMART TRST DCR WINGS GT MKR ONE DOGE ARN
16
- ACAT BMC RAISE EXM TIME REX FDZ HT MTH SCC BET
17
- DENT IDRT IPL ZAP CMCT TDP XAUR MTL NEBL SUSDT BAT
18
- STEEM CUR BYTZ PRO LOOM USD DRG DICE ADK COMP DRT
19
- XTZ WETH EURS CHZ NEO NPLC XCON LEVL PAX AIM PART
20
- PRE ERK HEDG FET PAXG DAG AVA CUTE NEXO DAY PITCH
21
- MITX NXT POWR PLR CVCOIN TUSD MYST DLT REM RLC DNA
22
- FOTA SBD ELF TEL C20 PNT CND UTK ASI CVC ETP ETH
23
- ZIL ARPA INK NPXS LEO MESH NIM DATX FXT PBT GST
24
- BSV GAS CBC MCO SENT GBX XRC POE SUR LOC WIKI PPT
25
- CVT APM LEND NUT DOV KMD AYA LUN XEM RVN BCD XMR
26
- NWC USG CLO NLC2 BBTC BERRY ART GRIN VITAE XBP OMG
27
- MDA KRL BCH POLY PLA BANCA ENJ TRIGX UUU PASS ANT
28
- LAMB BIZZ RFR AMB ROOBEE BST LCC RCN MIN BUSD DIT
29
- PPC AE IQ BNK CENNZ SUB OCN DGD VRA STX AERGO HGT
30
- TRAD IGNIS REP DAPP DNT CDT YCC SNGLS ICX PKT COV
31
- PAY ABYSS BLZ DAV TKN ERT SPC SEELE XZC MAID AUTO
32
- REN DATA AUC TV LAVA KAVA DAI DAPS ADA COCOS MITH
33
- SETH NRG PHX DASH VLX CHAT VET EOSDT ZSC KNC DGTX
34
- CEL SHORTUSD IOST BNB PBTT XMC EMC VIB BNT STORJ
35
- ATOM LCX SC FTT BTM XLM TRX CELR BRD DBIX ETN SNT
36
- MOF HEX XUC PLU FACE TNC SIG PXG BDP BTX TAU DCT
37
- YOYOW SYBC SWT MAN GLEEC EOS XVG NAV CURE XRP KICK
38
- BRDG LTC USDC MATIC FTX BTG PMA
39
- ).freeze
40
-
41
- ANCHOR_CURRENCY = "BTC".freeze
42
-
43
- FETCH_URL = "https://api.hitbtc.com/api/2/public/ticker".freeze
44
-
45
- def normalize(data)
46
- return nil unless data = super
47
-
48
- data.each_with_object({ "anchor" => ANCHOR_CURRENCY }) do |pair_info, result|
49
- pair_name = pair_info["symbol"]
50
- next unless pair_name.include?(ANCHOR_CURRENCY)
51
- next unless pair_info["last"]
52
-
53
- key = pair_name.sub(ANCHOR_CURRENCY, "")
54
-
55
- result[key] =
56
- if pair_name.index(ANCHOR_CURRENCY) == 0
57
- BigDecimal(pair_info["last"])
58
- else
59
- 1 / BigDecimal(pair_info["last"])
60
- end
61
- end
62
- end
63
- end
64
- 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 data = 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 data = 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