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.
Files changed (118) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -4
  3. data/README.md +41 -53
  4. data/VERSION +1 -1
  5. data/currency-rate.gemspec +92 -78
  6. data/lib/adapter.rb +37 -83
  7. data/lib/adapters/crypto/bitfinex_adapter.rb +17 -0
  8. data/lib/adapters/crypto/bitpay_adapter.rb +14 -0
  9. data/lib/adapters/crypto/bitstamp_adapter.rb +19 -0
  10. data/lib/adapters/crypto/btc_china_adapter.rb +11 -0
  11. data/lib/adapters/crypto/btc_e_adapter.rb +18 -0
  12. data/lib/adapters/crypto/coinbase_adapter.rb +14 -0
  13. data/lib/adapters/crypto/huobi_adapter.rb +17 -0
  14. data/lib/adapters/crypto/kraken_adapter.rb +29 -0
  15. data/lib/adapters/crypto/localbitcoins_adapter.rb +14 -0
  16. data/lib/adapters/crypto/okcoin_adapter.rb +19 -0
  17. data/lib/adapters/fiat/fixer_adapter.rb +16 -0
  18. data/lib/adapters/fiat/forge_adapter.rb +23 -0
  19. data/lib/adapters/fiat/yahoo_adapter.rb +35 -0
  20. data/lib/configuration.rb +21 -0
  21. data/lib/currency_rate.rb +52 -48
  22. data/lib/fetcher.rb +71 -0
  23. data/lib/storage/file_storage.rb +29 -0
  24. data/lib/storage/serializers/yaml_serializer.rb +15 -0
  25. data/lib/synchronizer.rb +31 -0
  26. data/spec/fixtures/adapters/bitfinex_adapter.yml +18 -0
  27. data/spec/fixtures/adapters/bitpay_adapter.yml +486 -0
  28. data/spec/fixtures/adapters/bitstamp_adapter.yml +30 -0
  29. data/spec/fixtures/adapters/btc_china_adapter.yml +11 -0
  30. data/spec/fixtures/adapters/btce_adapter.yml +60 -0
  31. data/spec/fixtures/adapters/coinbase_adapter.yml +680 -0
  32. data/spec/fixtures/adapters/fixer_adapter.yml +34 -0
  33. data/spec/fixtures/adapters/forge_adapter.yml +75 -0
  34. data/spec/fixtures/adapters/huobi_adapter.yml +22 -0
  35. data/spec/fixtures/adapters/kraken_adapter.yml +124 -0
  36. data/spec/fixtures/adapters/localbitcoins_adapter.yml +381 -0
  37. data/spec/fixtures/adapters/normalized/bitfinex_adapter.yml +2 -0
  38. data/spec/fixtures/adapters/normalized/bitpay_adapter.yml +161 -0
  39. data/spec/fixtures/adapters/normalized/bitstamp_adapter.yml +3 -0
  40. data/spec/fixtures/adapters/normalized/btc_china_adapter.yml +1 -0
  41. data/spec/fixtures/adapters/normalized/btce_adapter.yml +5 -0
  42. data/spec/fixtures/adapters/normalized/coinbase_adapter.yml +680 -0
  43. data/spec/fixtures/adapters/normalized/fixer_adapter.yml +32 -0
  44. data/spec/fixtures/adapters/normalized/forge_adapter.yml +16 -0
  45. data/spec/fixtures/adapters/normalized/huobi_adapter.yml +2 -0
  46. data/spec/fixtures/adapters/normalized/kraken_adapter.yml +4 -0
  47. data/spec/fixtures/adapters/normalized/localbitcoins_adapter.yml +57 -0
  48. data/spec/fixtures/adapters/normalized/okcoin_adapter.yml +4 -0
  49. data/spec/fixtures/adapters/normalized/yahoo_adapter.yml +160 -0
  50. data/spec/fixtures/adapters/okcoin_adapter.yml +40 -0
  51. data/spec/fixtures/adapters/yahoo_adapter.yml +1119 -0
  52. data/spec/lib/adapter_spec.rb +54 -0
  53. data/spec/lib/adapters/crypto/bitfinex_adapter_spec.rb +13 -0
  54. data/spec/lib/adapters/crypto/bitpay_adapter_spec.rb +13 -0
  55. data/spec/lib/adapters/crypto/bitstamp_adapter_spec.rb +13 -0
  56. data/spec/lib/adapters/crypto/btc_china_adapter_spec.rb +13 -0
  57. data/spec/lib/adapters/crypto/btc_e_adapter_spec.rb +13 -0
  58. data/spec/lib/adapters/crypto/coinbase_adapter_spec.rb +13 -0
  59. data/spec/lib/adapters/crypto/huobi_adapter_spec.rb +13 -0
  60. data/spec/lib/adapters/crypto/kraken_adapter_spec.rb +13 -0
  61. data/spec/lib/adapters/crypto/localbitcoins_adapter_spec.rb +13 -0
  62. data/spec/lib/adapters/crypto/okcoin_adapter_spec.rb +13 -0
  63. data/spec/lib/adapters/fiat/fixer_adapter_spec.rb +13 -0
  64. data/spec/lib/adapters/fiat/forge_adapter_spec.rb +23 -0
  65. data/spec/lib/adapters/fiat/yahoo_adapter_spec.rb +13 -0
  66. data/spec/lib/currency_rate_spec.rb +9 -0
  67. data/spec/lib/fetcher_spec.rb +156 -0
  68. data/spec/lib/storage/file_storage_spec.rb +38 -0
  69. data/spec/lib/synchronizer_spec.rb +65 -0
  70. data/spec/spec_helper.rb +23 -8
  71. data/spec/support/matchers/eq_any_of.rb +3 -0
  72. metadata +67 -64
  73. data/Gemfile.lock +0 -93
  74. data/lib/core_ext/deep_get.rb +0 -11
  75. data/lib/crypto_adapter.rb +0 -19
  76. data/lib/crypto_adapters/average_rate_adapter.rb +0 -54
  77. data/lib/crypto_adapters/bitfinex_adapter.rb +0 -40
  78. data/lib/crypto_adapters/bitpay_adapter.rb +0 -33
  79. data/lib/crypto_adapters/bitstamp_adapter.rb +0 -44
  80. data/lib/crypto_adapters/btcchina_adapter.rb +0 -19
  81. data/lib/crypto_adapters/btce_adapter.rb +0 -44
  82. data/lib/crypto_adapters/coinbase_adapter.rb +0 -23
  83. data/lib/crypto_adapters/huobi_adapter.rb +0 -40
  84. data/lib/crypto_adapters/kraken_adapter.rb +0 -42
  85. data/lib/crypto_adapters/localbitcoins_adapter.rb +0 -30
  86. data/lib/crypto_adapters/okcoin_adapter.rb +0 -43
  87. data/lib/fiat_adapter.rb +0 -17
  88. data/lib/fiat_adapters/fixer_adapter.rb +0 -38
  89. data/lib/fiat_adapters/yahoo_adapter.rb +0 -51
  90. data/lib/storage.rb +0 -20
  91. data/spec/currency_rate_spec.rb +0 -52
  92. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/average_rate_adapter.yml +0 -567
  93. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/bitfinex_adapter.yml +0 -121
  94. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/bitpay_adapter.yml +0 -272
  95. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/btcchina_adapter.yml +0 -55
  96. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/btce_adapter.yml +0 -223
  97. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/coinbase_adapter.yml +0 -96
  98. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/huobi_adapter.yml +0 -83
  99. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/kraken_adapter.yml +0 -179
  100. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/localbitcoins_adapter.yml +0 -133
  101. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/okcoin_adapter.yml +0 -223
  102. data/spec/fixtures/vcr/exchange_rate_adapters/fiat_adapters/fixer_adapter.yml +0 -85
  103. data/spec/fixtures/vcr/exchange_rate_adapters/fiat_adapters/yahoo_adapter.yml +0 -48
  104. data/spec/lib/crypto_adapter_spec.rb +0 -56
  105. data/spec/lib/crypto_adapters/average_rate_adapter_spec.rb +0 -46
  106. data/spec/lib/crypto_adapters/bitfinex_adapter_spec.rb +0 -38
  107. data/spec/lib/crypto_adapters/bitpay_adapter_spec.rb +0 -40
  108. data/spec/lib/crypto_adapters/bitstamp_adapter_spec.rb +0 -44
  109. data/spec/lib/crypto_adapters/btcchina_adapter_spec.rb +0 -36
  110. data/spec/lib/crypto_adapters/btce_adapter_spec.rb +0 -42
  111. data/spec/lib/crypto_adapters/coinbase_adapter_spec.rb +0 -39
  112. data/spec/lib/crypto_adapters/huobi_adapter_spec.rb +0 -38
  113. data/spec/lib/crypto_adapters/kraken_adapter_spec.rb +0 -38
  114. data/spec/lib/crypto_adapters/localbitcoins_adapter_spec.rb +0 -36
  115. data/spec/lib/crypto_adapters/okcoin_adapter_spec.rb +0 -43
  116. data/spec/lib/fiat_adapters/fixer_adapter_spec.rb +0 -25
  117. data/spec/lib/fiat_adapters/yahoo_adapter_spec.rb +0 -25
  118. 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
@@ -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