currency-rate 1.2.0 → 1.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +2 -1
  3. data/README.md +8 -0
  4. data/Rakefile +29 -0
  5. data/VERSION +1 -1
  6. data/api_keys.yml.sample +3 -0
  7. data/bin/rake +29 -0
  8. data/bin/rspec +29 -0
  9. data/currency-rate.gemspec +46 -35
  10. data/lib/adapter.rb +4 -3
  11. data/lib/adapters/crypto/binance_adapter.rb +42 -0
  12. data/lib/adapters/crypto/bitfinex_adapter.rb +29 -6
  13. data/lib/adapters/crypto/bitpay_adapter.rb +17 -2
  14. data/lib/adapters/crypto/bitstamp_adapter.rb +9 -8
  15. data/lib/adapters/crypto/coinbase_adapter.rb +20 -4
  16. data/lib/adapters/crypto/exmo_adapter.rb +27 -0
  17. data/lib/adapters/crypto/kraken_adapter.rb +22 -11
  18. data/lib/adapters/crypto/localbitcoins_adapter.rb +13 -2
  19. data/lib/adapters/fiat/currency_layer_adapter.rb +14 -12
  20. data/lib/adapters/fiat/fixer_adapter.rb +4 -2
  21. data/lib/adapters/fiat/forge_adapter.rb +5 -3
  22. data/lib/adapters/fiat/free_forex_adapter.rb +32 -0
  23. data/lib/configuration.rb +12 -8
  24. data/lib/currency_rate.rb +16 -7
  25. data/lib/fetcher.rb +28 -41
  26. data/lib/storage/file_storage.rb +2 -2
  27. data/lib/synchronizer.rb +31 -17
  28. data/spec/fixtures/adapters/binance_rates.yml +993 -0
  29. data/spec/fixtures/adapters/bitfinex_rates.yml +4050 -0
  30. data/spec/fixtures/adapters/{bitpay_adapter.yml → bitpay_rates.yml} +179 -175
  31. data/spec/fixtures/adapters/bitstamp_rates.yml +61 -0
  32. data/spec/fixtures/adapters/{btc_china_adapter.yml → btc_china_rates.yml} +0 -0
  33. data/spec/fixtures/adapters/{btce_adapter.yml → btce_rates.yml} +0 -0
  34. data/spec/fixtures/adapters/coinbase_rates.yml +181 -0
  35. data/spec/fixtures/adapters/{currency_layer_adapter.yml → currency_layer_rates.yml} +0 -0
  36. data/spec/fixtures/adapters/exmo_rates.yml +1251 -0
  37. data/spec/fixtures/adapters/fixer_rates.yml +174 -0
  38. data/spec/fixtures/adapters/{forge_adapter.yml → forge_rates.yml} +0 -0
  39. data/spec/fixtures/adapters/free_forex_rates.yml +59 -0
  40. data/spec/fixtures/adapters/{huobi_adapter.yml → huobi_rates.yml} +0 -0
  41. data/spec/fixtures/adapters/kraken_rates.yml +507 -0
  42. data/spec/fixtures/adapters/localbitcoins_rates.yml +493 -0
  43. data/spec/fixtures/adapters/normalized/binance_rates.yml +134 -0
  44. data/spec/fixtures/adapters/normalized/bitfinex_rates.yml +95 -0
  45. data/spec/fixtures/adapters/normalized/bitpay_rates.yml +164 -0
  46. data/spec/fixtures/adapters/normalized/bitstamp_rates.yml +9 -0
  47. data/spec/fixtures/adapters/normalized/{btc_china_adapter.yml → btc_china_rates.yml} +0 -0
  48. data/spec/fixtures/adapters/normalized/{btce_adapter.yml → btce_rates.yml} +0 -0
  49. data/spec/fixtures/adapters/normalized/coinbase_rates.yml +179 -0
  50. data/spec/fixtures/adapters/normalized/{currency_layer_adapter.yml → currency_layer_rates.yml} +0 -0
  51. data/spec/fixtures/adapters/normalized/exmo_rates.yml +42 -0
  52. data/spec/fixtures/adapters/normalized/fixer_rates.yml +170 -0
  53. data/spec/fixtures/adapters/normalized/{forge_adapter.yml → forge_rates.yml} +0 -0
  54. data/spec/fixtures/adapters/normalized/free_forex_rates.yml +16 -0
  55. data/spec/fixtures/adapters/normalized/{huobi_adapter.yml → huobi_rates.yml} +0 -0
  56. data/spec/fixtures/adapters/normalized/kraken_rates.yml +21 -0
  57. data/spec/fixtures/adapters/normalized/localbitcoins_rates.yml +73 -0
  58. data/spec/fixtures/adapters/normalized/{okcoin_adapter.yml → okcoin_rates.yml} +0 -0
  59. data/spec/fixtures/adapters/normalized/{yahoo_adapter.yml → yahoo_rates.yml} +0 -0
  60. data/spec/fixtures/adapters/{okcoin_adapter.yml → okcoin_rates.yml} +0 -0
  61. data/spec/fixtures/adapters/{yahoo_adapter.yml → yahoo_rates.yml} +0 -0
  62. data/spec/lib/adapters/crypto/binance_adapter_spec.rb +13 -0
  63. data/spec/lib/adapters/crypto/exmo_adapter_spec.rb +13 -0
  64. data/spec/lib/adapters/fiat/free_forex_adapter_spec.rb +13 -0
  65. data/spec/lib/fetcher_spec.rb +17 -49
  66. data/spec/lib/synchronizer_spec.rb +36 -2
  67. data/spec/spec_helper.rb +2 -2
  68. metadata +66 -35
  69. data/spec/fixtures/adapters/bitfinex_adapter.yml +0 -18
  70. data/spec/fixtures/adapters/bitstamp_adapter.yml +0 -30
  71. data/spec/fixtures/adapters/coinbase_adapter.yml +0 -680
  72. data/spec/fixtures/adapters/fixer_adapter.yml +0 -34
  73. data/spec/fixtures/adapters/kraken_adapter.yml +0 -124
  74. data/spec/fixtures/adapters/localbitcoins_adapter.yml +0 -381
  75. data/spec/fixtures/adapters/normalized/bitfinex_adapter.yml +0 -2
  76. data/spec/fixtures/adapters/normalized/bitpay_adapter.yml +0 -161
  77. data/spec/fixtures/adapters/normalized/bitstamp_adapter.yml +0 -3
  78. data/spec/fixtures/adapters/normalized/coinbase_adapter.yml +0 -680
  79. data/spec/fixtures/adapters/normalized/fixer_adapter.yml +0 -32
  80. data/spec/fixtures/adapters/normalized/kraken_adapter.yml +0 -4
  81. data/spec/fixtures/adapters/normalized/localbitcoins_adapter.yml +0 -57
@@ -0,0 +1,42 @@
1
+ ---
2
+ anchor: BTC
3
+ USD: !ruby/object:BigDecimal 27:0.412399257125e4
4
+ EUR: !ruby/object:BigDecimal 27:0.366553264601e4
5
+ RUB: !ruby/object:BigDecimal 27:0.29018345585319e6
6
+ UAH: !ruby/object:BigDecimal 27:0.11617031145012e6
7
+ PLN: !ruby/object:BigDecimal 27:0.1519344116808e5
8
+ TRY: !ruby/object:BigDecimal 27:0.213391822269e5
9
+ QTUM: !ruby/object:BigDecimal 36:0.1550579916889e4
10
+ HB: !ruby/object:BigDecimal 36:0.403225806451613e6
11
+ SMART: !ruby/object:BigDecimal 36:0.227790432801822e6
12
+ XEM: !ruby/object:BigDecimal 36:0.542888165038e5
13
+ GUSD: !ruby/object:BigDecimal 36:0.3987240829346e4
14
+ LSK: !ruby/object:BigDecimal 36:0.2674082789603e4
15
+ NEO: !ruby/object:BigDecimal 36:0.517694808556e3
16
+ ADA: !ruby/object:BigDecimal 36:0.91911764705882e5
17
+ ZRX: !ruby/object:BigDecimal 36:0.11650937900501e5
18
+ GNT: !ruby/object:BigDecimal 36:0.54824561403509e5
19
+ TRX: !ruby/object:BigDecimal 36:0.192307692307692e6
20
+ GAS: !ruby/object:BigDecimal 36:0.1795590030884e4
21
+ INK: !ruby/object:BigDecimal 36:0.609756097560976e6
22
+ MNX: !ruby/object:BigDecimal 36:0.3726754369619e4
23
+ OMG: !ruby/object:BigDecimal 36:0.24258302404e4
24
+ XLM: !ruby/object:BigDecimal 36:0.32010243277849e5
25
+ EOS: !ruby/object:BigDecimal 36:0.1431147494061e4
26
+ STQ: !ruby/object:BigDecimal 36:0.1e8
27
+ BTG: !ruby/object:BigDecimal 36:0.265336446614e3
28
+ HBZ: !ruby/object:BigDecimal 36:0.7692307692307692e7
29
+ DXT: !ruby/object:BigDecimal 36:0.15625e7
30
+ BTCZ: !ruby/object:BigDecimal 36:0.14285714285714286e8
31
+ BCH: !ruby/object:BigDecimal 36:0.20142187732e2
32
+ DASH: !ruby/object:BigDecimal 36:0.44778993279e2
33
+ ETH: !ruby/object:BigDecimal 36:0.3014734212e2
34
+ ETC: !ruby/object:BigDecimal 36:0.818089597173e3
35
+ LTC: !ruby/object:BigDecimal 36:0.120243468976e3
36
+ ZEC: !ruby/object:BigDecimal 36:0.61436948795e2
37
+ XRP: !ruby/object:BigDecimal 36:0.10799136069114e5
38
+ XMR: !ruby/object:BigDecimal 36:0.75039189217e2
39
+ USDT: !ruby/object:BigDecimal 27:0.399124450824e4
40
+ DOGE: !ruby/object:BigDecimal 36:0.1612903225806452e7
41
+ WAVES: !ruby/object:BigDecimal 36:0.1084316446912e4
42
+ KICK: !ruby/object:BigDecimal 36:0.666666666666667e6
@@ -0,0 +1,170 @@
1
+ ---
2
+ anchor: EUR
3
+ AED: !ruby/object:BigDecimal 18:0.4190433e1
4
+ AFN: !ruby/object:BigDecimal 18:0.86750751e2
5
+ ALL: !ruby/object:BigDecimal 18:0.123894177e3
6
+ AMD: !ruby/object:BigDecimal 18:0.552361927e3
7
+ ANG: !ruby/object:BigDecimal 18:0.2024004e1
8
+ AOA: !ruby/object:BigDecimal 18:0.353057265e3
9
+ ARS: !ruby/object:BigDecimal 18:0.42809533e2
10
+ AUD: !ruby/object:BigDecimal 18:0.1582907e1
11
+ AWG: !ruby/object:BigDecimal 18:0.2053435e1
12
+ AZN: !ruby/object:BigDecimal 18:0.1945039e1
13
+ BAM: !ruby/object:BigDecimal 18:0.1954698e1
14
+ BBD: !ruby/object:BigDecimal 18:0.2282392e1
15
+ BDT: !ruby/object:BigDecimal 18:0.95666108e2
16
+ BGN: !ruby/object:BigDecimal 18:0.1954813e1
17
+ BHD: !ruby/object:BigDecimal 18:0.430138e0
18
+ BIF: !ruby/object:BigDecimal 27:0.2036151438e4
19
+ BMD: !ruby/object:BigDecimal 18:0.1140797e1
20
+ BND: !ruby/object:BigDecimal 18:0.1797565e1
21
+ BOB: !ruby/object:BigDecimal 18:0.7879427e1
22
+ BRL: !ruby/object:BigDecimal 18:0.4464624e1
23
+ BSD: !ruby/object:BigDecimal 18:0.1140284e1
24
+ BTC: !ruby/object:BigDecimal 18:0.325e-3
25
+ BTN: !ruby/object:BigDecimal 18:0.82736909e2
26
+ BWP: !ruby/object:BigDecimal 18:0.12189431e2
27
+ BYN: !ruby/object:BigDecimal 18:0.2420828e1
28
+ BYR: !ruby/object:BigDecimal 27:0.22359620244e5
29
+ BZD: !ruby/object:BigDecimal 18:0.2298481e1
30
+ CAD: !ruby/object:BigDecimal 18:0.1521903e1
31
+ CDF: !ruby/object:BigDecimal 18:0.183782349e4
32
+ CHF: !ruby/object:BigDecimal 18:0.1129246e1
33
+ CLF: !ruby/object:BigDecimal 18:0.28574e-1
34
+ CLP: !ruby/object:BigDecimal 18:0.772005783e3
35
+ CNY: !ruby/object:BigDecimal 18:0.7886107e1
36
+ COP: !ruby/object:BigDecimal 27:0.3588662009e4
37
+ CRC: !ruby/object:BigDecimal 18:0.680194491e3
38
+ CUC: !ruby/object:BigDecimal 18:0.1140797e1
39
+ CUP: !ruby/object:BigDecimal 18:0.30231119e2
40
+ CVE: !ruby/object:BigDecimal 18:0.110207259e3
41
+ CZK: !ruby/object:BigDecimal 18:0.25866448e2
42
+ DJF: !ruby/object:BigDecimal 18:0.202742871e3
43
+ DKK: !ruby/object:BigDecimal 18:0.7463937e1
44
+ DOP: !ruby/object:BigDecimal 18:0.57216723e2
45
+ DZD: !ruby/object:BigDecimal 18:0.135092974e3
46
+ EGP: !ruby/object:BigDecimal 18:0.20492025e2
47
+ ERN: !ruby/object:BigDecimal 18:0.17111486e2
48
+ ETB: !ruby/object:BigDecimal 18:0.31744923e2
49
+ EUR: !ruby/object:BigDecimal 18:0.1e1
50
+ FJD: !ruby/object:BigDecimal 18:0.2412901e1
51
+ FKP: !ruby/object:BigDecimal 18:0.901207e0
52
+ GBP: !ruby/object:BigDecimal 18:0.90419e0
53
+ GEL: !ruby/object:BigDecimal 18:0.3031669e1
54
+ GGP: !ruby/object:BigDecimal 18:0.904152e0
55
+ GHS: !ruby/object:BigDecimal 18:0.5684252e1
56
+ GIP: !ruby/object:BigDecimal 18:0.901138e0
57
+ GMD: !ruby/object:BigDecimal 18:0.5652594e2
58
+ GNF: !ruby/object:BigDecimal 27:0.10367619672e5
59
+ GTQ: !ruby/object:BigDecimal 18:0.8817391e1
60
+ GYD: !ruby/object:BigDecimal 18:0.238283938e3
61
+ HKD: !ruby/object:BigDecimal 18:0.8915043e1
62
+ HNL: !ruby/object:BigDecimal 18:0.278081e2
63
+ HRK: !ruby/object:BigDecimal 18:0.7386886e1
64
+ HTG: !ruby/object:BigDecimal 18:0.85964186e2
65
+ HUF: !ruby/object:BigDecimal 18:0.323208325e3
66
+ IDR: !ruby/object:BigDecimal 27:0.16640805128e5
67
+ ILS: !ruby/object:BigDecimal 18:0.4260169e1
68
+ IMP: !ruby/object:BigDecimal 18:0.904152e0
69
+ INR: !ruby/object:BigDecimal 18:0.82867278e2
70
+ IQD: !ruby/object:BigDecimal 27:0.1360628524e4
71
+ IRR: !ruby/object:BigDecimal 27:0.48033255079e5
72
+ ISK: !ruby/object:BigDecimal 18:0.140192255e3
73
+ JEP: !ruby/object:BigDecimal 18:0.904152e0
74
+ JMD: !ruby/object:BigDecimal 18:0.145520191e3
75
+ JOD: !ruby/object:BigDecimal 18:0.809513e0
76
+ JPY: !ruby/object:BigDecimal 18:0.128784294e3
77
+ KES: !ruby/object:BigDecimal 18:0.116885581e3
78
+ KGS: !ruby/object:BigDecimal 18:0.79684553e2
79
+ KHR: !ruby/object:BigDecimal 27:0.4572086205e4
80
+ KMF: !ruby/object:BigDecimal 18:0.492266234e3
81
+ KPW: !ruby/object:BigDecimal 27:0.1026782997e4
82
+ KRW: !ruby/object:BigDecimal 27:0.1286647807e4
83
+ KWD: !ruby/object:BigDecimal 18:0.346923e0
84
+ KYD: !ruby/object:BigDecimal 18:0.950261e0
85
+ KZT: !ruby/object:BigDecimal 18:0.421604069e3
86
+ LAK: !ruby/object:BigDecimal 27:0.9754201712e4
87
+ LBP: !ruby/object:BigDecimal 27:0.1725284494e4
88
+ LKR: !ruby/object:BigDecimal 18:0.204157317e3
89
+ LRD: !ruby/object:BigDecimal 18:0.180303218e3
90
+ LSL: !ruby/object:BigDecimal 18:0.16164559e2
91
+ LTL: !ruby/object:BigDecimal 18:0.3368477e1
92
+ LVL: !ruby/object:BigDecimal 18:0.690057e0
93
+ LYD: !ruby/object:BigDecimal 18:0.1590245e1
94
+ MAD: !ruby/object:BigDecimal 18:0.10814183e2
95
+ MDL: !ruby/object:BigDecimal 18:0.19641666e2
96
+ MGA: !ruby/object:BigDecimal 27:0.4011041922e4
97
+ MKD: !ruby/object:BigDecimal 18:0.61477834e2
98
+ MMK: !ruby/object:BigDecimal 27:0.1781708565e4
99
+ MNT: !ruby/object:BigDecimal 18:0.300758667e4
100
+ MOP: !ruby/object:BigDecimal 18:0.9178057e1
101
+ MRO: !ruby/object:BigDecimal 18:0.407264625e3
102
+ MUR: !ruby/object:BigDecimal 18:0.38958117e2
103
+ MVR: !ruby/object:BigDecimal 18:0.17625101e2
104
+ MWK: !ruby/object:BigDecimal 18:0.838491417e3
105
+ MXN: !ruby/object:BigDecimal 18:0.23160444e2
106
+ MYR: !ruby/object:BigDecimal 18:0.4759426e1
107
+ MZN: !ruby/object:BigDecimal 18:0.70239183e2
108
+ NAD: !ruby/object:BigDecimal 18:0.16164884e2
109
+ NGN: !ruby/object:BigDecimal 18:0.41581876e3
110
+ NIO: !ruby/object:BigDecimal 18:0.36980029e2
111
+ NOK: !ruby/object:BigDecimal 18:0.969334e1
112
+ NPR: !ruby/object:BigDecimal 18:0.130153274e3
113
+ NZD: !ruby/object:BigDecimal 18:0.1657966e1
114
+ OMR: !ruby/object:BigDecimal 18:0.439167e0
115
+ PAB: !ruby/object:BigDecimal 18:0.1140284e1
116
+ PEN: !ruby/object:BigDecimal 18:0.3841349e1
117
+ PGK: !ruby/object:BigDecimal 18:0.3841919e1
118
+ PHP: !ruby/object:BigDecimal 18:0.60333293e2
119
+ PKR: !ruby/object:BigDecimal 18:0.159420683e3
120
+ PLN: !ruby/object:BigDecimal 18:0.4293195e1
121
+ PYG: !ruby/object:BigDecimal 27:0.6745648961e4
122
+ QAR: !ruby/object:BigDecimal 18:0.4153629e1
123
+ RON: !ruby/object:BigDecimal 18:0.4650803e1
124
+ RSD: !ruby/object:BigDecimal 18:0.118357611e3
125
+ RUB: !ruby/object:BigDecimal 18:0.75922546e2
126
+ RWF: !ruby/object:BigDecimal 27:0.1016723875e4
127
+ SAR: !ruby/object:BigDecimal 18:0.4280099e1
128
+ SBD: !ruby/object:BigDecimal 18:0.9192199e1
129
+ SCR: !ruby/object:BigDecimal 18:0.15560377e2
130
+ SDG: !ruby/object:BigDecimal 18:0.54299648e2
131
+ SEK: !ruby/object:BigDecimal 18:0.10327418e2
132
+ SGD: !ruby/object:BigDecimal 18:0.1565061e1
133
+ SHP: !ruby/object:BigDecimal 18:0.1506874e1
134
+ SLL: !ruby/object:BigDecimal 27:0.9668254108e4
135
+ SOS: !ruby/object:BigDecimal 18:0.661661925e3
136
+ SRD: !ruby/object:BigDecimal 18:0.8508037e1
137
+ STD: !ruby/object:BigDecimal 27:0.24014459857e5
138
+ SVC: !ruby/object:BigDecimal 18:0.997832e1
139
+ SYP: !ruby/object:BigDecimal 18:0.58751012e3
140
+ SZL: !ruby/object:BigDecimal 18:0.16254106e2
141
+ THB: !ruby/object:BigDecimal 18:0.37509991e2
142
+ TJS: !ruby/object:BigDecimal 18:0.10748815e2
143
+ TMT: !ruby/object:BigDecimal 18:0.4004197e1
144
+ TND: !ruby/object:BigDecimal 18:0.3339338e1
145
+ TOP: !ruby/object:BigDecimal 18:0.2572612e1
146
+ TRY: !ruby/object:BigDecimal 18:0.605644e1
147
+ TTD: !ruby/object:BigDecimal 18:0.7685834e1
148
+ TWD: !ruby/object:BigDecimal 18:0.35252915e2
149
+ TZS: !ruby/object:BigDecimal 27:0.2623711447e4
150
+ UAH: !ruby/object:BigDecimal 18:0.31627438e2
151
+ UGX: !ruby/object:BigDecimal 27:0.4255571622e4
152
+ USD: !ruby/object:BigDecimal 18:0.1140797e1
153
+ UYU: !ruby/object:BigDecimal 18:0.36676581e2
154
+ UZS: !ruby/object:BigDecimal 27:0.9481335171e4
155
+ VEF: !ruby/object:BigDecimal 27:0.283565331696e6
156
+ VND: !ruby/object:BigDecimal 27:0.26575891697e5
157
+ VUV: !ruby/object:BigDecimal 18:0.129037865e3
158
+ WST: !ruby/object:BigDecimal 18:0.2964678e1
159
+ XAF: !ruby/object:BigDecimal 18:0.655593406e3
160
+ XAG: !ruby/object:BigDecimal 18:0.78535e-1
161
+ XAU: !ruby/object:BigDecimal 18:0.917e-3
162
+ XCD: !ruby/object:BigDecimal 18:0.3083061e1
163
+ XDR: !ruby/object:BigDecimal 18:0.823261e0
164
+ XOF: !ruby/object:BigDecimal 18:0.655581712e3
165
+ XPF: !ruby/object:BigDecimal 18:0.119190293e3
166
+ YER: !ruby/object:BigDecimal 18:0.285598477e3
167
+ ZAR: !ruby/object:BigDecimal 18:0.16371807e2
168
+ ZMK: !ruby/object:BigDecimal 27:0.10268538687e5
169
+ ZMW: !ruby/object:BigDecimal 18:0.13512712e2
170
+ ZWL: !ruby/object:BigDecimal 18:0.367741614e3
@@ -0,0 +1,16 @@
1
+ anchor: "USD"
2
+ JPY: 113.7615
3
+ CHF: 0.98699
4
+ CAD: 1.26549
5
+ SEK: 8.21227
6
+ NOK: 8.0148
7
+ MXN: 19.0939
8
+ ZAR: 13.7208
9
+ TRY: 3.71892
10
+ CNH: 6.63922
11
+ EUR: 0.852751
12
+ GBP: 0.757828
13
+ AUD: 1.28239
14
+ NZD: 1.43683
15
+ XAU: 0.000781711
16
+ XAG: 0.058658
@@ -0,0 +1,21 @@
1
+ ---
2
+ anchor: USD
3
+ USD: !ruby/object:BigDecimal 18:0.1e1
4
+ ADA: !ruby/object:BigDecimal 36:0.20704791089e2
5
+ BCH: !ruby/object:BigDecimal 36:0.4784688995215311e-2
6
+ BSV: !ruby/object:BigDecimal 45:0.8703220191470844212358573e-2
7
+ DASH: !ruby/object:BigDecimal 45:0.10392957731840904603040979e-1
8
+ EOS: !ruby/object:BigDecimal 45:0.330098369314055588565392487e0
9
+ GNO: !ruby/object:BigDecimal 45:0.83892617449664429530201342e-1
10
+ QTUM: !ruby/object:BigDecimal 45:0.349076692149265193563025797e0
11
+ USDT: !ruby/object:BigDecimal 45:0.992851469420174741858617951e0
12
+ ETC: !ruby/object:BigDecimal 45:0.184229918938835666912306559e0
13
+ ETH: !ruby/object:BigDecimal 45:0.6795786612300373768263677e-2
14
+ LTC: !ruby/object:BigDecimal 36:0.27777777777777778e-1
15
+ REP: !ruby/object:BigDecimal 45:0.107654214662504037033049844e0
16
+ XTZ: !ruby/object:BigDecimal 36:0.1716148962e1
17
+ BTC: !ruby/object:BigDecimal 45:0.23810090716445629657849e-3
18
+ XLM: !ruby/object:BigDecimal 36:0.7151848038e1
19
+ XMR: !ruby/object:BigDecimal 45:0.17724211272598369372562921e-1
20
+ XRP: !ruby/object:BigDecimal 36:0.229652765e1
21
+ ZEC: !ruby/object:BigDecimal 45:0.14052838673412029229904441e-1
@@ -0,0 +1,73 @@
1
+ ---
2
+ anchor: BTC
3
+ COP: !ruby/object:BigDecimal 27:0.127493114e8
4
+ USD: !ruby/object:BigDecimal 18:0.663911e4
5
+ TWD: !ruby/object:BigDecimal 18:0.12366578e6
6
+ GHS: !ruby/object:BigDecimal 18:0.1940597e5
7
+ DASH: !ruby/object:BigDecimal 18:0.4616e2
8
+ NGN: !ruby/object:BigDecimal 18:0.1483e7
9
+ EGP: !ruby/object:BigDecimal 18:0.7704933e5
10
+ IDR: !ruby/object:BigDecimal 27:0.6327229927e8
11
+ HNL: !ruby/object:BigDecimal 18:0.1e6
12
+ CRC: !ruby/object:BigDecimal 18:0.231011811e7
13
+ PEN: !ruby/object:BigDecimal 18:0.1465e5
14
+ AED: !ruby/object:BigDecimal 18:0.1422976e5
15
+ GBP: !ruby/object:BigDecimal 18:0.351652e4
16
+ MWK: !ruby/object:BigDecimal 18:0.344837627e7
17
+ DOP: !ruby/object:BigDecimal 18:0.19099927e6
18
+ LKR: !ruby/object:BigDecimal 18:0.82649798e6
19
+ DKK: !ruby/object:BigDecimal 18:0.218721e5
20
+ AUD: !ruby/object:BigDecimal 18:0.678064e4
21
+ PKR: !ruby/object:BigDecimal 18:0.64395025e6
22
+ JPY: !ruby/object:BigDecimal 18:0.41299434e6
23
+ TZS: !ruby/object:BigDecimal 18:0.91e7
24
+ VND: !ruby/object:BigDecimal 27:0.10147828492e9
25
+ KWD: !ruby/object:BigDecimal 18:0.128685e4
26
+ RON: !ruby/object:BigDecimal 18:0.1479364e5
27
+ CLP: !ruby/object:BigDecimal 18:0.33000033e7
28
+ MYR: !ruby/object:BigDecimal 18:0.1688598e5
29
+ THB: !ruby/object:BigDecimal 18:0.13069076e6
30
+ UAH: !ruby/object:BigDecimal 18:0.115e6
31
+ UGX: !ruby/object:BigDecimal 27:0.16e8
32
+ JOD: !ruby/object:BigDecimal 18:0.310621e4
33
+ XMR: !ruby/object:BigDecimal 18:0.7797e2
34
+ QAR: !ruby/object:BigDecimal 18:0.1902498e5
35
+ SAR: !ruby/object:BigDecimal 18:0.1615426e5
36
+ ETH: !ruby/object:BigDecimal 18:0.3142e2
37
+ CAD: !ruby/object:BigDecimal 18:0.606405e4
38
+ SEK: !ruby/object:BigDecimal 18:0.3699445e5
39
+ SGD: !ruby/object:BigDecimal 18:0.555581e4
40
+ HKD: !ruby/object:BigDecimal 18:0.3377905e5
41
+ GEL: !ruby/object:BigDecimal 18:0.1092341e5
42
+ VES: !ruby/object:BigDecimal 18:0.296637695e7
43
+ CHF: !ruby/object:BigDecimal 18:0.438436e4
44
+ IRR: !ruby/object:BigDecimal 27:0.418580977e9
45
+ XOF: !ruby/object:BigDecimal 18:0.260622993e7
46
+ KRW: !ruby/object:BigDecimal 18:0.493323495e7
47
+ CNY: !ruby/object:BigDecimal 18:0.2924707e5
48
+ BYN: !ruby/object:BigDecimal 18:0.998109e4
49
+ BDT: !ruby/object:BigDecimal 18:0.31244274e6
50
+ NZD: !ruby/object:BigDecimal 18:0.679631e4
51
+ TRY: !ruby/object:BigDecimal 18:0.2053274e5
52
+ XRP: !ruby/object:BigDecimal 18:0.1111831e5
53
+ XAF: !ruby/object:BigDecimal 18:0.216502725e7
54
+ EUR: !ruby/object:BigDecimal 18:0.359529e4
55
+ LTC: !ruby/object:BigDecimal 18:0.12205e3
56
+ MGA: !ruby/object:BigDecimal 27:0.1801846442e8
57
+ ARS: !ruby/object:BigDecimal 18:0.20910295e6
58
+ UYU: !ruby/object:BigDecimal 18:0.15183513e6
59
+ SZL: !ruby/object:BigDecimal 18:0.6942379e5
60
+ KZT: !ruby/object:BigDecimal 18:0.175083871e7
61
+ NOK: !ruby/object:BigDecimal 18:0.38584e5
62
+ RUB: !ruby/object:BigDecimal 18:0.30800031e6
63
+ ZAR: !ruby/object:BigDecimal 18:0.587e5
64
+ PAB: !ruby/object:BigDecimal 18:0.41e4
65
+ INR: !ruby/object:BigDecimal 18:0.30011104e6
66
+ MXN: !ruby/object:BigDecimal 18:0.879e5
67
+ CZK: !ruby/object:BigDecimal 18:0.8228387e5
68
+ BRL: !ruby/object:BigDecimal 18:0.1732362e5
69
+ MAD: !ruby/object:BigDecimal 18:0.4204896e5
70
+ PLN: !ruby/object:BigDecimal 18:0.1426295e5
71
+ PHP: !ruby/object:BigDecimal 18:0.19297456e6
72
+ KES: !ruby/object:BigDecimal 18:0.46254363e6
73
+ ILS: !ruby/object:BigDecimal 18:0.1445634e5
@@ -0,0 +1,13 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe CurrencyRate::BinanceAdapter do
4
+ before(:all) { @data, @normalized = data_for :binance }
5
+
6
+ before { @adapter = CurrencyRate::BinanceAdapter.instance }
7
+
8
+ describe "#normalize" do
9
+ it "brings data to canonical form" do
10
+ expect(@adapter.normalize(@data)).to eq(@normalized)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe CurrencyRate::ExmoAdapter do
4
+ before(:all) { @data, @normalized = data_for :exmo }
5
+
6
+ before { @adapter = CurrencyRate::ExmoAdapter.instance }
7
+
8
+ describe "#normalize" do
9
+ it "brings data to canonical form" do
10
+ expect(@adapter.normalize(@data)).to eq(@normalized)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe CurrencyRate::FreeForexAdapter do
4
+ before(:all) { @data, @normalized = data_for :free_forex }
5
+
6
+ before { @adapter = CurrencyRate::FreeForexAdapter.instance }
7
+
8
+ describe "#normalize" do
9
+ it "brings data to canonical form" do
10
+ expect(@adapter.normalize(@data)).to eq(@normalized)
11
+ end
12
+ end
13
+ end
@@ -4,7 +4,7 @@ RSpec.describe CurrencyRate::Fetcher do
4
4
  before do
5
5
  @usd_try = BigDecimal.new("22")
6
6
  @usd_eur = BigDecimal.new("0.8457")
7
- @eur_try = @usd_eur / @usd_try
7
+ @eur_try = @usd_try / @usd_eur
8
8
  @storage_double = double("storage")
9
9
  @fetcher = CurrencyRate::Fetcher.new(storage: @storage_double)
10
10
  end
@@ -14,11 +14,16 @@ RSpec.describe CurrencyRate::Fetcher do
14
14
  expect(fetcher.storage).to be_a(CurrencyRate::FileStorage)
15
15
  end
16
16
 
17
+ it "overwrites the default list of fiat exchanges" do
18
+ fetcher = CurrencyRate::Fetcher.new(fiat_exchanges: ["CurrencyLayer", "Forge", "Fixer"])
19
+ expect(fetcher.fiat_exchanges).to eq(["CurrencyLayer", "Forge", "Fixer"])
20
+ end
21
+
17
22
  describe "#fetch_crypto" do
18
23
  before do
19
24
  @from = "BTC"
20
- @to = "TRY"
21
- @btc_try = BigDecimal.new("3832.5432")
25
+ @to = "ETH"
26
+ @btc_eth = BigDecimal.new("3832.5432")
22
27
  @exchange = "Bitstamp"
23
28
  end
24
29
 
@@ -30,63 +35,26 @@ RSpec.describe CurrencyRate::Fetcher do
30
35
  it { is_expected.to be_nil }
31
36
  end
32
37
 
33
- context "when pair supported by selected exchange" do
38
+ context "when pair is supported by selected exchange" do
34
39
  before do
35
- allow(@storage_double).to receive(:read).with(@exchange).and_return({ "BTC_TRY" => @btc_try })
40
+ allow(@storage_double).to receive(:read).with(@exchange).and_return({ "anchor" => "BTC", "ETH" => @btc_eth })
36
41
  end
37
42
 
38
- it { is_expected.to eq(@btc_try) }
43
+ it { is_expected.to eq(@btc_eth) }
39
44
 
40
45
  it { is_expected.to be_a(BigDecimal) }
41
46
  end
42
47
 
43
- context "when requested cryptocurrency not supported by selected exchange" do
48
+ context "when pair is not supported by selected exchange" do
44
49
  before do
45
- allow(@storage_double).to receive(:read).with(@exchange).and_return({ "LTC_TRY" => @btc_try })
50
+ allow(@storage_double).to receive(:read).with(@exchange).and_return({ "anchor" => "BTC", "XOS" => @btc_eth })
51
+ allow(@storage_double).to receive(:read).with("Yahoo").and_return(nil)
52
+ allow(@storage_double).to receive(:read).with("Fixer").and_return(nil)
53
+ allow(@storage_double).to receive(:read).with("Forge").and_return(nil)
46
54
  end
47
55
 
48
56
  it { is_expected.to be_nil }
49
57
  end
50
-
51
- context "when requested fiat currency not supported by selected exchange" do
52
- context "when selected exchange supports USD" do
53
- before do
54
- @btc_usd = @btc_try
55
- allow(@storage_double).to receive(:read).with(@exchange).and_return({ "BTC_USD" => @btc_usd })
56
- end
57
-
58
- context "when any of fiat exchanges supports rate from USD to requested fiat currency" do
59
- before do
60
- allow(@fetcher).to receive(:fetch_fiat).with("USD", "TRY").and_return(@usd_try)
61
- end
62
-
63
- it { is_expected.to eq(@btc_usd * @usd_try) }
64
- end
65
- end
66
-
67
- context "when when selected exchange doesn't support USD" do
68
- before do
69
- @btc_eur = @btc_try
70
- allow(@storage_double).to receive(:read).with(@exchange).and_return({ "BTC_EUR" => @btc_eur })
71
- end
72
-
73
- context "when any of fiat exchanges supports rate for one of supported by selected exchange currency" do
74
- before do
75
- allow(@fetcher).to receive(:fetch_fiat).with("EUR", "TRY").and_return(@eur_try)
76
- end
77
-
78
- it { is_expected.to eq(@btc_eur * @eur_try) }
79
- end
80
-
81
- context "when none of fiat exchanges support rate for one of supported by selected exchange currency" do
82
- before do
83
- allow(@fetcher).to receive(:fetch_fiat).with("EUR", "TRY").and_return(nil)
84
- end
85
-
86
- it { is_expected.to be_nil }
87
- end
88
- end
89
- end
90
58
  end
91
59
 
92
60
  describe "#fetch_fiat" do
@@ -116,7 +84,6 @@ RSpec.describe CurrencyRate::Fetcher do
116
84
  before do
117
85
  allow(@storage_double).to receive(:read).with(@fiat_exchanges.first).and_return({ "anchor" => "EUR", "TRY" => @eur_try })
118
86
  end
119
-
120
87
  it { is_expected.to eq(@eur_try) }
121
88
  end
122
89
 
@@ -152,5 +119,6 @@ RSpec.describe CurrencyRate::Fetcher do
152
119
  it { is_expected.to eq(@eur_try) }
153
120
  end
154
121
  end
122
+
155
123
  end
156
124
  end