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,43 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
RSpec.describe CurrencyRate::OkcoinAdapter do
|
4
|
-
|
5
|
-
before :each do
|
6
|
-
VCR.insert_cassette 'exchange_rate_adapters/btc_adapters/okcoin_adapter'
|
7
|
-
end
|
8
|
-
|
9
|
-
after :each do
|
10
|
-
VCR.eject_cassette
|
11
|
-
end
|
12
|
-
|
13
|
-
before(:each) do
|
14
|
-
@exchange_adapter = CurrencyRate::OkcoinAdapter.instance
|
15
|
-
end
|
16
|
-
|
17
|
-
it "finds the rate for currency code" do
|
18
|
-
expect(@exchange_adapter.rate_for('BTC', 'USD')).to eq(1021.09)
|
19
|
-
expect(@exchange_adapter.rate_for('USD', 'BTC').to_f).to eq(0.000979346)
|
20
|
-
expect(@exchange_adapter.rate_for('BTC', 'CNY')).to eq(7203.0)
|
21
|
-
expect(@exchange_adapter.rate_for('CNY', 'BTC').to_f).to eq(0.000138831)
|
22
|
-
|
23
|
-
expect(@exchange_adapter.rate_for('LTC', 'USD')).to eq(3.987)
|
24
|
-
expect(@exchange_adapter.rate_for('USD', 'LTC').to_f).to eq(0.250815149)
|
25
|
-
expect(@exchange_adapter.rate_for('LTC', 'CNY')).to eq(28.0)
|
26
|
-
expect(@exchange_adapter.rate_for('CNY', 'LTC').to_f).to eq(0.035714286)
|
27
|
-
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
28
|
-
end
|
29
|
-
|
30
|
-
it "raises exception if rate is nil" do
|
31
|
-
response = [
|
32
|
-
'{"date":"1422679981","ticker":{}}',
|
33
|
-
'{"date":"1422679981","ticker":{"buy":"227.27","high":"243.55","bambo":"226.89","low":"226.0","sell":"227.74","vol":"16065.2085"}}',
|
34
|
-
'{"date":"1422679981","ticker":{"buy":"227.27","high":"243.55","last":null,"low":"226.0","sell":"227.74","vol":"16065.2085"}}',
|
35
|
-
]
|
36
|
-
3.times do |i|
|
37
|
-
@exchange_adapter.instance_variable_set :@rates_updated_at, Time.now
|
38
|
-
@exchange_adapter.instance_variable_set :@rates, JSON.parse(response[i])
|
39
|
-
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'BTC') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
RSpec.describe CurrencyRate::FixerAdapter do
|
4
|
-
|
5
|
-
before :each do
|
6
|
-
VCR.insert_cassette 'exchange_rate_adapters/fiat_adapters/fixer_adapter'
|
7
|
-
end
|
8
|
-
|
9
|
-
after :each do
|
10
|
-
VCR.eject_cassette
|
11
|
-
end
|
12
|
-
|
13
|
-
before(:each) do
|
14
|
-
@exchange_adapter = CurrencyRate::FixerAdapter.instance
|
15
|
-
end
|
16
|
-
|
17
|
-
it "finds the rate for currency code" do
|
18
|
-
expect(@exchange_adapter.rate_for('EUR', 'USD')).to eq(1.08)
|
19
|
-
expect(@exchange_adapter.rate_for('USD', 'EUR')).to eq(0.93)
|
20
|
-
expect(@exchange_adapter.rate_for('USD', 'RUB')).to eq(59.22)
|
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)
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
RSpec.describe CurrencyRate::YahooAdapter do
|
4
|
-
|
5
|
-
before :each do
|
6
|
-
VCR.insert_cassette 'exchange_rate_adapters/fiat_adapters/yahoo_adapter'
|
7
|
-
end
|
8
|
-
|
9
|
-
after :each do
|
10
|
-
VCR.eject_cassette
|
11
|
-
end
|
12
|
-
|
13
|
-
before(:each) do
|
14
|
-
@exchange_adapter = CurrencyRate::YahooAdapter.instance
|
15
|
-
end
|
16
|
-
|
17
|
-
it "finds the rate for currency code" do
|
18
|
-
expect(@exchange_adapter.rate_for('EUR', 'USD')).to eq(1.08)
|
19
|
-
expect(@exchange_adapter.rate_for('USD', 'EUR')).to eq(0.93)
|
20
|
-
expect(@exchange_adapter.rate_for('USD', 'RUB')).to eq(58.91)
|
21
|
-
expect(@exchange_adapter.rate_for('RUB', 'USD')).to eq(0.02)
|
22
|
-
expect( -> { @exchange_adapter.rate_for('USD', 'FEDcoin') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
data/spec/lib/storage_spec.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe CurrencyRate::Storage do
|
4
|
-
|
5
|
-
before(:each) do
|
6
|
-
@source = double("Source") # source object from which the data is received
|
7
|
-
@storage = CurrencyRate::Storage.new
|
8
|
-
end
|
9
|
-
|
10
|
-
it "fetches from storage when timestamp isn't expired" do
|
11
|
-
expect(@source).to receive(:get).once.and_return('hi')
|
12
|
-
@storage.fetch('hello_world') { @source.get }
|
13
|
-
expect(@storage.fetch('hello_world')).to eq('hi')
|
14
|
-
end
|
15
|
-
|
16
|
-
it "runs a passed block to receive new result when timestamp is expired" do
|
17
|
-
expect(@source).to receive(:get).twice.and_return('hi', 'hello')
|
18
|
-
@storage.fetch('hello_world') { @source.get }
|
19
|
-
@storage.instance_variable_set(:@timeout, -1)
|
20
|
-
@storage.fetch('hello_world') { @source.get }
|
21
|
-
@storage.instance_variable_set(:@timeout, 1800)
|
22
|
-
expect(@storage.fetch('hello_world') { '' }).to eq('hello')
|
23
|
-
end
|
24
|
-
|
25
|
-
it "fetches from storage regardless if the timestamp expired if :force_from_storage is true" do
|
26
|
-
allow(@source).to receive(:get).twice.and_return('hi', 'hello')
|
27
|
-
@storage.fetch('hello_world') { @source.get }
|
28
|
-
@storage.instance_variable_set(:@timeout, 1800)
|
29
|
-
expect(@storage.fetch('hello_world') { '' }).to eq('hi')
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|