currency-rate 0.4.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +3 -4
- data/README.md +41 -53
- data/VERSION +1 -1
- data/currency-rate.gemspec +92 -78
- data/lib/adapter.rb +37 -83
- data/lib/adapters/crypto/bitfinex_adapter.rb +17 -0
- data/lib/adapters/crypto/bitpay_adapter.rb +14 -0
- data/lib/adapters/crypto/bitstamp_adapter.rb +19 -0
- data/lib/adapters/crypto/btc_china_adapter.rb +11 -0
- data/lib/adapters/crypto/btc_e_adapter.rb +18 -0
- data/lib/adapters/crypto/coinbase_adapter.rb +14 -0
- data/lib/adapters/crypto/huobi_adapter.rb +17 -0
- data/lib/adapters/crypto/kraken_adapter.rb +29 -0
- data/lib/adapters/crypto/localbitcoins_adapter.rb +14 -0
- data/lib/adapters/crypto/okcoin_adapter.rb +19 -0
- data/lib/adapters/fiat/fixer_adapter.rb +16 -0
- data/lib/adapters/fiat/forge_adapter.rb +23 -0
- data/lib/adapters/fiat/yahoo_adapter.rb +35 -0
- data/lib/configuration.rb +21 -0
- data/lib/currency_rate.rb +52 -48
- data/lib/fetcher.rb +71 -0
- data/lib/storage/file_storage.rb +29 -0
- data/lib/storage/serializers/yaml_serializer.rb +15 -0
- data/lib/synchronizer.rb +31 -0
- data/spec/fixtures/adapters/bitfinex_adapter.yml +18 -0
- data/spec/fixtures/adapters/bitpay_adapter.yml +486 -0
- data/spec/fixtures/adapters/bitstamp_adapter.yml +30 -0
- data/spec/fixtures/adapters/btc_china_adapter.yml +11 -0
- data/spec/fixtures/adapters/btce_adapter.yml +60 -0
- data/spec/fixtures/adapters/coinbase_adapter.yml +680 -0
- data/spec/fixtures/adapters/fixer_adapter.yml +34 -0
- data/spec/fixtures/adapters/forge_adapter.yml +75 -0
- data/spec/fixtures/adapters/huobi_adapter.yml +22 -0
- data/spec/fixtures/adapters/kraken_adapter.yml +124 -0
- data/spec/fixtures/adapters/localbitcoins_adapter.yml +381 -0
- data/spec/fixtures/adapters/normalized/bitfinex_adapter.yml +2 -0
- data/spec/fixtures/adapters/normalized/bitpay_adapter.yml +161 -0
- data/spec/fixtures/adapters/normalized/bitstamp_adapter.yml +3 -0
- data/spec/fixtures/adapters/normalized/btc_china_adapter.yml +1 -0
- data/spec/fixtures/adapters/normalized/btce_adapter.yml +5 -0
- data/spec/fixtures/adapters/normalized/coinbase_adapter.yml +680 -0
- data/spec/fixtures/adapters/normalized/fixer_adapter.yml +32 -0
- data/spec/fixtures/adapters/normalized/forge_adapter.yml +16 -0
- data/spec/fixtures/adapters/normalized/huobi_adapter.yml +2 -0
- data/spec/fixtures/adapters/normalized/kraken_adapter.yml +4 -0
- data/spec/fixtures/adapters/normalized/localbitcoins_adapter.yml +57 -0
- data/spec/fixtures/adapters/normalized/okcoin_adapter.yml +4 -0
- data/spec/fixtures/adapters/normalized/yahoo_adapter.yml +160 -0
- data/spec/fixtures/adapters/okcoin_adapter.yml +40 -0
- data/spec/fixtures/adapters/yahoo_adapter.yml +1119 -0
- data/spec/lib/adapter_spec.rb +54 -0
- data/spec/lib/adapters/crypto/bitfinex_adapter_spec.rb +13 -0
- data/spec/lib/adapters/crypto/bitpay_adapter_spec.rb +13 -0
- data/spec/lib/adapters/crypto/bitstamp_adapter_spec.rb +13 -0
- data/spec/lib/adapters/crypto/btc_china_adapter_spec.rb +13 -0
- data/spec/lib/adapters/crypto/btc_e_adapter_spec.rb +13 -0
- data/spec/lib/adapters/crypto/coinbase_adapter_spec.rb +13 -0
- data/spec/lib/adapters/crypto/huobi_adapter_spec.rb +13 -0
- data/spec/lib/adapters/crypto/kraken_adapter_spec.rb +13 -0
- data/spec/lib/adapters/crypto/localbitcoins_adapter_spec.rb +13 -0
- data/spec/lib/adapters/crypto/okcoin_adapter_spec.rb +13 -0
- data/spec/lib/adapters/fiat/fixer_adapter_spec.rb +13 -0
- data/spec/lib/adapters/fiat/forge_adapter_spec.rb +23 -0
- data/spec/lib/adapters/fiat/yahoo_adapter_spec.rb +13 -0
- data/spec/lib/currency_rate_spec.rb +9 -0
- data/spec/lib/fetcher_spec.rb +156 -0
- data/spec/lib/storage/file_storage_spec.rb +38 -0
- data/spec/lib/synchronizer_spec.rb +65 -0
- data/spec/spec_helper.rb +23 -8
- data/spec/support/matchers/eq_any_of.rb +3 -0
- metadata +67 -64
- data/Gemfile.lock +0 -93
- data/lib/core_ext/deep_get.rb +0 -11
- data/lib/crypto_adapter.rb +0 -19
- data/lib/crypto_adapters/average_rate_adapter.rb +0 -54
- data/lib/crypto_adapters/bitfinex_adapter.rb +0 -40
- data/lib/crypto_adapters/bitpay_adapter.rb +0 -33
- data/lib/crypto_adapters/bitstamp_adapter.rb +0 -44
- data/lib/crypto_adapters/btcchina_adapter.rb +0 -19
- data/lib/crypto_adapters/btce_adapter.rb +0 -44
- data/lib/crypto_adapters/coinbase_adapter.rb +0 -23
- data/lib/crypto_adapters/huobi_adapter.rb +0 -40
- data/lib/crypto_adapters/kraken_adapter.rb +0 -42
- data/lib/crypto_adapters/localbitcoins_adapter.rb +0 -30
- data/lib/crypto_adapters/okcoin_adapter.rb +0 -43
- data/lib/fiat_adapter.rb +0 -17
- data/lib/fiat_adapters/fixer_adapter.rb +0 -38
- data/lib/fiat_adapters/yahoo_adapter.rb +0 -51
- data/lib/storage.rb +0 -20
- data/spec/currency_rate_spec.rb +0 -52
- data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/average_rate_adapter.yml +0 -567
- data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/bitfinex_adapter.yml +0 -121
- data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/bitpay_adapter.yml +0 -272
- data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/btcchina_adapter.yml +0 -55
- data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/btce_adapter.yml +0 -223
- data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/coinbase_adapter.yml +0 -96
- data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/huobi_adapter.yml +0 -83
- data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/kraken_adapter.yml +0 -179
- data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/localbitcoins_adapter.yml +0 -133
- data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/okcoin_adapter.yml +0 -223
- data/spec/fixtures/vcr/exchange_rate_adapters/fiat_adapters/fixer_adapter.yml +0 -85
- data/spec/fixtures/vcr/exchange_rate_adapters/fiat_adapters/yahoo_adapter.yml +0 -48
- data/spec/lib/crypto_adapter_spec.rb +0 -56
- data/spec/lib/crypto_adapters/average_rate_adapter_spec.rb +0 -46
- data/spec/lib/crypto_adapters/bitfinex_adapter_spec.rb +0 -38
- data/spec/lib/crypto_adapters/bitpay_adapter_spec.rb +0 -40
- data/spec/lib/crypto_adapters/bitstamp_adapter_spec.rb +0 -44
- data/spec/lib/crypto_adapters/btcchina_adapter_spec.rb +0 -36
- data/spec/lib/crypto_adapters/btce_adapter_spec.rb +0 -42
- data/spec/lib/crypto_adapters/coinbase_adapter_spec.rb +0 -39
- data/spec/lib/crypto_adapters/huobi_adapter_spec.rb +0 -38
- data/spec/lib/crypto_adapters/kraken_adapter_spec.rb +0 -38
- data/spec/lib/crypto_adapters/localbitcoins_adapter_spec.rb +0 -36
- data/spec/lib/crypto_adapters/okcoin_adapter_spec.rb +0 -43
- data/spec/lib/fiat_adapters/fixer_adapter_spec.rb +0 -25
- data/spec/lib/fiat_adapters/yahoo_adapter_spec.rb +0 -25
- data/spec/lib/storage_spec.rb +0 -32
@@ -1,56 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
RSpec.describe CurrencyRate::CryptoAdapter do
|
4
|
-
|
5
|
-
class CurrencyRate::Adapter
|
6
|
-
FETCH_URL = ''
|
7
|
-
DEFAULT_CURRENCIES = { from: "BTC", to: "USD" }
|
8
|
-
end
|
9
|
-
|
10
|
-
class SomeExchangeAdapter < CurrencyRate::CryptoAdapter
|
11
|
-
SUPPORTED_CRYPTO_CURRENCIES = ["BTC"]
|
12
|
-
|
13
|
-
def rate_for(from,to)
|
14
|
-
super
|
15
|
-
rate = rate_to_f(750)
|
16
|
-
invert_rate(from,to,rate)
|
17
|
-
end
|
18
|
-
|
19
|
-
def supported_currency_pairs
|
20
|
-
["USD/BTC"]
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
before(:each) do
|
25
|
-
@exchange_adapter = CurrencyRate::CryptoAdapter.instance
|
26
|
-
end
|
27
|
-
|
28
|
-
it "inverts currency rate when needed" do
|
29
|
-
allow(SomeExchangeAdapter.instance).to receive(:fetch_rates!)
|
30
|
-
@exchange_adapter = SomeExchangeAdapter.instance
|
31
|
-
expect(@exchange_adapter.rate_for('USD', 'BTC')).to eq(0.001333333)
|
32
|
-
end
|
33
|
-
|
34
|
-
|
35
|
-
it "when checking for rates, only calls fetch_rates! if they were checked long time ago or never" do
|
36
|
-
uri_mock = double('uri mock')
|
37
|
-
expect(URI).to receive(:parse).and_return(uri_mock).once
|
38
|
-
expect(uri_mock).to receive(:read).and_return('{ "USD": 534.4343 }').once
|
39
|
-
allow(@exchange_adapter).to receive(:supported_currency_pairs).and_return(["USD/BTC"])
|
40
|
-
@exchange_adapter.rate_for('USD', 'BTC')
|
41
|
-
@exchange_adapter.rate_for('USD', 'BTC') # not calling fetch_rates! because we've just checked
|
42
|
-
@exchange_adapter.instance_variable_set(:@rates_updated_at, Time.now-1900)
|
43
|
-
@exchange_adapter.rate_for('USD', 'BTC')
|
44
|
-
end
|
45
|
-
|
46
|
-
it "raises exception if rate is nil" do
|
47
|
-
rate = nil
|
48
|
-
expect( -> { @exchange_adapter.rate_to_f(rate) }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
49
|
-
end
|
50
|
-
|
51
|
-
it "raises exception if target currency is not in supported currencies" do
|
52
|
-
@exchange_adapter = SomeExchangeAdapter.instance
|
53
|
-
expect( -> { @exchange_adapter.rate_for("BTC", "CNY") }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
54
|
-
end
|
55
|
-
|
56
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
RSpec.describe CurrencyRate::AverageRateAdapter do
|
4
|
-
|
5
|
-
before :each do
|
6
|
-
VCR.insert_cassette 'exchange_rate_adapters/btc_adapters/average_rate_adapter'
|
7
|
-
end
|
8
|
-
|
9
|
-
after :each do
|
10
|
-
VCR.eject_cassette
|
11
|
-
end
|
12
|
-
|
13
|
-
before(:each) do
|
14
|
-
@average_rates_adapter = CurrencyRate::AverageRateAdapter.instance(
|
15
|
-
CurrencyRate::BitstampAdapter,
|
16
|
-
CurrencyRate::BitpayAdapter.instance,
|
17
|
-
)
|
18
|
-
end
|
19
|
-
|
20
|
-
it "calculates average rate" do
|
21
|
-
expect(@average_rates_adapter.rate_for('BTC', 'USD')).to eq 1016.38
|
22
|
-
end
|
23
|
-
|
24
|
-
it "fetches rates for all adapters" do
|
25
|
-
expect(@average_rates_adapter.fetch_rates!).not_to be_empty
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'raises error if all adapters failed to fetch rates' do
|
29
|
-
adapter_mocks = [double('adapter_1'), double('adapter_2')]
|
30
|
-
adapter_mocks.each do |adapter|
|
31
|
-
expect(adapter).to receive(:fetch_rates!).and_raise(CurrencyRate::Adapter::FetchingFailed)
|
32
|
-
end
|
33
|
-
average_rates_adapter = CurrencyRate::AverageRateAdapter.instance(*adapter_mocks)
|
34
|
-
expect( -> { average_rates_adapter.fetch_rates! }).to raise_error(CurrencyRate::Adapter::FetchingFailed)
|
35
|
-
end
|
36
|
-
|
37
|
-
it "raises exception if all adapters fail to get rates" do
|
38
|
-
expect( -> { @average_rates_adapter.rate_for('BTC', 'FEDcoin') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
39
|
-
end
|
40
|
-
|
41
|
-
it "raises exception if unallowed method is called" do # fetch_rates! is not to be used in AverageRateAdapter itself
|
42
|
-
expect( -> { @average_rates_adapter.get_rate_value_from_hash(nil, 'nothing') }).to raise_error("This method is not supposed to be used in #{@average_rates_adapter.class}.")
|
43
|
-
expect( -> { @average_rates_adapter.rate_to_f(nil) }).to raise_error("This method is not supposed to be used in #{@average_rates_adapter.class}.")
|
44
|
-
end
|
45
|
-
|
46
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
RSpec.describe CurrencyRate::BitfinexAdapter do
|
4
|
-
|
5
|
-
before :each do
|
6
|
-
VCR.insert_cassette 'exchange_rate_adapters/btc_adapters/bitfinex_adapter'
|
7
|
-
end
|
8
|
-
|
9
|
-
after :each do
|
10
|
-
VCR.eject_cassette
|
11
|
-
end
|
12
|
-
|
13
|
-
before(:each) do
|
14
|
-
@exchange_adapter = CurrencyRate::BitfinexAdapter.instance
|
15
|
-
end
|
16
|
-
|
17
|
-
it "finds the rate for currency code" do
|
18
|
-
expect(@exchange_adapter.rate_for('BTC', 'USD')).to eq(1016.9)
|
19
|
-
expect(@exchange_adapter.rate_for('USD', 'BTC')).to eq(0.000983381)
|
20
|
-
expect(@exchange_adapter.rate_for('LTC', 'USD')).to eq(3.9526)
|
21
|
-
expect(@exchange_adapter.rate_for('USD', 'LTC')).to eq(0.252998027)
|
22
|
-
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
23
|
-
end
|
24
|
-
|
25
|
-
it "raises exception if rate is nil" do
|
26
|
-
json_response_1 = '{}'
|
27
|
-
json_response_2 = '{"mid":"762.495","bid":"762.49","ask":"762.5","last_price":"762.5","low":"743.1","high":"775.0","volume":"25680.26724445","timestamp":"1466405569.857112499"}'
|
28
|
-
json_response_3 = '{"mid":"762.495","bid":"762.49","ask":"762.5","last_price":"762.5","low":"743.1","high":"775.0","volume":"25680.26724445","timestamp":"1466405569.857112499"}'
|
29
|
-
uri_mock = double('uri mock')
|
30
|
-
allow(uri_mock).to receive(:read).with(read_timeout: 4).and_return(json_response_1, json_response_2, json_response_3)
|
31
|
-
allow(URI).to receive(:parse).and_return(uri_mock)
|
32
|
-
3.times do
|
33
|
-
@exchange_adapter.fetch_rates!
|
34
|
-
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'BTC') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
RSpec.describe CurrencyRate::BitpayAdapter do
|
4
|
-
|
5
|
-
before :each do
|
6
|
-
VCR.insert_cassette 'exchange_rate_adapters/btc_adapters/average_rate_adapter' # contains request to Bitpay
|
7
|
-
end
|
8
|
-
|
9
|
-
after :each do
|
10
|
-
VCR.eject_cassette
|
11
|
-
end
|
12
|
-
|
13
|
-
before(:each) do
|
14
|
-
@exchange_adapter = CurrencyRate::BitpayAdapter.instance
|
15
|
-
end
|
16
|
-
|
17
|
-
it "finds the rate for currency code" do
|
18
|
-
expect(@exchange_adapter.rate_for('BTC', 'USD')).to eq(1015.59)
|
19
|
-
expect(@exchange_adapter.rate_for('BTC', 'BTC')).to eq(1)
|
20
|
-
expect(@exchange_adapter.rate_for('BTC', 'EUR')).to eq(941.895743)
|
21
|
-
expect(@exchange_adapter.rate_for('EUR', 'BTC')).to eq(1)
|
22
|
-
expect( -> { @exchange_adapter.rate_for('USD', 'EUR') }).to raise_exception(CurrencyRate::Adapter::CurrencyNotSupported)
|
23
|
-
expect( -> { @exchange_adapter.rate_for('EUR', 'USD') }).to raise_exception(CurrencyRate::Adapter::CurrencyNotSupported)
|
24
|
-
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
25
|
-
end
|
26
|
-
|
27
|
-
it "raises exception if rate is nil" do
|
28
|
-
json_response_1 = '[{},{}]'
|
29
|
-
json_response_2 = '[{"code":"USD","name":"US Dollar","rat":223.59},{"code":"EUR","name":"Eurozone Euro","rate":197.179544}]'
|
30
|
-
json_response_3 = '[{"code":"USD","name":"US Dollar","rate":null},{"code":"EUR","name":"Eurozone Euro","rate":197.179544}]'
|
31
|
-
uri_mock = double('uri mock')
|
32
|
-
allow(uri_mock).to receive(:read).with(read_timeout: 4).and_return(json_response_1, json_response_2, json_response_3)
|
33
|
-
allow(URI).to receive(:parse).and_return(uri_mock)
|
34
|
-
3.times do
|
35
|
-
@exchange_adapter.fetch_rates!
|
36
|
-
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
RSpec.describe CurrencyRate::BitstampAdapter do
|
4
|
-
|
5
|
-
before :each do
|
6
|
-
VCR.insert_cassette 'exchange_rate_adapters/btc_adapters/average_rate_adapter' # contains request to Bistamp
|
7
|
-
end
|
8
|
-
|
9
|
-
after :each do
|
10
|
-
VCR.eject_cassette
|
11
|
-
end
|
12
|
-
|
13
|
-
before(:each) do
|
14
|
-
@exchange_adapter = CurrencyRate::BitstampAdapter.instance
|
15
|
-
end
|
16
|
-
|
17
|
-
it "finds the rate for currency code" do
|
18
|
-
expect(@exchange_adapter.rate_for('BTC', 'USD')).to eq(1017.17)
|
19
|
-
expect(@exchange_adapter.rate_for('USD', 'BTC').to_f).to eq(0.00098312)
|
20
|
-
expect(@exchange_adapter.rate_for('BTC', 'EUR')).to eq(946.0)
|
21
|
-
expect(@exchange_adapter.rate_for('EUR', 'BTC').to_f).to eq(0.001057082)
|
22
|
-
expect(@exchange_adapter.rate_for('LTC', 'USD')).to eq(41.01)
|
23
|
-
expect(@exchange_adapter.rate_for('USD', 'LTC')).to eq(0.024384297)
|
24
|
-
expect(@exchange_adapter.rate_for('LTC', 'EUR')).to eq(35.62)
|
25
|
-
expect(@exchange_adapter.rate_for('EUR', 'LTC')).to eq(0.028074116)
|
26
|
-
expect(@exchange_adapter.rate_for('USD', 'EUR').to_f).to eq(0.933619643)
|
27
|
-
expect(@exchange_adapter.rate_for('EUR', 'USD')).to eq(1.0711)
|
28
|
-
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
29
|
-
end
|
30
|
-
|
31
|
-
it "raises exception if rate is nil" do
|
32
|
-
json_response_1 = '{}'
|
33
|
-
json_response_2 = '{"high": "232.89", "list": "224.13", "timestamp": "1423457015", "bid": "224.00", "vwap": "224.57", "volume": "14810.41127494", "low": "217.28", "ask": "224.13"}'
|
34
|
-
json_response_3 = '{"high": "232.89", "last": null, "timestamp": "1423457015", "bid": "224.00", "vwap": "224.57", "volume": "14810.41127494", "low": "217.28", "ask": "224.13"}'
|
35
|
-
uri_mock = double('uri mock')
|
36
|
-
allow(uri_mock).to receive(:read).with(read_timeout: 4).and_return(json_response_1, json_response_2, json_response_3)
|
37
|
-
allow(URI).to receive(:parse).and_return(uri_mock)
|
38
|
-
3.times do
|
39
|
-
@exchange_adapter.fetch_rates!
|
40
|
-
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'BTC') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
RSpec.describe CurrencyRate::BTCChinaAdapter do
|
4
|
-
|
5
|
-
before :each do
|
6
|
-
VCR.insert_cassette 'exchange_rate_adapters/btc_adapters/btcchina_adapter'
|
7
|
-
end
|
8
|
-
|
9
|
-
after :each do
|
10
|
-
VCR.eject_cassette
|
11
|
-
end
|
12
|
-
|
13
|
-
before(:each) do
|
14
|
-
@exchange_adapter = CurrencyRate::BTCChinaAdapter.instance
|
15
|
-
end
|
16
|
-
|
17
|
-
it "finds the rate for currency code" do
|
18
|
-
expect(@exchange_adapter.rate_for('BTC', 'CNY')).to eq(7243.99)
|
19
|
-
expect(@exchange_adapter.rate_for('CNY', 'BTC').to_f).to eq(0.000138045)
|
20
|
-
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
21
|
-
end
|
22
|
-
|
23
|
-
it "raises exception if rate is nil" do
|
24
|
-
json_response_1 = '{}'
|
25
|
-
json_response_2 = '{"ticker":{"high":"5119.92","low":"4980.00","buy":"5081.50","sell":"5081.97","last":"5081.98","vol":"44572.00110000","date":1466406593,"vwap":"5056.91","prev_close":"5096.97","open":"5096.28"}}'
|
26
|
-
json_response_3 = '{"ticker":{"high":"5119.92","low":"4980.00","buy":"5081.50","sell":"5081.97","last":"5081.98","vol":"44572.00110000","date":1466406593,"vwap":"5056.91","prev_close":"5096.97","open":"5096.28"}}'
|
27
|
-
uri_mock = double('uri mock')
|
28
|
-
allow(uri_mock).to receive(:read).with(read_timeout: 4).and_return(json_response_1, json_response_2, json_response_3)
|
29
|
-
allow(URI).to receive(:parse).and_return(uri_mock)
|
30
|
-
3.times do
|
31
|
-
@exchange_adapter.fetch_rates!
|
32
|
-
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'BTC') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
RSpec.describe CurrencyRate::BtceAdapter do
|
4
|
-
|
5
|
-
before :each do
|
6
|
-
VCR.insert_cassette 'exchange_rate_adapters/btc_adapters/btce_adapter'
|
7
|
-
end
|
8
|
-
|
9
|
-
after :each do
|
10
|
-
VCR.eject_cassette
|
11
|
-
end
|
12
|
-
|
13
|
-
before(:each) do
|
14
|
-
@exchange_adapter = CurrencyRate::BtceAdapter.instance
|
15
|
-
end
|
16
|
-
|
17
|
-
it "finds the rate for currency code" do
|
18
|
-
expect(@exchange_adapter.rate_for('BTC', 'USD')).to eq(996.995)
|
19
|
-
expect(@exchange_adapter.rate_for('USD', 'BTC').to_f).to eq(0.001003014)
|
20
|
-
expect(@exchange_adapter.rate_for('BTC', 'EUR')).to eq(947.661)
|
21
|
-
expect(@exchange_adapter.rate_for('EUR', 'BTC').to_f).to eq(0.00105523)
|
22
|
-
expect(@exchange_adapter.rate_for('USD', 'RUB')).to eq(59.2)
|
23
|
-
expect(@exchange_adapter.rate_for('RUB', 'USD').to_f).to eq(0.016891892)
|
24
|
-
expect(@exchange_adapter.rate_for('EUR', 'RUB')).to eq(62.06926)
|
25
|
-
expect(@exchange_adapter.rate_for('RUB', 'EUR').to_f).to eq(0.016111035)
|
26
|
-
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
27
|
-
end
|
28
|
-
|
29
|
-
it "rases exception if rate is nil" do
|
30
|
-
json_response_1 = '{"ticker":{}}'
|
31
|
-
json_response_2 = '{"ticker":{"high":235,"low":215.89999,"avg":225.449995,"vol":2848293.72397,"vol_cur":12657.55799,"bambo":221.444,"buy":221.629,"sell":220.98,"updated":1422678812,"server_time":1422678813}}'
|
32
|
-
json_response_3 = '{"ticker":{"high":235,"low":215.89999,"avg":225.449995,"vol":2848293.72397,"vol_cur":12657.55799,"last":null,"buy":221.629,"sell":220.98,"updated":1422678812,"server_time":1422678813}}'
|
33
|
-
uri_mock = double('uri mock')
|
34
|
-
allow(uri_mock).to receive(:read).with(read_timeout: 4).and_return(json_response_1, json_response_2, json_response_3)
|
35
|
-
allow(URI).to receive(:parse).and_return(uri_mock)
|
36
|
-
3.times do
|
37
|
-
@exchange_adapter.fetch_rates!
|
38
|
-
expect( -> { @exchange_adapter.rate_for('USD', 'EUR') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
RSpec.describe CurrencyRate::CoinbaseAdapter do
|
4
|
-
|
5
|
-
before :each do
|
6
|
-
VCR.insert_cassette 'exchange_rate_adapters/btc_adapters/coinbase_adapter'
|
7
|
-
end
|
8
|
-
|
9
|
-
after :each do
|
10
|
-
VCR.eject_cassette
|
11
|
-
end
|
12
|
-
|
13
|
-
before(:each) do
|
14
|
-
@exchange_adapter = CurrencyRate::CoinbaseAdapter.instance
|
15
|
-
end
|
16
|
-
|
17
|
-
it "finds the rate for currency code" do
|
18
|
-
expect(@exchange_adapter.rate_for('BTC', 'USD')).to eq(1019.98)
|
19
|
-
expect(@exchange_adapter.rate_for('USD', 'BTC')).to eq(0.00098)
|
20
|
-
expect(@exchange_adapter.rate_for('LTC', 'USD')).to eq(3.95)
|
21
|
-
expect(@exchange_adapter.rate_for('USD', 'LTC')).to eq(0.253165)
|
22
|
-
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
23
|
-
end
|
24
|
-
|
25
|
-
it "raises exception if rate is nil" do
|
26
|
-
json_response_1 = '{}'
|
27
|
-
json_response_2 = '{"btc_to_urd":"224.41","usd_to_xpf":"105.461721","bsd_to_btc":"0.004456"}'
|
28
|
-
json_response_3 = '{"btc_to_usd":null,"usd_to_xpf":"105.461721","bsd_to_btc":"0.004456"}'
|
29
|
-
uri_mock = double('uri mock')
|
30
|
-
allow(uri_mock).to receive(:read).with(read_timeout: 4).and_return(json_response_1, json_response_2, json_response_3)
|
31
|
-
allow(URI).to receive(:parse).and_return(uri_mock)
|
32
|
-
3.times do
|
33
|
-
@exchange_adapter.fetch_rates!
|
34
|
-
expect( -> { @exchange_adapter.rate_for('FEDCoin', 'BTC') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
RSpec.describe CurrencyRate::HuobiAdapter do
|
4
|
-
|
5
|
-
before :each do
|
6
|
-
VCR.insert_cassette 'exchange_rate_adapters/btc_adapters/huobi_adapter'
|
7
|
-
end
|
8
|
-
|
9
|
-
after :each do
|
10
|
-
VCR.eject_cassette
|
11
|
-
end
|
12
|
-
|
13
|
-
before(:each) do
|
14
|
-
@exchange_adapter = CurrencyRate::HuobiAdapter.instance
|
15
|
-
end
|
16
|
-
|
17
|
-
it "finds the rate for currency code" do
|
18
|
-
expect(@exchange_adapter.rate_for('BTC', 'CNY')).to eq(7216.25)
|
19
|
-
expect(@exchange_adapter.rate_for('CNY', 'BTC').to_f).to eq(0.000138576)
|
20
|
-
expect(@exchange_adapter.rate_for('LTC', 'CNY')).to eq(27.99)
|
21
|
-
expect(@exchange_adapter.rate_for('CNY', 'LTC').to_f).to eq(0.035727045)
|
22
|
-
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
23
|
-
end
|
24
|
-
|
25
|
-
it "raises exception if rate is nil" do
|
26
|
-
json_response_1 = '{}'
|
27
|
-
json_response_2 = '{"time":"1466406045","ticker":{"open":5108.77,"vol":533438.162,"symbol":"btccny","last":5081.29,"buy":5081.13,"sell":5081.29,"high":5138,"low":5010.5} }'
|
28
|
-
json_response_3 = '{"time":"1466406045","ticker":{"open":5108.77,"vol":533438.162,"symbol":"btccny","last":5081.29,"buy":5081.13,"sell":5081.29,"high":5138,"low":5010.5} }'
|
29
|
-
uri_mock = double('uri mock')
|
30
|
-
allow(uri_mock).to receive(:read).with(read_timeout: 4).and_return(json_response_1, json_response_2, json_response_3)
|
31
|
-
allow(URI).to receive(:parse).and_return(uri_mock)
|
32
|
-
3.times do
|
33
|
-
@exchange_adapter.fetch_rates!
|
34
|
-
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'BTC') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
RSpec.describe CurrencyRate::KrakenAdapter do
|
4
|
-
|
5
|
-
before :each do
|
6
|
-
VCR.insert_cassette 'exchange_rate_adapters/btc_adapters/kraken_adapter'
|
7
|
-
end
|
8
|
-
|
9
|
-
after :each do
|
10
|
-
VCR.eject_cassette
|
11
|
-
end
|
12
|
-
|
13
|
-
before(:each) do
|
14
|
-
@exchange_adapter = CurrencyRate::KrakenAdapter.instance
|
15
|
-
end
|
16
|
-
|
17
|
-
it "finds the rate for currency code" do
|
18
|
-
expect(@exchange_adapter.rate_for('BTC', 'USD')).to eq(1018.0)
|
19
|
-
expect(@exchange_adapter.rate_for('USD', 'BTC').to_f).to eq(0.000982318)
|
20
|
-
expect(@exchange_adapter.rate_for('BTC', 'EUR')).to eq(945.33)
|
21
|
-
expect(@exchange_adapter.rate_for('EUR', 'BTC').to_f).to eq(0.001057832)
|
22
|
-
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
23
|
-
end
|
24
|
-
|
25
|
-
it "raises exception if rate is nil" do
|
26
|
-
json_response_1 = '{"error":[],"result":{}}'
|
27
|
-
json_response_2 = '{"error":[],"result":{"XXBTZUSD":{"a":["244.95495","1"],"b":["227.88761","1"],"abc":["228.20494","0.10000000"],"v":["5.18645337","24.04033530"],"p":["234.92296","234.41356"],"t":[45,74],"l":["228.20494","228.20494"],"h":["239.36069","239.36069"],"o":"231.82976"}}}'
|
28
|
-
json_response_3 = '{"error":[],"result":{"XXBTZUSD":{"a":["244.95495","1"],"b":["227.88761","1"],"c":[null,"0.10000000"],"v":["5.18645337","24.04033530"],"p":["234.92296","234.41356"],"t":[45,74],"l":["228.20494","228.20494"],"h":["239.36069","239.36069"],"o":"231.82976"}}}'
|
29
|
-
uri_mock = double('uri mock')
|
30
|
-
allow(uri_mock).to receive(:read).with(read_timeout: 4).and_return(json_response_1, json_response_2, json_response_3)
|
31
|
-
allow(URI).to receive(:parse).and_return(uri_mock)
|
32
|
-
3.times do
|
33
|
-
@exchange_adapter.fetch_rates!
|
34
|
-
expect( -> { @exchange_adapter.rate_for('FEDCoin', 'USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
RSpec.describe CurrencyRate::LocalbitcoinsAdapter do
|
4
|
-
|
5
|
-
before :each do
|
6
|
-
VCR.insert_cassette 'exchange_rate_adapters/btc_adapters/localbitcoins_adapter'
|
7
|
-
end
|
8
|
-
|
9
|
-
after :each do
|
10
|
-
VCR.eject_cassette
|
11
|
-
end
|
12
|
-
|
13
|
-
before(:each) do
|
14
|
-
@exchange_adapter = CurrencyRate::LocalbitcoinsAdapter.instance
|
15
|
-
end
|
16
|
-
|
17
|
-
it "finds the rate for currency code" do
|
18
|
-
expect(@exchange_adapter.rate_for('BTC', 'USD')).to eq(1420.45)
|
19
|
-
expect(@exchange_adapter.rate_for('USD', 'BTC')).to eq(BigDecimal.new('0.000704002'))
|
20
|
-
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
21
|
-
end
|
22
|
-
|
23
|
-
it "rases exception if rate is nil" do
|
24
|
-
json_response_1 = '{"USD": {}}'
|
25
|
-
json_response_2 = '{"USD": {"volume_btc": "2277.85", "rates": {"bambo": "263.78"}, "avg_1h": 287.6003904801631, "avg_24h": 253.58144543993674, "avg_12h": 252.29202866050034}}'
|
26
|
-
json_response_3 = '{"USD": {"volume_btc": "2277.85", "rates": {"last": null}, "avg_1h": 287.6003904801631, "avg_24h": 253.58144543993674, "avg_12h": 252.29202866050034}}'
|
27
|
-
uri_mock = double('uri mock')
|
28
|
-
allow(uri_mock).to receive(:read).with(read_timeout: 4).and_return(json_response_1, json_response_2, json_response_3)
|
29
|
-
allow(URI).to receive(:parse).and_return(uri_mock)
|
30
|
-
3.times do
|
31
|
-
@exchange_adapter.fetch_rates!
|
32
|
-
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|