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
@@ -0,0 +1,65 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
RSpec.describe CurrencyRate::Synchronizer do
|
4
|
+
before do
|
5
|
+
@storage_double = double("storage")
|
6
|
+
@synchronizer = CurrencyRate::Synchronizer.new(storage: @storage_double)
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "#sync!" do
|
10
|
+
before do
|
11
|
+
@kraken_data = normalized_data_for :kraken
|
12
|
+
@crypto_adapters = ["KrakenAdapter"]
|
13
|
+
allow(CurrencyRate::KrakenAdapter.instance).to receive(:fetch_rates).and_return(@kraken_data)
|
14
|
+
allow(CurrencyRate.configuration).to receive(:crypto_adapters).and_return(@crypto_adapters)
|
15
|
+
|
16
|
+
@yahoo_data = normalized_data_for :yahoo
|
17
|
+
@fiat_adapters = ["YahooAdapter"]
|
18
|
+
allow(CurrencyRate::YahooAdapter.instance).to receive(:fetch_rates).and_return(@yahoo_data)
|
19
|
+
allow(CurrencyRate.configuration).to receive(:fiat_adapters).and_return(@fiat_adapters)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "saves fetched rates to given storage" do
|
23
|
+
expect(@storage_double).to receive(:write).with("kraken", @kraken_data)
|
24
|
+
expect(@storage_double).to receive(:write).with("yahoo", @yahoo_data)
|
25
|
+
@synchronizer.sync!
|
26
|
+
end
|
27
|
+
|
28
|
+
context "when adapter returned nil data" do
|
29
|
+
before do
|
30
|
+
allow(CurrencyRate::KrakenAdapter.instance).to receive(:fetch_rates).and_return(nil)
|
31
|
+
allow(@storage_double).to receive(:write).with("yahoo", @yahoo_data)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "doesn't try to save nil data to the storage" do
|
35
|
+
expect(@storage_double).not_to receive(:write).with("kraken", nil)
|
36
|
+
@synchronizer.sync!
|
37
|
+
end
|
38
|
+
|
39
|
+
it "doesn't throw an exception" do
|
40
|
+
expect { @synchronizer.sync! }.not_to raise_error
|
41
|
+
end
|
42
|
+
|
43
|
+
it "saves other successfully fetched adapters data" do
|
44
|
+
expect(@storage_double).to receive(:write).with("yahoo", @yahoo_data)
|
45
|
+
@synchronizer.sync!
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context "when adapter fetching failed with and error" do
|
50
|
+
before do
|
51
|
+
allow(CurrencyRate::KrakenAdapter.instance).to receive(:fetch_rates).and_raise("Error!")
|
52
|
+
allow(@storage_double).to receive(:write).with("yahoo", @yahoo_data)
|
53
|
+
end
|
54
|
+
|
55
|
+
it "catches the exception" do
|
56
|
+
expect { @synchronizer.sync! }.not_to raise_error
|
57
|
+
end
|
58
|
+
|
59
|
+
it "continues fetching other adapters" do
|
60
|
+
expect(@storage_double).to receive(:write).with("yahoo", @yahoo_data)
|
61
|
+
@synchronizer.sync!
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,13 +1,28 @@
|
|
1
|
+
require "yaml"
|
2
|
+
require "byebug"
|
3
|
+
require "webmock/rspec"
|
4
|
+
|
1
5
|
require_relative "../lib/currency_rate"
|
2
|
-
require 'webmock/rspec'
|
3
|
-
require 'vcr'
|
4
6
|
|
5
|
-
|
6
|
-
|
7
|
-
|
7
|
+
Dir[File.join CurrencyRate.root, "spec/support/**/*.rb"].each { |f| require f }
|
8
|
+
|
9
|
+
def exchange_data_for(name)
|
10
|
+
YAML.load_file File.join(CurrencyRate.root, "spec/fixtures/adapters/#{name}_adapter.yml")
|
11
|
+
end
|
12
|
+
|
13
|
+
def normalized_data_for(name)
|
14
|
+
floating = YAML.load_file File.join(CurrencyRate.root, "spec/fixtures/adapters/normalized/#{name}_adapter.yml")
|
15
|
+
floating.each { |k, v| floating[k] = BigDecimal.new(v.to_s) if k != "anchor" }
|
16
|
+
end
|
17
|
+
|
18
|
+
def data_for(name)
|
19
|
+
[exchange_data_for(name), normalized_data_for(name)]
|
20
|
+
end
|
21
|
+
|
22
|
+
RSpec.configure do |config|
|
23
|
+
config.default_formatter = "doc"
|
8
24
|
end
|
9
25
|
|
10
|
-
|
11
|
-
|
12
|
-
VCR.turn_off! ignore_cassettes: true
|
26
|
+
CurrencyRate.configure do |config|
|
27
|
+
config.logger[:level] = :fatal
|
13
28
|
end
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: currency-rate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roman Snitko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-10-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: http
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
@@ -24,20 +24,6 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: bundler
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '1.0'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '1.0'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: jeweler
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,7 +67,7 @@ dependencies:
|
|
81
67
|
- !ruby/object:Gem::Version
|
82
68
|
version: '0'
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
70
|
+
name: byebug
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
86
72
|
requirements:
|
87
73
|
- - ">="
|
@@ -105,60 +91,77 @@ files:
|
|
105
91
|
- ".document"
|
106
92
|
- ".rspec"
|
107
93
|
- Gemfile
|
108
|
-
- Gemfile.lock
|
109
94
|
- LICENSE.txt
|
110
95
|
- README.md
|
111
96
|
- Rakefile
|
112
97
|
- VERSION
|
113
98
|
- currency-rate.gemspec
|
114
99
|
- lib/adapter.rb
|
115
|
-
- lib/
|
116
|
-
- lib/
|
117
|
-
- lib/
|
118
|
-
- lib/
|
119
|
-
- lib/
|
120
|
-
- lib/
|
121
|
-
- lib/
|
122
|
-
- lib/
|
123
|
-
- lib/
|
124
|
-
- lib/
|
125
|
-
- lib/
|
126
|
-
- lib/
|
127
|
-
- lib/
|
100
|
+
- lib/adapters/crypto/bitfinex_adapter.rb
|
101
|
+
- lib/adapters/crypto/bitpay_adapter.rb
|
102
|
+
- lib/adapters/crypto/bitstamp_adapter.rb
|
103
|
+
- lib/adapters/crypto/btc_china_adapter.rb
|
104
|
+
- lib/adapters/crypto/btc_e_adapter.rb
|
105
|
+
- lib/adapters/crypto/coinbase_adapter.rb
|
106
|
+
- lib/adapters/crypto/huobi_adapter.rb
|
107
|
+
- lib/adapters/crypto/kraken_adapter.rb
|
108
|
+
- lib/adapters/crypto/localbitcoins_adapter.rb
|
109
|
+
- lib/adapters/crypto/okcoin_adapter.rb
|
110
|
+
- lib/adapters/fiat/fixer_adapter.rb
|
111
|
+
- lib/adapters/fiat/forge_adapter.rb
|
112
|
+
- lib/adapters/fiat/yahoo_adapter.rb
|
113
|
+
- lib/configuration.rb
|
128
114
|
- lib/currency_rate.rb
|
129
|
-
- lib/
|
130
|
-
- lib/
|
131
|
-
- lib/
|
132
|
-
- lib/
|
133
|
-
- spec/
|
134
|
-
- spec/fixtures/
|
135
|
-
- spec/fixtures/
|
136
|
-
- spec/fixtures/
|
137
|
-
- spec/fixtures/
|
138
|
-
- spec/fixtures/
|
139
|
-
- spec/fixtures/
|
140
|
-
- spec/fixtures/
|
141
|
-
- spec/fixtures/
|
142
|
-
- spec/fixtures/
|
143
|
-
- spec/fixtures/
|
144
|
-
- spec/fixtures/
|
145
|
-
- spec/fixtures/
|
146
|
-
- spec/
|
147
|
-
- spec/
|
148
|
-
- spec/
|
149
|
-
- spec/
|
150
|
-
- spec/
|
151
|
-
- spec/
|
152
|
-
- spec/
|
153
|
-
- spec/
|
154
|
-
- spec/
|
155
|
-
- spec/
|
156
|
-
- spec/
|
157
|
-
- spec/
|
158
|
-
- spec/
|
159
|
-
- spec/lib/
|
160
|
-
- spec/lib/
|
115
|
+
- lib/fetcher.rb
|
116
|
+
- lib/storage/file_storage.rb
|
117
|
+
- lib/storage/serializers/yaml_serializer.rb
|
118
|
+
- lib/synchronizer.rb
|
119
|
+
- spec/fixtures/adapters/bitfinex_adapter.yml
|
120
|
+
- spec/fixtures/adapters/bitpay_adapter.yml
|
121
|
+
- spec/fixtures/adapters/bitstamp_adapter.yml
|
122
|
+
- spec/fixtures/adapters/btc_china_adapter.yml
|
123
|
+
- spec/fixtures/adapters/btce_adapter.yml
|
124
|
+
- spec/fixtures/adapters/coinbase_adapter.yml
|
125
|
+
- spec/fixtures/adapters/fixer_adapter.yml
|
126
|
+
- spec/fixtures/adapters/forge_adapter.yml
|
127
|
+
- spec/fixtures/adapters/huobi_adapter.yml
|
128
|
+
- spec/fixtures/adapters/kraken_adapter.yml
|
129
|
+
- spec/fixtures/adapters/localbitcoins_adapter.yml
|
130
|
+
- spec/fixtures/adapters/normalized/bitfinex_adapter.yml
|
131
|
+
- spec/fixtures/adapters/normalized/bitpay_adapter.yml
|
132
|
+
- spec/fixtures/adapters/normalized/bitstamp_adapter.yml
|
133
|
+
- spec/fixtures/adapters/normalized/btc_china_adapter.yml
|
134
|
+
- spec/fixtures/adapters/normalized/btce_adapter.yml
|
135
|
+
- spec/fixtures/adapters/normalized/coinbase_adapter.yml
|
136
|
+
- spec/fixtures/adapters/normalized/fixer_adapter.yml
|
137
|
+
- spec/fixtures/adapters/normalized/forge_adapter.yml
|
138
|
+
- spec/fixtures/adapters/normalized/huobi_adapter.yml
|
139
|
+
- spec/fixtures/adapters/normalized/kraken_adapter.yml
|
140
|
+
- spec/fixtures/adapters/normalized/localbitcoins_adapter.yml
|
141
|
+
- spec/fixtures/adapters/normalized/okcoin_adapter.yml
|
142
|
+
- spec/fixtures/adapters/normalized/yahoo_adapter.yml
|
143
|
+
- spec/fixtures/adapters/okcoin_adapter.yml
|
144
|
+
- spec/fixtures/adapters/yahoo_adapter.yml
|
145
|
+
- spec/lib/adapter_spec.rb
|
146
|
+
- spec/lib/adapters/crypto/bitfinex_adapter_spec.rb
|
147
|
+
- spec/lib/adapters/crypto/bitpay_adapter_spec.rb
|
148
|
+
- spec/lib/adapters/crypto/bitstamp_adapter_spec.rb
|
149
|
+
- spec/lib/adapters/crypto/btc_china_adapter_spec.rb
|
150
|
+
- spec/lib/adapters/crypto/btc_e_adapter_spec.rb
|
151
|
+
- spec/lib/adapters/crypto/coinbase_adapter_spec.rb
|
152
|
+
- spec/lib/adapters/crypto/huobi_adapter_spec.rb
|
153
|
+
- spec/lib/adapters/crypto/kraken_adapter_spec.rb
|
154
|
+
- spec/lib/adapters/crypto/localbitcoins_adapter_spec.rb
|
155
|
+
- spec/lib/adapters/crypto/okcoin_adapter_spec.rb
|
156
|
+
- spec/lib/adapters/fiat/fixer_adapter_spec.rb
|
157
|
+
- spec/lib/adapters/fiat/forge_adapter_spec.rb
|
158
|
+
- spec/lib/adapters/fiat/yahoo_adapter_spec.rb
|
159
|
+
- spec/lib/currency_rate_spec.rb
|
160
|
+
- spec/lib/fetcher_spec.rb
|
161
|
+
- spec/lib/storage/file_storage_spec.rb
|
162
|
+
- spec/lib/synchronizer_spec.rb
|
161
163
|
- spec/spec_helper.rb
|
164
|
+
- spec/support/matchers/eq_any_of.rb
|
162
165
|
homepage: http://github.com/snitko/currency-rate
|
163
166
|
licenses:
|
164
167
|
- MIT
|
data/Gemfile.lock
DELETED
@@ -1,93 +0,0 @@
|
|
1
|
-
GIT
|
2
|
-
remote: git@github.com:technicalpickles/jeweler.git
|
3
|
-
revision: afab16b95fbac811f3ab233e058d39eb4e300284
|
4
|
-
specs:
|
5
|
-
jeweler (2.3.7)
|
6
|
-
builder
|
7
|
-
bundler (>= 1)
|
8
|
-
git (>= 1.2.5)
|
9
|
-
github_api (~> 0.16.0)
|
10
|
-
highline (>= 1.6.15)
|
11
|
-
nokogiri (>= 1.5.10)
|
12
|
-
psych (~> 2.2)
|
13
|
-
rake
|
14
|
-
rdoc
|
15
|
-
semver2
|
16
|
-
|
17
|
-
GEM
|
18
|
-
remote: https://rubygems.org/
|
19
|
-
specs:
|
20
|
-
addressable (2.4.0)
|
21
|
-
builder (3.2.3)
|
22
|
-
crack (0.4.3)
|
23
|
-
safe_yaml (~> 1.0.0)
|
24
|
-
descendants_tracker (0.0.4)
|
25
|
-
thread_safe (~> 0.3, >= 0.3.1)
|
26
|
-
diff-lcs (1.2.5)
|
27
|
-
faraday (0.9.2)
|
28
|
-
multipart-post (>= 1.2, < 3)
|
29
|
-
git (1.3.0)
|
30
|
-
github_api (0.16.0)
|
31
|
-
addressable (~> 2.4.0)
|
32
|
-
descendants_tracker (~> 0.0.4)
|
33
|
-
faraday (~> 0.8, < 0.10)
|
34
|
-
hashie (>= 3.4)
|
35
|
-
mime-types (>= 1.16, < 3.0)
|
36
|
-
oauth2 (~> 1.0)
|
37
|
-
hashdiff (0.3.0)
|
38
|
-
hashie (3.5.5)
|
39
|
-
highline (1.7.8)
|
40
|
-
jwt (1.5.6)
|
41
|
-
mime-types (2.99.3)
|
42
|
-
mini_portile2 (2.2.0)
|
43
|
-
multi_json (1.12.1)
|
44
|
-
multi_xml (0.6.0)
|
45
|
-
multipart-post (2.0.0)
|
46
|
-
nokogiri (1.8.0)
|
47
|
-
mini_portile2 (~> 2.2.0)
|
48
|
-
oauth2 (1.4.0)
|
49
|
-
faraday (>= 0.8, < 0.13)
|
50
|
-
jwt (~> 1.0)
|
51
|
-
multi_json (~> 1.3)
|
52
|
-
multi_xml (~> 0.5)
|
53
|
-
rack (>= 1.2, < 3)
|
54
|
-
psych (2.2.4)
|
55
|
-
rack (2.0.3)
|
56
|
-
rake (12.0.0)
|
57
|
-
rdoc (5.1.0)
|
58
|
-
rspec (3.4.0)
|
59
|
-
rspec-core (~> 3.4.0)
|
60
|
-
rspec-expectations (~> 3.4.0)
|
61
|
-
rspec-mocks (~> 3.4.0)
|
62
|
-
rspec-core (3.4.4)
|
63
|
-
rspec-support (~> 3.4.0)
|
64
|
-
rspec-expectations (3.4.0)
|
65
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
66
|
-
rspec-support (~> 3.4.0)
|
67
|
-
rspec-mocks (3.4.1)
|
68
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
69
|
-
rspec-support (~> 3.4.0)
|
70
|
-
rspec-support (3.4.1)
|
71
|
-
safe_yaml (1.0.4)
|
72
|
-
satoshi-unit (0.1.8)
|
73
|
-
semver2 (3.4.2)
|
74
|
-
thread_safe (0.3.6)
|
75
|
-
vcr (3.0.3)
|
76
|
-
webmock (2.0.3)
|
77
|
-
addressable (>= 2.3.6)
|
78
|
-
crack (>= 0.3.2)
|
79
|
-
hashdiff
|
80
|
-
|
81
|
-
PLATFORMS
|
82
|
-
ruby
|
83
|
-
|
84
|
-
DEPENDENCIES
|
85
|
-
bundler (~> 1.0)
|
86
|
-
jeweler (~> 2.3.7)!
|
87
|
-
rspec
|
88
|
-
satoshi-unit
|
89
|
-
vcr
|
90
|
-
webmock
|
91
|
-
|
92
|
-
BUNDLED WITH
|
93
|
-
1.15.1
|
data/lib/core_ext/deep_get.rb
DELETED
data/lib/crypto_adapter.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
module CurrencyRate
|
2
|
-
|
3
|
-
class CryptoAdapter < Adapter
|
4
|
-
|
5
|
-
SUPPORTED_CRYPTO_CURRENCIES = []
|
6
|
-
|
7
|
-
DECIMAL_PRECISION = 9
|
8
|
-
|
9
|
-
def rate_for(from,to)
|
10
|
-
super
|
11
|
-
end
|
12
|
-
|
13
|
-
def invert_rate(from,to,rate)
|
14
|
-
self.class::SUPPORTED_CRYPTO_CURRENCIES.include?(to) ? _invert_rate(rate) : rate
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|
@@ -1,54 +0,0 @@
|
|
1
|
-
module CurrencyRate
|
2
|
-
class AverageRateAdapter < CryptoAdapter
|
3
|
-
|
4
|
-
DEFAULT_CURRENCIES = ["USD", "BTC"]
|
5
|
-
SUPPORTED_CRYPTO_CURRENCIES = ["BTC"]
|
6
|
-
|
7
|
-
# Takes exchange rate adapters instances or classes as arguments
|
8
|
-
def self.instance(*adapters)
|
9
|
-
instance = super()
|
10
|
-
instance.instance_variable_set(:@adapters, adapters.map { |adapter| adapter.respond_to?(:instance) ? adapter.instance : adapter })
|
11
|
-
instance
|
12
|
-
end
|
13
|
-
|
14
|
-
def fetch_rates!
|
15
|
-
failed_fetches = 0
|
16
|
-
@adapters.each do |adapter|
|
17
|
-
begin
|
18
|
-
adapter.fetch_rates!
|
19
|
-
rescue FetchingFailed => e
|
20
|
-
failed_fetches += 1
|
21
|
-
raise e if failed_fetches == @adapters.size
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def rate_for(from, to)
|
27
|
-
rates = []
|
28
|
-
@adapters.each do |adapter|
|
29
|
-
begin
|
30
|
-
rates << adapter.rate_for(from,to)
|
31
|
-
rescue CurrencyNotSupported
|
32
|
-
rates << nil
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
unless rates.select(&:nil?).size == @adapters.size
|
37
|
-
rates.compact!
|
38
|
-
rate = rates.inject {|sum, rate| sum + rate} / rates.size
|
39
|
-
invert_rate(from,to, rate)
|
40
|
-
else
|
41
|
-
raise CurrencyNotSupported
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def get_rate_value_from_hash(rates_hash, *keys)
|
46
|
-
raise "This method is not supposed to be used in #{self.class}."
|
47
|
-
end
|
48
|
-
|
49
|
-
def rate_to_f(rate)
|
50
|
-
raise "This method is not supposed to be used in #{self.class}."
|
51
|
-
end
|
52
|
-
|
53
|
-
end
|
54
|
-
end
|