currency-rate 0.2.0 → 0.2.1
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 -1
- data/VERSION +1 -1
- data/lib/btc_adapters/btcchina_adapter.rb +2 -1
- data/lib/currency_rate.rb +6 -2
- data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/btcchina_adapter.yml +26 -55
- data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/huobi_adapter.yml +10 -10
- data/spec/lib/btc_adapters/btcchina_adapter_spec.rb +3 -3
- data/spec/lib/btc_adapters/huobi_adapter_spec.rb +4 -4
- metadata +2 -3
- data/lib/core_ext/classify.rb +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0b5e77d6b38d2c35b7571ad074be82db677be4c
|
4
|
+
data.tar.gz: 8a30a9a49e696c626435ccc290c80eca6995350a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b0fdd7232a2fbb6721adbe444a9a90beb1b197d348ee4d08e435b9f32e1984f4a6c86d46fdb2e09dbcdcc54f384c7c375c0ff98d074f4c7f8dbb6d86b6992a0e
|
7
|
+
data.tar.gz: e0fca9cf058bfc219ac771bc89759ace677e9f4da365103ec4f239ea06b5e5cffb20fa337ff1125cd9f491c6b6cdb7a7096743a9973af8ec1f59b8dbd6942fc7
|
data/README.md
CHANGED
@@ -39,7 +39,7 @@ In the second case, we are trying to get the exchange rate for USD/BTC pair, whi
|
|
39
39
|
"how much in BTC would 1 USD be?". If the source (Bitstamp, in this case) doesn't provide the
|
40
40
|
inverted rate, the Adapter inverts the rate itself using the exchange rate for BTC/USD.
|
41
41
|
|
42
|
-
You can also
|
42
|
+
You can also use `anchor_currency` argument with `#get`:
|
43
43
|
|
44
44
|
CurrencyRate.get('Bitstamp', 'USD', 'EUR', anchor_currency: 'BTC')
|
45
45
|
|
@@ -63,3 +63,15 @@ for how and when to store/fetch data, not other classes.
|
|
63
63
|
Credits
|
64
64
|
-------
|
65
65
|
This gem was extracted from [straight gem](https://github.com/MyceliumGear/straight), thanks to all the people who added various exchange rate adapters and contributed code.
|
66
|
+
|
67
|
+
TODO
|
68
|
+
----
|
69
|
+
|
70
|
+
1. Remove code duplication in Adapters, specifically for
|
71
|
+
`#rate_for`, `#invert_rate` and `#currency_pair_rate` methods.
|
72
|
+
|
73
|
+
2. Allow both lower case and upper case currency codes.
|
74
|
+
|
75
|
+
3. Clean up tests, I have a feeling there some completely useless ones.
|
76
|
+
|
77
|
+
4. Adapters should have a default "to" currency. For example, everyone knows Bitfinex trades BTC for USD mostly.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.1
|
@@ -5,7 +5,8 @@ module CurrencyRate
|
|
5
5
|
|
6
6
|
def rate_for(from,to)
|
7
7
|
super
|
8
|
-
|
8
|
+
raise raise CurrencyNotSupported unless [from,to].include?('CNY')
|
9
|
+
rate = rate_to_f(@rates['ticker'] && @rates['ticker']['last'])
|
9
10
|
invert_rate(from,to,rate)
|
10
11
|
end
|
11
12
|
|
data/lib/currency_rate.rb
CHANGED
@@ -40,11 +40,15 @@ module CurrencyRate
|
|
40
40
|
to == 'BTC' ? result : result.round(2)
|
41
41
|
end
|
42
42
|
|
43
|
-
|
43
|
+
private
|
44
44
|
|
45
45
|
def self.adapter_class(s)
|
46
46
|
return s unless s.kind_of?(String) # if we pass class, no need to convert
|
47
|
-
adapter = "#{s}_adapter"
|
47
|
+
adapter = classify_string("#{s}_adapter", CurrencyRate).instance
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.classify_string(s, prefix="")
|
51
|
+
Kernel.const_get(prefix.to_s + "::" + s.split('_').collect(&:capitalize).join)
|
48
52
|
end
|
49
53
|
|
50
54
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri:
|
5
|
+
uri: https://data.btcchina.com/data/ticker
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
@@ -18,66 +18,37 @@ http_interactions:
|
|
18
18
|
code: 200
|
19
19
|
message: OK
|
20
20
|
headers:
|
21
|
-
|
22
|
-
-
|
23
|
-
Content-Type:
|
24
|
-
- application/javascript;charset=UTF-8
|
25
|
-
Content-Length:
|
26
|
-
- '152'
|
27
|
-
Connection:
|
28
|
-
- keep-alive
|
29
|
-
Set-Cookie:
|
30
|
-
- __jsluid=4232513531b381fc752eef8d4dd55251; path=/
|
21
|
+
Access-Control-Allow-Methods:
|
22
|
+
- GET
|
31
23
|
Access-Control-Allow-Origin:
|
32
24
|
- "*"
|
33
|
-
|
34
|
-
-
|
35
|
-
X-Cache:
|
36
|
-
- bypass
|
37
|
-
body:
|
38
|
-
encoding: UTF-8
|
39
|
-
string: '{"time":"1466406799","ticker":{"open":5108.77,"vol":512967.119,"symbol":"btccny","last":5084.51,"buy":5084.51,"sell":5084.93,"high":5138,"low":5010.5}
|
40
|
-
}'
|
41
|
-
http_version:
|
42
|
-
recorded_at: Mon, 20 Jun 2016 07:13:19 GMT
|
43
|
-
- request:
|
44
|
-
method: get
|
45
|
-
uri: http://api.huobi.com/staticmarket/ticker_ltc_json.js
|
46
|
-
body:
|
47
|
-
encoding: US-ASCII
|
48
|
-
string: ''
|
49
|
-
headers:
|
50
|
-
Accept-Encoding:
|
51
|
-
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
52
|
-
Accept:
|
53
|
-
- "*/*"
|
54
|
-
User-Agent:
|
55
|
-
- Ruby
|
56
|
-
response:
|
57
|
-
status:
|
58
|
-
code: 200
|
59
|
-
message: OK
|
60
|
-
headers:
|
61
|
-
Date:
|
62
|
-
- Mon, 20 Jun 2016 07:13:20 GMT
|
25
|
+
Cache-Control:
|
26
|
+
- no-store, no-cache, must-revalidate, post-check=0, pre-check=0
|
63
27
|
Content-Type:
|
64
|
-
- application/
|
65
|
-
|
66
|
-
-
|
28
|
+
- application/json
|
29
|
+
Date:
|
30
|
+
- Tue, 21 Jun 2016 08:28:10 GMT
|
31
|
+
Expires:
|
32
|
+
- Thu, 19 Nov 1981 08:52:00 GMT
|
33
|
+
Front-End-Https:
|
34
|
+
- 'on'
|
35
|
+
Pragma:
|
36
|
+
- no-cache
|
37
|
+
Server:
|
38
|
+
- nginx/1.8.1
|
39
|
+
Set-Cookie:
|
40
|
+
- btcchina_lang=en; expires=Wed, 21-Jun-2017 08:28:10 GMT; path=/; domain=.btcc.com
|
41
|
+
X-Cache-Cfc:
|
42
|
+
- "- 1466497690.039"
|
43
|
+
X-Powered-By:
|
44
|
+
- PHP/5.4.45
|
45
|
+
Transfer-Encoding:
|
46
|
+
- chunked
|
67
47
|
Connection:
|
68
48
|
- keep-alive
|
69
|
-
Set-Cookie:
|
70
|
-
- __jsluid=7312808630c655d05ce1143b909ff703; path=/
|
71
|
-
Access-Control-Allow-Origin:
|
72
|
-
- "*"
|
73
|
-
X-Frame-Options:
|
74
|
-
- SAMEORIGIN
|
75
|
-
X-Cache:
|
76
|
-
- bypass
|
77
49
|
body:
|
78
50
|
encoding: UTF-8
|
79
|
-
string: '{"
|
80
|
-
}'
|
51
|
+
string: '{"ticker":{"high":"5090.00","low":"4615.02","buy":"4785.55","sell":"4786.12","last":"4785.55","vol":"58752.19850000","date":1466497687,"vwap":"4738.11","prev_close":"4931.64","open":"4931.65"}}'
|
81
52
|
http_version:
|
82
|
-
recorded_at:
|
53
|
+
recorded_at: Tue, 21 Jun 2016 08:28:10 GMT
|
83
54
|
recorded_with: VCR 3.0.3
|
@@ -19,15 +19,15 @@ http_interactions:
|
|
19
19
|
message: OK
|
20
20
|
headers:
|
21
21
|
Date:
|
22
|
-
-
|
22
|
+
- Tue, 21 Jun 2016 08:25:20 GMT
|
23
23
|
Content-Type:
|
24
24
|
- application/javascript;charset=UTF-8
|
25
25
|
Content-Length:
|
26
|
-
- '
|
26
|
+
- '149'
|
27
27
|
Connection:
|
28
28
|
- keep-alive
|
29
29
|
Set-Cookie:
|
30
|
-
- __jsluid=
|
30
|
+
- __jsluid=683b360451a7f7c973ef086944f6a50e; path=/
|
31
31
|
Access-Control-Allow-Origin:
|
32
32
|
- "*"
|
33
33
|
X-Frame-Options:
|
@@ -36,10 +36,10 @@ http_interactions:
|
|
36
36
|
- bypass
|
37
37
|
body:
|
38
38
|
encoding: UTF-8
|
39
|
-
string: '{"time":"
|
39
|
+
string: '{"time":"1466497520","ticker":{"open":4961.18,"vol":602328.2638,"symbol":"btccny","last":4791.5,"buy":4792.1,"sell":4792.99,"high":4993,"low":4650}
|
40
40
|
}'
|
41
41
|
http_version:
|
42
|
-
recorded_at:
|
42
|
+
recorded_at: Tue, 21 Jun 2016 08:25:20 GMT
|
43
43
|
- request:
|
44
44
|
method: get
|
45
45
|
uri: http://api.huobi.com/staticmarket/ticker_ltc_json.js
|
@@ -59,15 +59,15 @@ http_interactions:
|
|
59
59
|
message: OK
|
60
60
|
headers:
|
61
61
|
Date:
|
62
|
-
-
|
62
|
+
- Tue, 21 Jun 2016 08:25:21 GMT
|
63
63
|
Content-Type:
|
64
64
|
- application/javascript;charset=UTF-8
|
65
65
|
Content-Length:
|
66
|
-
- '
|
66
|
+
- '147'
|
67
67
|
Connection:
|
68
68
|
- keep-alive
|
69
69
|
Set-Cookie:
|
70
|
-
- __jsluid=
|
70
|
+
- __jsluid=37a542d8ce58ca1b0f4ff9619ec029c2; path=/
|
71
71
|
Access-Control-Allow-Origin:
|
72
72
|
- "*"
|
73
73
|
X-Frame-Options:
|
@@ -76,8 +76,8 @@ http_interactions:
|
|
76
76
|
- bypass
|
77
77
|
body:
|
78
78
|
encoding: UTF-8
|
79
|
-
string: '{"time":"
|
79
|
+
string: '{"time":"1466497521","ticker":{"open":36.11,"vol":65225442.1187,"symbol":"ltccny","last":34.25,"buy":34.24,"sell":34.25,"high":36.26,"low":32.53}
|
80
80
|
}'
|
81
81
|
http_version:
|
82
|
-
recorded_at:
|
82
|
+
recorded_at: Tue, 21 Jun 2016 08:25:21 GMT
|
83
83
|
recorded_with: VCR 3.0.3
|
@@ -11,12 +11,12 @@ RSpec.describe CurrencyRate::BTCChinaAdapter do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
before(:each) do
|
14
|
-
@exchange_adapter = CurrencyRate::
|
14
|
+
@exchange_adapter = CurrencyRate::BTCChinaAdapter.instance
|
15
15
|
end
|
16
16
|
|
17
17
|
it "finds the rate for currency code" do
|
18
|
-
expect(@exchange_adapter.rate_for('BTC', 'CNY')).to eq(
|
19
|
-
expect(@exchange_adapter.rate_for('CNY', 'BTC')).to eq(0.
|
18
|
+
expect(@exchange_adapter.rate_for('BTC', 'CNY')).to eq(4785.55)
|
19
|
+
expect(@exchange_adapter.rate_for('CNY', 'BTC')).to eq(0.00020896239721662085)
|
20
20
|
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
21
21
|
end
|
22
22
|
|
@@ -15,10 +15,10 @@ RSpec.describe CurrencyRate::HuobiAdapter do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
it "finds the rate for currency code" do
|
18
|
-
expect(@exchange_adapter.rate_for('BTC', 'CNY')).to eq(
|
19
|
-
expect(@exchange_adapter.rate_for('CNY', 'BTC')).to eq(0.
|
20
|
-
expect(@exchange_adapter.rate_for('LTC', 'CNY')).to eq(
|
21
|
-
expect(@exchange_adapter.rate_for('CNY', 'LTC')).to eq(0.
|
18
|
+
expect(@exchange_adapter.rate_for('BTC', 'CNY')).to eq(4791.5)
|
19
|
+
expect(@exchange_adapter.rate_for('CNY', 'BTC')).to eq(0.0002087029114056141)
|
20
|
+
expect(@exchange_adapter.rate_for('LTC', 'CNY')).to eq(34.25)
|
21
|
+
expect(@exchange_adapter.rate_for('CNY', 'LTC')).to eq(0.029197080291970802)
|
22
22
|
expect( -> { @exchange_adapter.rate_for('FEDcoin', 'USD') }).to raise_error(CurrencyRate::Adapter::CurrencyNotSupported)
|
23
23
|
end
|
24
24
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: currency-rate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roman Snitko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-06-
|
11
|
+
date: 2016-06-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: satoshi-unit
|
@@ -124,7 +124,6 @@ files:
|
|
124
124
|
- lib/btc_adapters/kraken_adapter.rb
|
125
125
|
- lib/btc_adapters/localbitcoins_adapter.rb
|
126
126
|
- lib/btc_adapters/okcoin_adapter.rb
|
127
|
-
- lib/core_ext/classify.rb
|
128
127
|
- lib/core_ext/deep_get.rb
|
129
128
|
- lib/currency_rate.rb
|
130
129
|
- lib/fiat_adapter.rb
|