cointrader.net 0.1.0 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 06faca52e66387069a411622c54514022fd22e89
4
- data.tar.gz: 2b5b820f4423cfe52de60035fd81839d46cda26c
3
+ metadata.gz: caae2774afd773a12774b71484f63b71d8aec463
4
+ data.tar.gz: 43e1db4c150b5476f6cba4a08f6dd7e3a15a2e41
5
5
  SHA512:
6
- metadata.gz: 1f522b08109561e2b554e87e8931e223505d154f063850a55f377b4fcee26deb01a7d64a48020933e3288e23a156abddff49e835c0a1fa6d240cba5bade2b359
7
- data.tar.gz: 7e07339c4890911e19d5feb9b17576d9721bf11a605c1597872ecccb202778410c67e3316b0919a8cf53d9faca1d1cb2f5969809b89fd0f7e5a46eb85b288b3e
6
+ metadata.gz: 5cedcb28673bd337f0b52b28eb3db2126d826f845f8ddfbfc8335da10f92ac337ce7b5b43e40ed7ed1d989533e73f657fd8ef18c0c3ea1c758dbfbc31f386260
7
+ data.tar.gz: 34e135ff2b92e0b0873d3eba6a0e64ddb43ac45954130a43f76663e6ee251490c337e4c2a7419291f6655ce037a2ea56a7328ee34ce9caa0bb0e0579214ec42f
data/README.md CHANGED
@@ -24,6 +24,9 @@ Or install it yourself as:
24
24
  Cointrader.configure do |c|
25
25
  c.api_key = 'API_KEY'
26
26
  c.api_secret = 'API_SECRET'
27
+
28
+ # Sandbox API
29
+ # c.api_url = 'https://private-anon-b5aa2a7bf-cointrader.apiary-mock.com/api4'
27
30
  end
28
31
 
29
32
  client = Cointrader::Client.new
@@ -11,14 +11,19 @@ module Cointrader
11
11
 
12
12
  protected
13
13
 
14
+ def join_params params, *names
15
+ names.map { |name| params[name] }.compact.join('/').downcase
16
+ end
17
+
14
18
  def request(method, path, body={})
15
19
  response = hmac_request(method, path, body)
16
20
 
17
- # The API sucks and we need to repair JSON sometimes.
21
+ # The API sucks so we need to repair JSON sometimes.
18
22
  case path
19
23
  when '/account/balance'
20
24
  response.gsub!(/\s/, '') # Remove whitespace.
21
25
  response.gsub!(/}}(?!$)/, '},') # Replace bracket with comma not at the end.
26
+ response.gsub!('},}', '}}') # Remove trailing comma.
22
27
  response.gsub!(/}}$/, '}}}') # Add a bracket at the end.
23
28
  end
24
29
 
@@ -3,5 +3,35 @@ module Cointrader
3
3
  def symbol
4
4
  request(:get, '/stats/symbol')
5
5
  end
6
+
7
+ def stats_24h params={}
8
+ params = get_defaults(params)
9
+ request(:get, "/stats/daily/#{params[:currency_pair]}")
10
+ end
11
+
12
+ def stats_7d params={}
13
+ params = get_defaults(params)
14
+ request(:get, "/stats/weekly/#{params[:currency_pair]}")
15
+ end
16
+
17
+ # Returns open orders.
18
+ # currency_pair - 6 character currency pair. Eg: BTCUSD. Defaults to USD if not provided. String, optional
19
+ # book - Filter orders. [buy|sell|all], string, optional
20
+ # limit - Limit resut count. Integer, optional
21
+ def orders params={}
22
+ params = get_defaults(params)
23
+ path = join_params(params, :currency_pair, :book, :limit)
24
+ request(:get, "/stats/orders/#{path}")
25
+ end
26
+
27
+ private
28
+
29
+ def get_defaults params
30
+ params.merge({
31
+ currency_pair: 'BTCUSD',
32
+ book: 'all',
33
+ limit: 20
34
+ })
35
+ end
6
36
  end
7
37
  end
@@ -1,3 +1,3 @@
1
1
  module Cointrader
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.2"
3
3
  end
data/spec/client_spec.rb CHANGED
@@ -12,6 +12,36 @@ describe Cointrader::Client do
12
12
  end
13
13
  end
14
14
  end
15
+
16
+ # TODO(maros): Add more detailed tests.
17
+ describe '#stats_24h' do
18
+ it 'returns 24 hour sliding statistics' do
19
+ VCR.use_cassette('stats_24h') do
20
+ response = subject.stats_24h
21
+ expect_success(response)
22
+ end
23
+ end
24
+ end
25
+
26
+ # TODO(maros): Add more detailed tests.
27
+ describe '#stats_7d' do
28
+ it 'returns 7 day sliding statistics' do
29
+ VCR.use_cassette('stats_7d') do
30
+ response = subject.stats_7d
31
+ expect_success(response)
32
+ end
33
+ end
34
+ end
35
+
36
+ # TODO(maros): Add more detailed tests.
37
+ describe '#orders' do
38
+ it 'returns open orders' do
39
+ VCR.use_cassette('orders') do
40
+ response = subject.orders
41
+ expect_success(response)
42
+ end
43
+ end
44
+ end
15
45
  end
16
46
 
17
47
  describe 'account' do
@@ -0,0 +1,106 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://private-anon-b5aa2a7bf-cointrader.apiary-mock.com/api4/stats/orders/btcusd/all/20
6
+ body:
7
+ encoding: UTF-8
8
+ string: "{}"
9
+ headers:
10
+ Accept:
11
+ - "*/*; q=0.5, application/xml"
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ Content-Type:
15
+ - application/json
16
+ Content-Length:
17
+ - '2'
18
+ User-Agent:
19
+ - Ruby
20
+ response:
21
+ status:
22
+ code: 404
23
+ message: Not Found
24
+ headers:
25
+ Server:
26
+ - Cowboy
27
+ Connection:
28
+ - keep-alive
29
+ X-Apiary-Ratelimit-Limit:
30
+ - '120'
31
+ X-Apiary-Ratelimit-Remaining:
32
+ - '119'
33
+ Content-Type:
34
+ - text/html; charset=utf-8
35
+ Content-Length:
36
+ - '2586'
37
+ Etag:
38
+ - W/"M/h32uJf7tbZczmfVofE5A=="
39
+ Date:
40
+ - Sun, 22 Feb 2015 18:42:01 GMT
41
+ Via:
42
+ - 1.1 vegur
43
+ body:
44
+ encoding: ASCII-8BIT
45
+ string: !binary |-
46
+ PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPG1ldGEgY2hhcnNl
47
+ dD0idXRmLTgiPgo8dGl0bGU+YXBpYXJ5Lmlv4oCUNDA04oCUTm8gUmVzb3Vy
48
+ Y2UgRm91bmQhPC90aXRsZT4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVm
49
+ PSJodHRwczovL2FwaWFyeS5hLnNzbC5mYXN0bHkubmV0L2Fzc2V0cy9jc3Mv
50
+ bm9ybWFsaXplLWMxYTYwMTUwNDBlZjEyMDEuY3NzIj4KPGxpbmsgcmVsPSJz
51
+ dHlsZXNoZWV0IiBocmVmPSJodHRwczovL2FwaWFyeS5hLnNzbC5mYXN0bHku
52
+ bmV0L2Fzc2V0cy9jc3MvZXJyb3ItNTEzOWJmNDAxYzk3OTJhYy5jc3MiPgo8
53
+ Ym9keT4KPGRpdiBpZD0iYmciPjwvZGl2PgogPGRpdiBpZD0ibWVzc2FnZSI+
54
+ CiAgPGgxPlRoZSByZXNvdXJjZSB5b3UncmUgbG9va2luZyBmb3IgZG9lc24n
55
+ dCBleGlzdC4gPGJyPlBsZWFzZSBjaGVjayB0aGUgPGEgaHJlZj0iaHR0cDov
56
+ L2RvY3MuY29pbnRyYWRlci5hcGlhcnkuaW8vIj5BUEkgZG9jdW1lbnRhdGlv
57
+ bjwvYT4gb3IgaGF2ZSBhIGxvb2sgb24gYXZhaWxhYmxlIHJlc291cmNlcyBi
58
+ ZWxvdy48L2gxPgogIDxwPjwvcD4KICA8b2w+CiAgICAgICAgICA8c2VjdGlv
59
+ bj48aDI+Q3VycmVuY2llczwvaDI+CiAgICAgICAgICAgICAgPC9zZWN0aW9u
60
+ PgogICAgICAgICAgPHNlY3Rpb24+PGgyPlB1YmxpYyBNZXRob2RzIC0gR0VU
61
+ PC9oMj4KICAgICAgICAgICAgICAgICAgPGxpPjxiPkdFVDwvYj4gL2FwaTQv
62
+ c3RhdHMvc3ltYm9sPC9saT4KICAgICAgICAgICAgICAgICAgPGxpPjxiPkdF
63
+ VDwvYj4gL2FwaTQvc3RhdHMvZGFpbHkve2N1cnJlbmN5X3BhaXJ9PC9saT4K
64
+ ICAgICAgICAgICAgICAgICAgPGxpPjxiPkdFVDwvYj4gL2FwaTQvc3RhdHMv
65
+ d2Vla2x5L3tjdXJyZW5jeV9wYWlyfTwvbGk+CiAgICAgICAgICAgICAgICAg
66
+ IDxsaT48Yj5HRVQ8L2I+IC9hcGk0L3N0YXRzL29yZGVycy97Y3VycmVuY3lf
67
+ cGFpcn0ve2J1eXxzZWxsfGFsbH0ve2xpbWl0fTwvbGk+CiAgICAgICAgICAg
68
+ ICAgICAgIDxsaT48Yj5HRVQ8L2I+IC9hcGk0L3N0YXRzL2hpZ2gve2N1cnJl
69
+ bmN5X3BhaXJ9PC9saT4KICAgICAgICAgICAgICAgICAgPGxpPjxiPkdFVDwv
70
+ Yj4gL2FwaTQvc3RhdHMvbG93L3tjdXJyZW5jeV9wYWlyfTwvbGk+CiAgICAg
71
+ ICAgICAgICAgICAgIDxsaT48Yj5HRVQ8L2I+IC9hcGk0L3N0YXRzL2J1eXBy
72
+ aWNlL3tjdXJyZW5jeV9wYWlyfS97YW1vdW50fTwvbGk+CiAgICAgICAgICAg
73
+ ICAgICAgIDxsaT48Yj5HRVQ8L2I+IC9hcGk0L3N0YXRzL3NlbGxwcmljZS97
74
+ Y3VycmVuY3lfcGFpcn0ve3F1YW50aXR5fTwvbGk+CiAgICAgICAgICAgICAg
75
+ ICAgIDxsaT48Yj5HRVQ8L2I+IC9hcGk0L3N0YXRzL3RyYWRlcy97Y3VycmVu
76
+ Y3lfcGFpcn0ve2xpbWl0fS97b2Zmc2V0fTwvbGk+CiAgICAgICAgICAgICAg
77
+ ICAgIDxsaT48Yj5HRVQ8L2I+IC9hcGk0L3N0YXRzL21hcmtldC97Y3VycmVu
78
+ Y3lfcGFpcn0ve2xpbWl0fS97b2Zmc2V0fTwvbGk+CiAgICAgICAgICAgICAg
79
+ PC9zZWN0aW9uPgogICAgICAgICAgPHNlY3Rpb24+PGgyPkF1dGhlbnRpY2F0
80
+ ZWQgTWV0aG9kcyAtIFBPU1Q8L2gyPgogICAgICAgICAgICAgICAgICA8bGk+
81
+ PGI+UE9TVDwvYj4gL2FwaTQvYWNjb3VudC9iYWxhbmNlPC9saT4KICAgICAg
82
+ ICAgICAgICAgICAgPGxpPjxiPlBPU1Q8L2I+IC9hcGk0L2FjY291bnQvZmVl
83
+ czwvbGk+CiAgICAgICAgICAgICAgICAgIDxsaT48Yj5QT1NUPC9iPiAvYXBp
84
+ NC9hY2NvdW50L2xpc3RiYW5rPC9saT4KICAgICAgICAgICAgICAgICAgPGxp
85
+ PjxiPlBPU1Q8L2I+IC9hcGk0L2FjY291bnQvYnRjYWRkcmVzczwvbGk+CiAg
86
+ ICAgICAgICAgICAgICAgIDxsaT48Yj5QT1NUPC9iPiAvYXBpNC9hY2NvdW50
87
+ L3dpdGhkcmF3PC9saT4KICAgICAgICAgICAgICAgICAgPGxpPjxiPlBPU1Q8
88
+ L2I+IC9hcGk0L2FjY291bnQvaGlzdG9yeTwvbGk+CiAgICAgICAgICAgICAg
89
+ ICAgIDxsaT48Yj5QT1NUPC9iPiAvYXBpNC9vcmRlci97Y3VycmVuY3lfcGFp
90
+ cn0vYnV5PC9saT4KICAgICAgICAgICAgICAgICAgPGxpPjxiPlBPU1Q8L2I+
91
+ IC9hcGk0L29yZGVyL3tjdXJyZW5jeV9wYWlyfS9zZWxsPC9saT4KICAgICAg
92
+ ICAgICAgICAgICAgPGxpPjxiPlBPU1Q8L2I+IC9hcGk0L29yZGVyL3tjdXJy
93
+ ZW5jeV9wYWlyfS9saXN0PC9saT4KICAgICAgICAgICAgICAgICAgPGxpPjxi
94
+ PlBPU1Q8L2I+IC9hcGk0L29yZGVyL3tjdXJyZW5jeV9wYWlyfS9jYW5jZWw8
95
+ L2xpPgogICAgICAgICAgICAgICAgICA8bGk+PGI+UE9TVDwvYj4gL2FwaTQv
96
+ b3JkZXIve2N1cnJlbmN5X3BhaXJ9L2NhbmNlbGFsbDwvbGk+CiAgICAgICAg
97
+ ICAgICAgICAgIDxsaT48Yj5QT1NUPC9iPiAvYXBpNC9vcmRlci97Y3VycmVu
98
+ Y3lfcGFpcn0vbWFya2V0YnV5PC9saT4KICAgICAgICAgICAgICAgICAgPGxp
99
+ PjxiPlBPU1Q8L2I+IC9hcGk0L29yZGVyL3tjdXJyZW5jeV9wYWlyfS9tYXJr
100
+ ZXRzZWxsPC9saT4KICAgICAgICAgICAgICAgICAgPGxpPjxiPlBPU1Q8L2I+
101
+ IC9hcGk0L2FjY291bnQvdHJhZGVoaXN0b3J5L3tjdXJyZW5jeV9wYWlyfTwv
102
+ bGk+CiAgICAgICAgICAgICAgPC9zZWN0aW9uPgogICAgICA8L29sPgogIDwv
103
+ ZGl2Pgo8L2JvZHk+CjwvaHRtbD4K
104
+ http_version:
105
+ recorded_at: Sun, 22 Feb 2015 18:42:52 GMT
106
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,63 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://private-anon-b5aa2a7bf-cointrader.apiary-mock.com/api4/stats/daily/BTCUSD
6
+ body:
7
+ encoding: UTF-8
8
+ string: "{}"
9
+ headers:
10
+ Accept:
11
+ - "*/*; q=0.5, application/xml"
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ Content-Type:
15
+ - application/json
16
+ Content-Length:
17
+ - '2'
18
+ User-Agent:
19
+ - Ruby
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Server:
26
+ - Cowboy
27
+ Connection:
28
+ - keep-alive
29
+ X-Apiary-Ratelimit-Limit:
30
+ - '120'
31
+ X-Apiary-Ratelimit-Remaining:
32
+ - '119'
33
+ X-Apiary-Transaction-Id:
34
+ - 54ea1e3dcdf6dc03006f6fc1
35
+ Date:
36
+ - Sun, 22 Feb 2015 18:21:49 GMT
37
+ Transfer-Encoding:
38
+ - chunked
39
+ Via:
40
+ - 1.1 vegur
41
+ body:
42
+ encoding: UTF-8
43
+ string: |-
44
+ {
45
+ "success":true,
46
+ "message":"24hr BTCUSD Stats",
47
+ "data":
48
+ {
49
+ "BTCUSD":
50
+ {
51
+ "lastTradePrice":"453.00",
52
+ "bid":"420.00",
53
+ "offer":"426.22",
54
+ "high":"453.00",
55
+ "low":"420.00",
56
+ "average":"429.88",
57
+ "volume":"38.26969417"
58
+ }
59
+ }
60
+ }
61
+ http_version:
62
+ recorded_at: Sun, 22 Feb 2015 18:22:40 GMT
63
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,63 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://private-anon-b5aa2a7bf-cointrader.apiary-mock.com/api4/stats/weekly/BTCUSD
6
+ body:
7
+ encoding: UTF-8
8
+ string: "{}"
9
+ headers:
10
+ Accept:
11
+ - "*/*; q=0.5, application/xml"
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ Content-Type:
15
+ - application/json
16
+ Content-Length:
17
+ - '2'
18
+ User-Agent:
19
+ - Ruby
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Server:
26
+ - Cowboy
27
+ Connection:
28
+ - keep-alive
29
+ X-Apiary-Ratelimit-Limit:
30
+ - '120'
31
+ X-Apiary-Ratelimit-Remaining:
32
+ - '118'
33
+ X-Apiary-Transaction-Id:
34
+ - 54ea1e3dcdf6dc03006f6fc2
35
+ Date:
36
+ - Sun, 22 Feb 2015 18:21:49 GMT
37
+ Transfer-Encoding:
38
+ - chunked
39
+ Via:
40
+ - 1.1 vegur
41
+ body:
42
+ encoding: UTF-8
43
+ string: |-
44
+ {
45
+ "success":true,
46
+ "message":"7 Day BTCUSD Stats",
47
+ "data":
48
+ {
49
+ "BTCUSD":
50
+ {
51
+ "lastTradePrice":"640.56",
52
+ "bid":"640.56",
53
+ "offer":"643.52",
54
+ "high":"690.00",
55
+ "low":"550.00",
56
+ "average":"629.55",
57
+ "volume":"616.24892785"
58
+ }
59
+ }
60
+ }
61
+ http_version:
62
+ recorded_at: Sun, 22 Feb 2015 18:22:41 GMT
63
+ recorded_with: VCR 2.9.3
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cointrader.net
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maros Hluska
@@ -87,6 +87,9 @@ files:
87
87
  - lib/cointrader.net/version.rb
88
88
  - spec/client_spec.rb
89
89
  - spec/fixtures/vcr_cassettes/balance.yml
90
+ - spec/fixtures/vcr_cassettes/orders.yml
91
+ - spec/fixtures/vcr_cassettes/stats_24h.yml
92
+ - spec/fixtures/vcr_cassettes/stats_7d.yml
90
93
  - spec/fixtures/vcr_cassettes/symbol.yml
91
94
  - spec/spec_helper.rb
92
95
  homepage: https://github.com/mhluska/cointrader.net
@@ -116,5 +119,8 @@ summary: Cointrader.net API wrapper
116
119
  test_files:
117
120
  - spec/client_spec.rb
118
121
  - spec/fixtures/vcr_cassettes/balance.yml
122
+ - spec/fixtures/vcr_cassettes/orders.yml
123
+ - spec/fixtures/vcr_cassettes/stats_24h.yml
124
+ - spec/fixtures/vcr_cassettes/stats_7d.yml
119
125
  - spec/fixtures/vcr_cassettes/symbol.yml
120
126
  - spec/spec_helper.rb