currency-rate 1.6.1 → 2.0.5
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.
- checksums.yaml +4 -4
- metadata +8 -121
- 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 -40
- 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/huobi_adapter.rb +0 -17
- 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/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 -29
- data/lib/currency_rate.rb +0 -84
- data/lib/currency_rate/version.rb +0 -3
- data/lib/fetcher.rb +0 -78
- data/lib/storage/file_storage.rb +0 -29
- data/lib/storage/serializers/yaml_serializer.rb +0 -15
- data/lib/synchronizer.rb +0 -51
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,40 +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 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
|
-
}
|
17
|
-
|
18
|
-
ANCHOR_CURRENCY = "BTC"
|
19
|
-
|
20
|
-
FETCH_URL = "https://api.bitfinex.com/v2/tickers?symbols=ALL"
|
21
|
-
|
22
|
-
def normalize(data)
|
23
|
-
return nil unless super
|
24
|
-
data.reduce({ "anchor" => ANCHOR_CURRENCY }) do |result, pair_info|
|
25
|
-
pair_name = pair_info[0].sub("t", "")
|
26
|
-
key = pair_name.sub(ANCHOR_CURRENCY, "")
|
27
|
-
key = ASSET_MAP[key] || key
|
28
|
-
|
29
|
-
if pair_name.index(ANCHOR_CURRENCY) == 0
|
30
|
-
result[key] = BigDecimal(pair_info[7].to_s)
|
31
|
-
elsif pair_name.index(ANCHOR_CURRENCY) == 3
|
32
|
-
result[key] = 1 / BigDecimal(pair_info[7].to_s)
|
33
|
-
end
|
34
|
-
|
35
|
-
result
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
40
|
-
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,17 +0,0 @@
|
|
1
|
-
module CurrencyRate
|
2
|
-
class HuobiAdapter < Adapter
|
3
|
-
FETCH_URL = {
|
4
|
-
"BTC_CNY" => "http://api.huobi.com/staticmarket/ticker_btc_json.js",
|
5
|
-
"LTC_CNY" => "http://api.huobi.com/staticmarket/ticker_ltc_json.js"
|
6
|
-
}
|
7
|
-
|
8
|
-
def normalize(data)
|
9
|
-
return nil unless super
|
10
|
-
data.reduce({}) do |result, (pair, value)|
|
11
|
-
result[pair] = BigDecimal(value["ticker"]["last"].to_s)
|
12
|
-
result
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
17
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
module CurrencyRate
|
2
|
-
class KrakenAdapter < Adapter
|
3
|
-
SUPPORTED_CURRENCIES = %w(
|
4
|
-
ADA BCH BSV BTC DASH EOS ETC ETH GNO LTC MLN
|
5
|
-
NMC QTUM REP 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).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 key == "USD"
|
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
|
@@ -1,25 +0,0 @@
|
|
1
|
-
module CurrencyRate
|
2
|
-
class LocalbitcoinsAdapter < Adapter
|
3
|
-
# No need to use it for fetching, just additional information about supported currencies
|
4
|
-
SUPPORTED_CURRENCIES = %w(
|
5
|
-
AED AOA ARS AUD BDT BRL BYN CAD CHF CLP CNY COP CRC CZK DKK DOP EGP ETH
|
6
|
-
EUR GBP GEL GHS HKD HUF IDR ILS INR IRR JOD JPY KES KRW KWD KZT LKR LTC
|
7
|
-
MAD MWK MXN MYR NGN NOK NZD OMR PAB PEN PHP PKR PLN QAR RON RSD RUB RWF
|
8
|
-
SAR SEK SGD SZL THB TRY TWD TZS UAH UGX USD UYU VES VND XAF XMR XOF XRP
|
9
|
-
ZAR ZMW
|
10
|
-
)
|
11
|
-
|
12
|
-
ANCHOR_CURRENCY = "BTC"
|
13
|
-
|
14
|
-
FETCH_URL = 'https://localbitcoins.com/bitcoinaverage/ticker-all-currencies/'
|
15
|
-
|
16
|
-
def normalize(data)
|
17
|
-
return nil unless super
|
18
|
-
data.reduce({ "anchor" => ANCHOR_CURRENCY }) do |result, (fiat, value)|
|
19
|
-
result["#{fiat.upcase}"] = BigDecimal(value["rates"]["last"].to_s)
|
20
|
-
result
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module CurrencyRate
|
2
|
-
class OkcoinAdapter < Adapter
|
3
|
-
FETCH_URL = {
|
4
|
-
'LTC_USD' => 'https://www.okcoin.com/api/v1/ticker.do?symbol=ltc_usd',
|
5
|
-
'BTC_USD' => 'https://www.okcoin.com/api/v1/ticker.do?symbol=btc_usd',
|
6
|
-
'LTC_CNY' => 'https://www.okcoin.cn/api/ticker.do?symbol=ltc_cny',
|
7
|
-
'BTC_CNY' => 'https://www.okcoin.cn/api/ticker.do?symbol=btc_cny'
|
8
|
-
}
|
9
|
-
|
10
|
-
def normalize(data)
|
11
|
-
return nil unless super
|
12
|
-
data.reduce({}) do |result, (pair, value)|
|
13
|
-
result[pair] = BigDecimal(value["ticker"]["last"].to_s)
|
14
|
-
result
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
end
|