currency-rate 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +13 -0
- data/VERSION +1 -1
- data/currency-rate.gemspec +22 -3
- data/lib/adapter.rb +17 -9
- data/lib/btc_adapter.rb +4 -6
- data/lib/btc_adapters/average_rate_adapter.rb +4 -3
- data/lib/btc_adapters/bitfinex_adapter.rb +30 -0
- data/lib/btc_adapters/bitpay_adapter.rb +10 -3
- data/lib/btc_adapters/bitstamp_adapter.rb +24 -5
- data/lib/btc_adapters/btcchina_adapter.rb +13 -0
- data/lib/btc_adapters/btce_adapter.rb +26 -5
- data/lib/btc_adapters/coinbase_adapter.rb +2 -2
- data/lib/btc_adapters/huobi_adapter.rb +30 -0
- data/lib/btc_adapters/kraken_adapter.rb +14 -5
- data/lib/btc_adapters/localbitcoins_adapter.rb +10 -3
- data/lib/btc_adapters/okcoin_adapter.rb +24 -5
- data/lib/currency_rate.rb +11 -10
- data/lib/fiat_adapter.rb +4 -18
- data/lib/fiat_adapters/fixer_adapter.rb +20 -5
- data/lib/fiat_adapters/yahoo_adapter.rb +28 -6
- data/spec/currency_rate_spec.rb +10 -6
- data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/average_rate_adapter.yml +423 -0
- data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/bitfinex_adapter.yml +125 -0
- data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/bitpay_adapter_yml.yml +272 -0
- data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/bitstamp_adapter.yml +153 -0
- data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/btcchina_adapter.yml +83 -0
- data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/btce_adapter.yml +223 -0
- data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/coinbase_adapter.yml +76 -0
- data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/huobi_adapter.yml +83 -0
- data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/kraken_adapter.yml +83 -0
- data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/localbitcoins_adapter.yml +128 -0
- data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/okcoin_adapter.yml +207 -0
- data/spec/fixtures/vcr/exchange_rate_adapters/fiat_adapters/fixer_adapter.yml +81 -0
- data/spec/fixtures/vcr/exchange_rate_adapters/fiat_adapters/yahoo_adapter.yml +50 -0
- data/spec/lib/btc_adapter_spec.rb +16 -28
- data/spec/lib/btc_adapters/average_rate_adapter_spec.rb +4 -4
- data/spec/lib/btc_adapters/bitfinex_adapter_spec.rb +38 -0
- data/spec/lib/btc_adapters/bitpay_adapter_spec.rb +8 -3
- data/spec/lib/btc_adapters/bitstamp_adapter_spec.rb +8 -3
- data/spec/lib/btc_adapters/btcchina_adapter_spec.rb +36 -0
- data/spec/lib/btc_adapters/btce_adapter_spec.rb +10 -3
- data/spec/lib/btc_adapters/coinbase_adapter_spec.rb +5 -3
- data/spec/lib/btc_adapters/huobi_adapter_spec.rb +38 -0
- data/spec/lib/btc_adapters/kraken_adapter_spec.rb +6 -3
- data/spec/lib/btc_adapters/localbitcoins_adapter_spec.rb +4 -3
- data/spec/lib/btc_adapters/okcoin_adapter_spec.rb +11 -3
- data/spec/lib/fiat_adapters/fixer_adapter_spec.rb +5 -2
- data/spec/lib/fiat_adapters/yahoo_adapter_spec.rb +5 -2
- metadata +21 -2
@@ -0,0 +1,50 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://query.yahooapis.com/v1/public/yql?env=store://datatables.org/alltableswithkeys&format=json&q=SELECT%20*%20FROM%20yahoo.finance.xchange%20WHERE%20pair%20IN(%22USDAUD%22,%22USDBGN%22,%22USDBRL%22,%22USDCAD%22,%22USDCHF%22,%22USDCNY%22,%22USDCZK%22,%22USDDKK%22,%22USDGBP%22,%22USDHKD%22,%22USDHRK%22,%22USDHUF%22,%22USDIDR%22,%22USDILS%22,%22USDINR%22,%22USDJPY%22,%22USDKRW%22,%22USDMXN%22,%22USDMYR%22,%22USDNOK%22,%22USDNZD%22,%22USDPHP%22,%22USDPLN%22,%22USDRON%22,%22USDRUB%22,%22USDSEK%22,%22USDSGD%22,%22USDTHB%22,%22USDTRY%22,%22USDUSD%22,%22USDZAR%22,%22USDEUR%22)
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- "*/*"
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
X-Yql-Host:
|
22
|
+
- main-2327bac4-1df8-11e6-a4df-d4ae52974c31
|
23
|
+
X-Content-Type-Options:
|
24
|
+
- nosniff
|
25
|
+
Access-Control-Allow-Origin:
|
26
|
+
- "*"
|
27
|
+
Content-Type:
|
28
|
+
- application/json; charset=UTF-8
|
29
|
+
Cache-Control:
|
30
|
+
- no-cache
|
31
|
+
Date:
|
32
|
+
- Sun, 19 Jun 2016 07:10:46 GMT
|
33
|
+
Age:
|
34
|
+
- '0'
|
35
|
+
Server:
|
36
|
+
- ATS
|
37
|
+
Via:
|
38
|
+
- http/1.1 a14.ue.bf1.yahoo.net (ApacheTrafficServer [cMsSf ])
|
39
|
+
Y-Trace:
|
40
|
+
- BAEAQAAAAAC2YQNA_AaEuAAAAAAAAAAAZOzi9VN5UAwAAAAAAAAAAAAFNZxJY.NpAAU1nElkwG5.Cp0MAAAAAA--
|
41
|
+
Transfer-Encoding:
|
42
|
+
- chunked
|
43
|
+
Connection:
|
44
|
+
- keep-alive
|
45
|
+
body:
|
46
|
+
encoding: UTF-8
|
47
|
+
string: '{"query":{"count":32,"created":"2016-06-19T07:10:46Z","lang":"en-US","results":{"rate":[{"id":"USDAUD","Name":"USD/AUD","Rate":"1.3524","Date":"6/18/2016","Time":"12:29pm","Ask":"1.3530","Bid":"1.3524"},{"id":"USDBGN","Name":"USD/BGN","Rate":"1.7333","Date":"6/18/2016","Time":"12:29pm","Ask":"1.7436","Bid":"1.7333"},{"id":"USDBRL","Name":"USD/BRL","Rate":"3.4162","Date":"6/18/2016","Time":"12:29pm","Ask":"3.4208","Bid":"3.4162"},{"id":"USDCAD","Name":"USD/CAD","Rate":"1.2895","Date":"6/18/2016","Time":"12:29pm","Ask":"1.2900","Bid":"1.2895"},{"id":"USDCHF","Name":"USD/CHF","Rate":"0.9598","Date":"6/18/2016","Time":"12:29pm","Ask":"0.9600","Bid":"0.9598"},{"id":"USDCNY","Name":"USD/CNY","Rate":"6.5705","Date":"6/18/2016","Time":"12:29pm","Ask":"6.5718","Bid":"6.5705"},{"id":"USDCZK","Name":"USD/CZK","Rate":"24.0020","Date":"6/18/2016","Time":"12:29pm","Ask":"24.0200","Bid":"24.0020"},{"id":"USDDKK","Name":"USD/DKK","Rate":"6.5953","Date":"6/18/2016","Time":"12:29pm","Ask":"6.5972","Bid":"6.5953"},{"id":"USDGBP","Name":"USD/GBP","Rate":"0.6964","Date":"6/18/2016","Time":"12:29pm","Ask":"0.6968","Bid":"0.6964"},{"id":"USDHKD","Name":"USD/HKD","Rate":"7.7614","Date":"6/18/2016","Time":"12:29pm","Ask":"7.7616","Bid":"7.7614"},{"id":"USDHRK","Name":"USD/HRK","Rate":"6.6707","Date":"6/18/2016","Time":"12:29pm","Ask":"6.6732","Bid":"6.6707"},{"id":"USDHUF","Name":"USD/HUF","Rate":"278.5100","Date":"6/18/2016","Time":"12:29pm","Ask":"278.9000","Bid":"278.5100"},{"id":"USDIDR","Name":"USD/IDR","Rate":"13337.5000","Date":"6/18/2016","Time":"12:29pm","Ask":"13340.0000","Bid":"13337.5000"},{"id":"USDILS","Name":"USD/ILS","Rate":"3.8674","Date":"6/18/2016","Time":"12:29pm","Ask":"3.8766","Bid":"3.8674"},{"id":"USDINR","Name":"USD/INR","Rate":"67.0724","Date":"6/18/2016","Time":"12:29pm","Ask":"67.0910","Bid":"67.0724"},{"id":"USDJPY","Name":"USD/JPY","Rate":"104.1700","Date":"6/18/2016","Time":"12:29pm","Ask":"104.2000","Bid":"104.1700"},{"id":"USDKRW","Name":"USD/KRW","Rate":"1170.5450","Date":"6/18/2016","Time":"12:29pm","Ask":"1171.9000","Bid":"1170.5450"},{"id":"USDMXN","Name":"USD/MXN","Rate":"18.8280","Date":"6/18/2016","Time":"12:29pm","Ask":"18.8330","Bid":"18.8280"},{"id":"USDMYR","Name":"USD/MYR","Rate":"4.0885","Date":"6/18/2016","Time":"12:29pm","Ask":"4.0895","Bid":"4.0885"},{"id":"USDNOK","Name":"USD/NOK","Rate":"8.3600","Date":"6/18/2016","Time":"12:29pm","Ask":"8.3656","Bid":"8.3600"},{"id":"USDNZD","Name":"USD/NZD","Rate":"1.4176","Date":"6/18/2016","Time":"12:29pm","Ask":"1.4180","Bid":"1.4176"},{"id":"USDPHP","Name":"USD/PHP","Rate":"46.4395","Date":"6/18/2016","Time":"12:29pm","Ask":"46.4700","Bid":"46.4395"},{"id":"USDPLN","Name":"USD/PLN","Rate":"3.9162","Date":"6/18/2016","Time":"12:29pm","Ask":"3.9166","Bid":"3.9162"},{"id":"USDRON","Name":"USD/RON","Rate":"4.0220","Date":"6/18/2016","Time":"12:29pm","Ask":"4.0246","Bid":"4.0220"},{"id":"USDRUB","Name":"USD/RUB","Rate":"64.7795","Date":"6/18/2016","Time":"12:29pm","Ask":"64.8100","Bid":"64.7795"},{"id":"USDSEK","Name":"USD/SEK","Rate":"8.3321","Date":"6/18/2016","Time":"12:29pm","Ask":"8.3336","Bid":"8.3321"},{"id":"USDSGD","Name":"USD/SGD","Rate":"1.3499","Date":"6/18/2016","Time":"12:29pm","Ask":"1.3504","Bid":"1.3499"},{"id":"USDTHB","Name":"USD/THB","Rate":"35.2355","Date":"6/18/2016","Time":"12:29pm","Ask":"35.2640","Bid":"35.2355"},{"id":"USDTRY","Name":"USD/TRY","Rate":"2.9269","Date":"6/18/2016","Time":"12:29pm","Ask":"2.9290","Bid":"2.9269"},{"id":"USDUSD","Name":"USD/USD","Rate":"1.0000","Date":"N/A","Time":"N/A","Ask":"1.0000","Bid":"1.0000"},{"id":"USDZAR","Name":"USD/ZAR","Rate":"15.1519","Date":"6/18/2016","Time":"12:29pm","Ask":"15.1828","Bid":"15.1519"},{"id":"USDEUR","Name":"USD/EUR","Rate":"0.8868","Date":"6/18/2016","Time":"12:29pm","Ask":"0.8870","Bid":"0.8868"}]}}}'
|
48
|
+
http_version:
|
49
|
+
recorded_at: Sun, 19 Jun 2016 07:10:46 GMT
|
50
|
+
recorded_with: VCR 3.0.3
|
@@ -6,45 +6,33 @@ RSpec.describe CurrencyRate::BtcAdapter do
|
|
6
6
|
FETCH_URL = ''
|
7
7
|
end
|
8
8
|
|
9
|
+
class SomeExchangeAdapter < CurrencyRate::BtcAdapter
|
10
|
+
def rate_for(from,to)
|
11
|
+
super
|
12
|
+
rate = rate_to_f(750)
|
13
|
+
invert_rate(from,to,rate)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
9
17
|
before(:each) do
|
10
18
|
@exchange_adapter = CurrencyRate::BtcAdapter.instance
|
11
19
|
end
|
12
20
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
allow(@exchange_adapter).to receive(:rate_for).with('USD').and_return(450.5412)
|
18
|
-
end
|
19
|
-
|
20
|
-
it "converts amount from currency into BTC" do
|
21
|
-
expect(@exchange_adapter.convert_from_currency(2252.706, currency: 'USD')).to eq(500000000)
|
22
|
-
end
|
23
|
-
|
24
|
-
it "converts from btc into currency" do
|
25
|
-
expect(@exchange_adapter.convert_to_currency(500000000, currency: 'USD')).to eq(2252.706)
|
26
|
-
end
|
27
|
-
|
28
|
-
it "shows btc amounts in various denominations" do
|
29
|
-
expect(@exchange_adapter.convert_from_currency(2252.706, currency: 'USD', btc_denomination: :btc)).to eq(5)
|
30
|
-
expect(@exchange_adapter.convert_to_currency(5, currency: 'USD', btc_denomination: :btc)).to eq(2252.706)
|
31
|
-
end
|
32
|
-
|
33
|
-
it "accepts string as amount and converts it properly" do
|
34
|
-
expect(@exchange_adapter.convert_from_currency('2252.706', currency: 'USD', btc_denomination: :btc)).to eq(5)
|
35
|
-
expect(@exchange_adapter.convert_to_currency('5', currency: 'USD', btc_denomination: :btc)).to eq(2252.706)
|
36
|
-
end
|
37
|
-
|
21
|
+
it "inverts currency rate when needed" do
|
22
|
+
allow(SomeExchangeAdapter.instance).to receive(:fetch_rates!)
|
23
|
+
@exchange_adapter = SomeExchangeAdapter.instance
|
24
|
+
expect(@exchange_adapter.rate_for('USD', 'BTC')).to eq(0.0013333333333333333)
|
38
25
|
end
|
39
26
|
|
27
|
+
|
40
28
|
it "when checking for rates, only calls fetch_rates! if they were checked long time ago or never" do
|
41
29
|
uri_mock = double('uri mock')
|
42
30
|
expect(URI).to receive(:parse).and_return(uri_mock).once
|
43
31
|
expect(uri_mock).to receive(:read).and_return('{ "USD": 534.4343 }').once
|
44
|
-
@exchange_adapter.rate_for('USD')
|
45
|
-
@exchange_adapter.rate_for('USD') # not calling fetch_rates! because we've just checked
|
32
|
+
@exchange_adapter.rate_for('USD', 'BTC')
|
33
|
+
@exchange_adapter.rate_for('USD', 'BTC') # not calling fetch_rates! because we've just checked
|
46
34
|
@exchange_adapter.instance_variable_set(:@rates_updated_at, Time.now-1900)
|
47
|
-
@exchange_adapter.rate_for('USD')
|
35
|
+
@exchange_adapter.rate_for('USD', 'BTC')
|
48
36
|
end
|
49
37
|
|
50
38
|
it "raises exception if rate is nil" do
|
@@ -2,11 +2,11 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
RSpec.describe CurrencyRate::AverageRateAdapter do
|
4
4
|
|
5
|
-
before :
|
5
|
+
before :each do
|
6
6
|
VCR.insert_cassette 'exchange_rate_adapters/btc_adapters/average_rate_adapter'
|
7
7
|
end
|
8
8
|
|
9
|
-
after :
|
9
|
+
after :each do
|
10
10
|
VCR.eject_cassette
|
11
11
|
end
|
12
12
|
|
@@ -23,7 +23,7 @@ RSpec.describe CurrencyRate::AverageRateAdapter do
|
|
23
23
|
uri_mock = double('uri mock')
|
24
24
|
allow(uri_mock).to receive(:read).with(read_timeout: 4).and_return(json_response_bistamp, json_response_bitpay)
|
25
25
|
allow(URI).to receive(:parse).and_return(uri_mock)
|
26
|
-
expect(@average_rates_adapter.rate_for('USD')).to eq 150
|
26
|
+
expect(@average_rates_adapter.rate_for('BTC', 'USD')).to eq 150
|
27
27
|
end
|
28
28
|
|
29
29
|
it "fetches rates for all adapters" do
|
@@ -40,7 +40,7 @@ RSpec.describe CurrencyRate::AverageRateAdapter do
|
|
40
40
|
end
|
41
41
|
|
42
42
|
it "raises exception if all adapters fail to get rates" do
|
43
|
-
expect( -> { @average_rates_adapter.rate_for('FEDcoin') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
43
|
+
expect( -> { @average_rates_adapter.rate_for('BTC', 'FEDcoin') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
44
44
|
end
|
45
45
|
|
46
46
|
it "raises exception if unallowed method is called" do # fetch_rates! is not to be used in AverageRateAdapter itself
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe CurrencyRate::BitfinexAdapter do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
VCR.insert_cassette 'exchange_rate_adapters/btc_adapters/bitfinex_adapter'
|
7
|
+
end
|
8
|
+
|
9
|
+
after :all 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(763.0)
|
19
|
+
expect(@exchange_adapter.rate_for('USD', 'BTC')).to eq(0.001310615989515072)
|
20
|
+
expect(@exchange_adapter.rate_for('LTC', 'USD')).to eq(5.5105)
|
21
|
+
expect(@exchange_adapter.rate_for('USD', 'LTC')).to eq(0.1814717357771527)
|
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
|
@@ -15,8 +15,13 @@ RSpec.describe CurrencyRate::BitpayAdapter do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
it "finds the rate for currency code" do
|
18
|
-
expect(@exchange_adapter.rate_for('USD')).to
|
19
|
-
expect(
|
18
|
+
expect(@exchange_adapter.rate_for('BTC', 'USD')).to eq(748.02)
|
19
|
+
expect(@exchange_adapter.rate_for('BTC', 'BTC')).to eq(1)
|
20
|
+
expect(@exchange_adapter.rate_for('BTC', 'EUR')).to eq(663.359096)
|
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)
|
20
25
|
end
|
21
26
|
|
22
27
|
it "raises exception if rate is nil" do
|
@@ -28,7 +33,7 @@ RSpec.describe CurrencyRate::BitpayAdapter do
|
|
28
33
|
allow(URI).to receive(:parse).and_return(uri_mock)
|
29
34
|
3.times do
|
30
35
|
@exchange_adapter.fetch_rates!
|
31
|
-
expect( -> { @exchange_adapter.rate_for('USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
36
|
+
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
32
37
|
end
|
33
38
|
end
|
34
39
|
|
@@ -15,8 +15,13 @@ RSpec.describe CurrencyRate::BitstampAdapter do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
it "finds the rate for currency code" do
|
18
|
-
expect(@exchange_adapter.rate_for('USD')).to
|
19
|
-
expect(
|
18
|
+
expect(@exchange_adapter.rate_for('BTC', 'USD')).to eq(751.97)
|
19
|
+
expect(@exchange_adapter.rate_for('USD', 'BTC')).to eq(0.0013298402861816295)
|
20
|
+
expect(@exchange_adapter.rate_for('BTC', 'EUR')).to eq(674.5)
|
21
|
+
expect(@exchange_adapter.rate_for('EUR', 'BTC')).to eq(0.0014825796886582653)
|
22
|
+
expect(@exchange_adapter.rate_for('USD', 'EUR')).to eq(0.9008846687447073)
|
23
|
+
expect(@exchange_adapter.rate_for('EUR', 'USD')).to eq(1.11002)
|
24
|
+
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
20
25
|
end
|
21
26
|
|
22
27
|
it "raises exception if rate is nil" do
|
@@ -28,7 +33,7 @@ RSpec.describe CurrencyRate::BitstampAdapter do
|
|
28
33
|
allow(URI).to receive(:parse).and_return(uri_mock)
|
29
34
|
3.times do
|
30
35
|
@exchange_adapter.fetch_rates!
|
31
|
-
expect( -> { @exchange_adapter.rate_for('
|
36
|
+
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'BTC') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
32
37
|
end
|
33
38
|
end
|
34
39
|
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe CurrencyRate::BTCChinaAdapter do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
VCR.insert_cassette 'exchange_rate_adapters/btc_adapters/btcchina_adapter'
|
7
|
+
end
|
8
|
+
|
9
|
+
after :all 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(5084.51)
|
19
|
+
expect(@exchange_adapter.rate_for('CNY', 'BTC')).to eq(0.00019667578586727137)
|
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
|
@@ -15,8 +15,15 @@ RSpec.describe CurrencyRate::BtceAdapter do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
it "finds the rate for currency code" do
|
18
|
-
expect(@exchange_adapter.rate_for('USD')).to
|
19
|
-
expect(
|
18
|
+
expect(@exchange_adapter.rate_for('BTC', 'USD')).to eq(723.872)
|
19
|
+
expect(@exchange_adapter.rate_for('USD', 'BTC')).to eq(0.0013814597055833075)
|
20
|
+
expect(@exchange_adapter.rate_for('BTC', 'EUR')).to eq(665.022)
|
21
|
+
expect(@exchange_adapter.rate_for('EUR', 'BTC')).to eq(0.0015037096517107704)
|
22
|
+
expect(@exchange_adapter.rate_for('USD', 'RUB')).to eq(60.5)
|
23
|
+
expect(@exchange_adapter.rate_for('RUB', 'USD')).to eq(0.01652892561983471)
|
24
|
+
expect(@exchange_adapter.rate_for('EUR', 'RUB')).to eq(65.63)
|
25
|
+
expect(@exchange_adapter.rate_for('RUB', 'EUR')).to eq(0.015236934328813043)
|
26
|
+
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
20
27
|
end
|
21
28
|
|
22
29
|
it "rases exception if rate is nil" do
|
@@ -28,7 +35,7 @@ RSpec.describe CurrencyRate::BtceAdapter do
|
|
28
35
|
allow(URI).to receive(:parse).and_return(uri_mock)
|
29
36
|
3.times do
|
30
37
|
@exchange_adapter.fetch_rates!
|
31
|
-
expect( -> { @exchange_adapter.rate_for('USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
38
|
+
expect( -> { @exchange_adapter.rate_for('USD', 'EUR') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
32
39
|
end
|
33
40
|
end
|
34
41
|
|
@@ -15,8 +15,9 @@ RSpec.describe CurrencyRate::CoinbaseAdapter do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
it "finds the rate for currency code" do
|
18
|
-
expect(@exchange_adapter.rate_for('USD')).to
|
19
|
-
expect(
|
18
|
+
expect(@exchange_adapter.rate_for('BTC', 'USD')).to eq(760.85)
|
19
|
+
expect(@exchange_adapter.rate_for('USD', 'BTC')).to eq(0.001314)
|
20
|
+
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
20
21
|
end
|
21
22
|
|
22
23
|
it "raises exception if rate is nil" do
|
@@ -28,8 +29,9 @@ RSpec.describe CurrencyRate::CoinbaseAdapter do
|
|
28
29
|
allow(URI).to receive(:parse).and_return(uri_mock)
|
29
30
|
3.times do
|
30
31
|
@exchange_adapter.fetch_rates!
|
31
|
-
expect( -> { @exchange_adapter.rate_for('
|
32
|
+
expect( -> { @exchange_adapter.rate_for('FEDCoin', 'BTC') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
32
33
|
end
|
34
|
+
|
33
35
|
end
|
34
36
|
|
35
37
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe CurrencyRate::HuobiAdapter do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
VCR.insert_cassette 'exchange_rate_adapters/btc_adapters/huobi_adapter'
|
7
|
+
end
|
8
|
+
|
9
|
+
after :all 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(5081.0)
|
19
|
+
expect(@exchange_adapter.rate_for('CNY', 'BTC')).to eq(0.000196811651249754)
|
20
|
+
expect(@exchange_adapter.rate_for('LTC', 'CNY')).to eq(36.9)
|
21
|
+
expect(@exchange_adapter.rate_for('CNY', 'LTC')).to eq(0.02710027100271003)
|
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
|
@@ -15,8 +15,11 @@ RSpec.describe CurrencyRate::KrakenAdapter do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
it "finds the rate for currency code" do
|
18
|
-
expect(@exchange_adapter.rate_for('USD')).to
|
19
|
-
expect(
|
18
|
+
expect(@exchange_adapter.rate_for('BTC', 'USD')).to eq(755.15)
|
19
|
+
expect(@exchange_adapter.rate_for('USD', 'BTC')).to eq(0.0013242402171753957)
|
20
|
+
expect(@exchange_adapter.rate_for('BTC', 'EUR')).to eq(671.215)
|
21
|
+
expect(@exchange_adapter.rate_for('EUR', 'BTC')).to eq(0.0014898355966419105)
|
22
|
+
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
20
23
|
end
|
21
24
|
|
22
25
|
it "raises exception if rate is nil" do
|
@@ -28,7 +31,7 @@ RSpec.describe CurrencyRate::KrakenAdapter do
|
|
28
31
|
allow(URI).to receive(:parse).and_return(uri_mock)
|
29
32
|
3.times do
|
30
33
|
@exchange_adapter.fetch_rates!
|
31
|
-
expect( -> { @exchange_adapter.rate_for('USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
34
|
+
expect( -> { @exchange_adapter.rate_for('FEDCoin', 'USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
32
35
|
end
|
33
36
|
end
|
34
37
|
|
@@ -15,8 +15,9 @@ RSpec.describe CurrencyRate::LocalbitcoinsAdapter do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
it "finds the rate for currency code" do
|
18
|
-
expect(@exchange_adapter.rate_for('USD')).to
|
19
|
-
expect(
|
18
|
+
expect(@exchange_adapter.rate_for('BTC', 'USD')).to eq(591.95)
|
19
|
+
expect(@exchange_adapter.rate_for('USD', 'BTC')).to eq(0.0016893318692457132)
|
20
|
+
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
20
21
|
end
|
21
22
|
|
22
23
|
it "rases exception if rate is nil" do
|
@@ -28,7 +29,7 @@ RSpec.describe CurrencyRate::LocalbitcoinsAdapter do
|
|
28
29
|
allow(URI).to receive(:parse).and_return(uri_mock)
|
29
30
|
3.times do
|
30
31
|
@exchange_adapter.fetch_rates!
|
31
|
-
expect( -> { @exchange_adapter.rate_for('USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
32
|
+
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
32
33
|
end
|
33
34
|
end
|
34
35
|
|
@@ -15,8 +15,16 @@ RSpec.describe CurrencyRate::OkcoinAdapter do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
it "finds the rate for currency code" do
|
18
|
-
expect(@exchange_adapter.rate_for('USD')).to
|
19
|
-
expect(
|
18
|
+
expect(@exchange_adapter.rate_for('BTC', 'USD')).to eq(769.05)
|
19
|
+
expect(@exchange_adapter.rate_for('USD', 'BTC')).to eq(0.0013003055718093753)
|
20
|
+
expect(@exchange_adapter.rate_for('BTC', 'CNY')).to eq(5113.0)
|
21
|
+
expect(@exchange_adapter.rate_for('CNY', 'BTC')).to eq(0.00019557989438685703)
|
22
|
+
|
23
|
+
expect(@exchange_adapter.rate_for('LTC', 'USD')).to eq(5.661)
|
24
|
+
expect(@exchange_adapter.rate_for('USD', 'LTC')).to eq(0.17664723547076489)
|
25
|
+
expect(@exchange_adapter.rate_for('LTC', 'CNY')).to eq(37.68)
|
26
|
+
expect(@exchange_adapter.rate_for('CNY', 'LTC')).to eq(0.02653927813163482)
|
27
|
+
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
20
28
|
end
|
21
29
|
|
22
30
|
it "raises exception if rate is nil" do
|
@@ -28,7 +36,7 @@ RSpec.describe CurrencyRate::OkcoinAdapter do
|
|
28
36
|
3.times do |i|
|
29
37
|
@exchange_adapter.instance_variable_set :@rates_updated_at, Time.now
|
30
38
|
@exchange_adapter.instance_variable_set :@rates, JSON.parse(response[i])
|
31
|
-
expect( -> { @exchange_adapter.rate_for('
|
39
|
+
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'BTC') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
32
40
|
end
|
33
41
|
end
|
34
42
|
|
@@ -15,8 +15,11 @@ RSpec.describe CurrencyRate::FixerAdapter do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
it "finds the rate for currency code" do
|
18
|
-
expect(@exchange_adapter.rate_for('
|
19
|
-
expect(
|
18
|
+
expect(@exchange_adapter.rate_for('EUR', 'USD')).to eq(1.12)
|
19
|
+
expect(@exchange_adapter.rate_for('USD', 'EUR')).to eq(0.88)
|
20
|
+
expect(@exchange_adapter.rate_for('USD', 'RUB')).to eq(65.12)
|
21
|
+
expect(@exchange_adapter.rate_for('RUB', 'USD')).to eq(0.02)
|
22
|
+
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
20
23
|
end
|
21
24
|
|
22
25
|
end
|