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.
- checksums.yaml +4 -4
- metadata +9 -125
- data/.document +0 -5
- data/.gitignore +0 -20
- data/.rspec +0 -1
- data/Gemfile +0 -6
- data/Gemfile.lock +0 -68
- data/LICENSE.txt +0 -20
- data/README.md +0 -73
- data/Rakefile +0 -43
- data/api_keys.yml.sample +0 -4
- data/currency-rate.gemspec +0 -41
- data/lib/adapter.rb +0 -71
- data/lib/adapters/crypto/binance_adapter.rb +0 -42
- data/lib/adapters/crypto/bitfinex_adapter.rb +0 -41
- data/lib/adapters/crypto/bitpay_adapter.rb +0 -29
- data/lib/adapters/crypto/bitstamp_adapter.rb +0 -26
- data/lib/adapters/crypto/btc_china_adapter.rb +0 -11
- data/lib/adapters/crypto/btc_e_adapter.rb +0 -18
- data/lib/adapters/crypto/coin_market_cap_adapter.rb +0 -31
- data/lib/adapters/crypto/coinbase_adapter.rb +0 -30
- data/lib/adapters/crypto/exmo_adapter.rb +0 -27
- data/lib/adapters/crypto/hit_btc_adapter.rb +0 -61
- data/lib/adapters/crypto/huobi_adapter.rb +0 -25
- data/lib/adapters/crypto/kraken_adapter.rb +0 -46
- data/lib/adapters/crypto/localbitcoins_adapter.rb +0 -25
- data/lib/adapters/crypto/okcoin_adapter.rb +0 -19
- data/lib/adapters/crypto/paxful_adapter.rb +0 -18
- data/lib/adapters/crypto/poloniex_adapter.rb +0 -33
- data/lib/adapters/crypto/yadio_adapter.rb +0 -19
- data/lib/adapters/fiat/bonbast_adapter.rb +0 -25
- data/lib/adapters/fiat/coinmonitor_adapter.rb +0 -14
- data/lib/adapters/fiat/currency_layer_adapter.rb +0 -32
- data/lib/adapters/fiat/fixer_adapter.rb +0 -18
- data/lib/adapters/fiat/forge_adapter.rb +0 -25
- data/lib/adapters/fiat/free_forex_adapter.rb +0 -32
- data/lib/adapters/fiat/yahoo_adapter.rb +0 -35
- data/lib/configuration.rb +0 -28
- data/lib/currency_rate.rb +0 -85
- data/lib/currency_rate/version.rb +0 -3
- data/lib/exceptions.rb +0 -9
- data/lib/fetcher.rb +0 -80
- data/lib/storage/file_storage.rb +0 -29
- data/lib/storage/serializers/yaml_serializer.rb +0 -15
- 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,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
|