cointrader.net 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b4be1caf9abcc585a8e78bd1040188ec6a812844
4
- data.tar.gz: 9154e351394208d06b8163609084c9fef8bd3bb5
3
+ metadata.gz: c04efa6cfe08064cb0a38a0a0833cd0c381e7c1f
4
+ data.tar.gz: 3ff238c3c11eddece8093c43a0dd36c94f2135d9
5
5
  SHA512:
6
- metadata.gz: a4541aeb1921d6f8e64c45c26c587ca38a51d9479708814edd220c00b46edd8151471f3edffdd4a0db7460438c55cd98a15fa9ff5874ce4853092d3ec3b3fa3c
7
- data.tar.gz: 2f835f35d16a212c35503835ccb38d8f13d6d3723486de49947d57d1fba50eefb550532aef5b6b35812e5cd9ed58d45877c1aeb44dde6843933a9a3eb616a9ed
6
+ metadata.gz: 174fa7f56e4f7c47e43a560eec5bca74b7f39646151b1e5c49025155e753bc17f52356019052a4cd61883ebc0e67ed9072c749fd401335509dc949c3aa458c8a
7
+ data.tar.gz: 8c8f63407026fdf073e2daf634fdaa68b2286148e2cabc6583f825990c5736303153897aef0a5fdd6cb08df90e5bd59160fd28f4ec9da027e0392c867ab6cd47
@@ -12,12 +12,22 @@ module Cointrader
12
12
 
13
13
  def cancel params={}
14
14
  params = get_defaults(params)
15
- request(:post, "/order/#{params[:currency_pair]}/cancel")
15
+ request(:post, "/order/#{params[:currency_pair]}/cancel", order_id: params[:order_id])
16
16
  end
17
17
 
18
18
  def list params={}
19
19
  params = get_defaults(params)
20
20
  request(:post, "/order/#{params[:currency_pair]}/list")
21
21
  end
22
+
23
+ def market_buy params={}
24
+ params = get_defaults(params)
25
+ request(:post, "/order/#{params[:currency_pair]}/marketbuy", total_amount: params[:total_amount])
26
+ end
27
+
28
+ def market_sell params={}
29
+ params = get_defaults(params)
30
+ request(:post, "/order/#{params[:currency_pair]}/marketsell", total_amount: params[:total_amount])
31
+ end
22
32
  end
23
33
  end
@@ -14,11 +14,28 @@ module Cointrader
14
14
  names.map { |name| params[name] }.compact.join('/')
15
15
  end
16
16
 
17
+ def convert_values params
18
+ pairs = params.map do |k, v|
19
+ new_value =
20
+ if k.match(/price|total_amount/)
21
+ "%04.2f" % v
22
+ elsif k.match(/amount|quantity/)
23
+ "%04.8f" % v
24
+ else
25
+ v
26
+ end
27
+
28
+ [k, new_value]
29
+ end
30
+
31
+ Hash[pairs]
32
+ end
33
+
17
34
  def get_defaults params
18
35
  defaults = {
19
36
  currency_pair: Client::DEFAULT_CURRENCY_PAIR
20
37
  }
21
- defaults.merge(params)
38
+ defaults.merge(convert_values(params))
22
39
  end
23
40
 
24
41
  def request(method, path, body={})
@@ -39,10 +56,9 @@ module Cointrader
39
56
 
40
57
  raise 'API key and API secret are required!' unless api_key && api_secret
41
58
 
42
- nonce = DateTime.now.strftime('%Q')
43
59
  payload = body.merge({
44
60
  secret: api_secret,
45
- t: nonce,
61
+ t: Time.now.utc.to_s
46
62
  })
47
63
 
48
64
  digest = OpenSSL::Digest.new('sha256')
@@ -1,3 +1,3 @@
1
1
  module Cointrader
2
- VERSION = "0.7.0"
2
+ VERSION = "0.8.0"
3
3
  end
@@ -9,6 +9,14 @@ describe Cointrader::Client do
9
9
  subject.limit_sell(total_quantity: 1, price: 10)
10
10
  end
11
11
 
12
+ def market_buy
13
+ subject.market_buy(total_amount: 1)
14
+ end
15
+
16
+ def market_sell
17
+ subject.market_sell(total_amount: 1)
18
+ end
19
+
12
20
  def safe_limit_buy
13
21
  VCR.use_cassette('limit_buy', &method(:limit_buy))
14
22
  end
@@ -17,44 +25,48 @@ describe Cointrader::Client do
17
25
  VCR.use_cassette('limit_sell', &method(:limit_sell))
18
26
  end
19
27
 
28
+ def safe_market_buy
29
+ VCR.use_cassette('market_buy', &method(:market_buy))
30
+ end
31
+
32
+ def safe_market_sell
33
+ VCR.use_cassette('market_sell', &method(:market_sell))
34
+ end
35
+
20
36
  describe 'stats' do
21
37
  describe '#symbol' do
22
38
  it 'returns supported currencies' do
23
39
  VCR.use_cassette('symbol') do
24
40
  response = subject.symbol
25
-
26
- expect(response).not_to be_nil
41
+ expect_success(response)
27
42
  expect(response['data'][0]['name']).to eq 'Bitcoin (BTC)'
28
43
  end
29
44
  end
30
45
  end
31
46
 
32
- # TODO(maros): Add more detailed tests.
33
47
  describe '#stats_24h' do
34
48
  it 'returns 24 hour sliding statistics' do
35
49
  VCR.use_cassette('stats_24h') do
36
50
  response = subject.stats_24h
37
- expect(response).not_to be_nil
51
+ expect_success(response)
38
52
  end
39
53
  end
40
54
  end
41
55
 
42
- # TODO(maros): Add more detailed tests.
43
56
  describe '#stats_7d' do
44
57
  it 'returns 7 day sliding statistics' do
45
58
  VCR.use_cassette('stats_7d') do
46
59
  response = subject.stats_7d
47
- expect(response).not_to be_nil
60
+ expect_success(response)
48
61
  end
49
62
  end
50
63
  end
51
64
 
52
- # TODO(maros): Add more detailed tests.
53
65
  describe '#orders' do
54
66
  it 'returns open orders' do
55
67
  VCR.use_cassette('orders') do
56
68
  response = subject.orders
57
- expect(response).not_to be_nil
69
+ expect_success(response)
58
70
  end
59
71
  end
60
72
  end
@@ -66,7 +78,7 @@ describe Cointrader::Client do
66
78
  VCR.use_cassette('balance') do
67
79
  response = subject.balance
68
80
 
69
- expect(response).not_to be_nil
81
+ expect_success(response)
70
82
  expect(response['data']['BTC']['available']).not_to be_nil
71
83
  end
72
84
  end
@@ -76,9 +88,7 @@ describe Cointrader::Client do
76
88
  it 'returns trade history' do
77
89
  VCR.use_cassette('tradehistory') do
78
90
  response = subject.tradehistory
79
-
80
- expect(response).not_to be_nil
81
- expect(response['data'][0]['fee']).not_to be_nil
91
+ expect_success(response)
82
92
  end
83
93
  end
84
94
  end
@@ -89,8 +99,7 @@ describe Cointrader::Client do
89
99
  it 'returns an order' do
90
100
  VCR.use_cassette('limit_buy') do
91
101
  response = limit_buy
92
-
93
- expect(response).not_to be_nil
102
+ expect_success(response)
94
103
  expect(response['data']['id']).not_to be_nil
95
104
  end
96
105
  end
@@ -100,8 +109,7 @@ describe Cointrader::Client do
100
109
  it 'returns an order' do
101
110
  VCR.use_cassette('limit_sell') do
102
111
  response = limit_sell
103
-
104
- expect(response).not_to be_nil
112
+ expect_success(response)
105
113
  expect(response['data']['id']).not_to be_nil
106
114
  end
107
115
  end
@@ -112,11 +120,10 @@ describe Cointrader::Client do
112
120
 
113
121
  it 'cancels and order' do
114
122
  VCR.use_cassette('cancel') do
115
- response = subject.cancel(id: order['data']['id'])
116
-
117
- expect(response).not_to be_nil
118
- expect(response['data']['id']).not_to be_nil
119
- expect(response['data']['currency_pair']).not_to be_nil
123
+ response = subject.cancel(order_id: order['data']['id'])
124
+ expect_success(response)
125
+ # expect(response['data']['id']).not_to be_nil
126
+ # expect(response['data']['currency_pair']).not_to be_nil
120
127
  end
121
128
  end
122
129
  end
@@ -125,9 +132,28 @@ describe Cointrader::Client do
125
132
  it 'lists open limit orders' do
126
133
  VCR.use_cassette('list') do
127
134
  response = subject.list
135
+ expect_success(response)
136
+ # expect(response['data'][0]['type'])
137
+ end
138
+ end
139
+ end
140
+
141
+ describe '#market_buy' do
142
+ it 'returns an order' do
143
+ VCR.use_cassette('market_buy') do
144
+ response = market_buy
145
+ expect_success(response)
146
+ expect(response['message']).not_to eq('Unauthorized')
147
+ end
148
+ end
149
+ end
128
150
 
129
- expect(response).not_to be_nil
130
- expect(response['data'][0]['type'])
151
+ describe '#market_sell' do
152
+ it 'returns an order' do
153
+ VCR.use_cassette('market_sell') do
154
+ response = market_sell
155
+ expect_success(response)
156
+ expect(response['message']).not_to eq('Unauthorized')
131
157
  end
132
158
  end
133
159
  end
@@ -136,9 +162,8 @@ describe Cointrader::Client do
136
162
  it 'lists recent trades executed' do
137
163
  VCR.use_cassette('trades') do
138
164
  response = subject.trades
139
-
140
- expect(response).not_to be_nil
141
- expect(response['data'][0]['price'])
165
+ expect_success(response)
166
+ # expect(response['data'][0]['price'])
142
167
  end
143
168
  end
144
169
  end
@@ -2,10 +2,11 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: post
5
- uri: https://private-anon-e01e290b7-cointrader.apiary-mock.com/api4/account/balance
5
+ uri: https://sandbox.cointrader.net/api4/account/balance
6
6
  body:
7
7
  encoding: UTF-8
8
- string: '{"secret":"5zyeBRp8XnXzPEeMkPZJ4tm4Pjqejw6ovnRuazBit1Eo","t":"1433057422031"}'
8
+ string: '{"secret":"2MlxW8mUU9MG4bvq7C6M4PSd5J8SaauW4H2dXnyJyAcN","t":"2015-06-13
9
+ 23:00:21 UTC"}'
9
10
  headers:
10
11
  Accept:
11
12
  - "*/*; q=0.5, application/xml"
@@ -14,11 +15,11 @@ http_interactions:
14
15
  Content-Type:
15
16
  - application/json
16
17
  X-Auth:
17
- - oo2GEmR7GX7gw3weoz57kKsR21k8VgJFEfEaoUYOCIRf
18
+ - nCsNvmrxTpYFnJQyU16gq6R9ncOUA6UhF4wZnuf7IqkL
18
19
  X-Auth-Hash:
19
- - 26adeee0c16462e30cfcdba245ab5927ae4d5d167b971773e22bb644e2fa720f
20
+ - 149ab2f07d5f872b8244e00a63e7978aa961760215f523c46869aba6c69b41a9
20
21
  Content-Length:
21
- - '77'
22
+ - '87'
22
23
  User-Agent:
23
24
  - Ruby
24
25
  response:
@@ -26,56 +27,40 @@ http_interactions:
26
27
  code: 200
27
28
  message: OK
28
29
  headers:
29
- Server:
30
- - Cowboy
31
- Connection:
32
- - keep-alive
33
- X-Apiary-Ratelimit-Limit:
34
- - '120'
35
- X-Apiary-Ratelimit-Remaining:
36
- - '115'
37
- Access-Control-Allow-Origin:
38
- - "*"
39
- Access-Control-Allow-Methods:
40
- - OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT
41
- Access-Control-Max-Age:
42
- - '10'
43
- X-Apiary-Transaction-Id:
44
- - 556ab7d01197a90300fefd03
45
30
  Date:
46
- - Sun, 31 May 2015 07:27:12 GMT
47
- Transfer-Encoding:
48
- - chunked
49
- Via:
50
- - 1.1 vegur
31
+ - Sat, 13 Jun 2015 23:00:26 GMT
32
+ Server:
33
+ - Apache
34
+ X-Frame-Options:
35
+ - SAMEORIGIN
36
+ X-Xss-Protection:
37
+ - 1; mode=block
38
+ X-Content-Type-Options:
39
+ - nosniff
40
+ X-Powered-By:
41
+ - ''
42
+ Set-Cookie:
43
+ - CTXIDSCK=rumaii5548fj7n7g95sjggu251; path=/; HttpOnly
44
+ Expires:
45
+ - Thu, 19 Nov 1981 08:52:00 GMT
46
+ Cache-Control:
47
+ - no-store, no-cache, must-revalidate, post-check=0, pre-check=0
48
+ Pragma:
49
+ - no-cache
50
+ Vary:
51
+ - Accept-Encoding
52
+ Content-Encoding:
53
+ - gzip
54
+ Content-Length:
55
+ - '131'
56
+ Content-Type:
57
+ - application/json
51
58
  body:
52
- encoding: UTF-8
53
- string: |2-
54
- {
55
- "success":true,
56
- "message":"Account Balances",
57
- "data":
58
- {
59
- "BTC":
60
- {
61
- "available":"5.26240216",
62
- "on_hold":"0.00000000",
63
- "total":"5.26240216"
64
- },
65
- "USD":
66
- {
67
- "available":"0.35",
68
- "on_hold":"0.00",
69
- "total":"0.35"
70
- },
71
- "CAD":
72
- {
73
- "available":"1.41",
74
- "on_hold":"0.00",
75
- "total":"1.41"
76
- }
77
- }
78
- }
59
+ encoding: ASCII-8BIT
60
+ string: !binary |-
61
+ H4sIAAAAAAAAA6tWKi5NTk4tLlayKikqTdVRygWyE9NTlayUHJOT80vzShSc
62
+ EnMS84BKlHSUUhJLEpWsqpWcQpxBVGJZYmZOYlIOSLWBngEUANXl58Vn5Oek
63
+ oAuX5Jck5qAK1uoohQa7YDMMwxg0A0BanR3J1FpbywUAkRGfN/oAAAA=
79
64
  http_version:
80
- recorded_at: Sun, 31 May 2015 07:30:22 GMT
65
+ recorded_at: Sat, 13 Jun 2015 23:00:26 GMT
81
66
  recorded_with: VCR 2.9.3
@@ -2,10 +2,11 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: post
5
- uri: https://private-anon-e01e290b7-cointrader.apiary-mock.com/api4/order/BTCUSD/cancel
5
+ uri: https://sandbox.cointrader.net/api4/order/BTCUSD/cancel
6
6
  body:
7
7
  encoding: UTF-8
8
- string: '{"secret":"5zyeBRp8XnXzPEeMkPZJ4tm4Pjqejw6ovnRuazBit1Eo","t":"1433057425310"}'
8
+ string: '{"order_id":"2222321","secret":"2MlxW8mUU9MG4bvq7C6M4PSd5J8SaauW4H2dXnyJyAcN","t":"2015-06-13
9
+ 23:01:51 UTC"}'
9
10
  headers:
10
11
  Accept:
11
12
  - "*/*; q=0.5, application/xml"
@@ -14,11 +15,11 @@ http_interactions:
14
15
  Content-Type:
15
16
  - application/json
16
17
  X-Auth:
17
- - oo2GEmR7GX7gw3weoz57kKsR21k8VgJFEfEaoUYOCIRf
18
+ - nCsNvmrxTpYFnJQyU16gq6R9ncOUA6UhF4wZnuf7IqkL
18
19
  X-Auth-Hash:
19
- - 8e749f76f59ae36b3ad63c488f0f4e7c09a37aacef445bc38cc9f49049e80a84
20
+ - f6f960802d0ec32112a9b5c659ceac1a46cbe62ad22bdc38070451fa0c09ae50
20
21
  Content-Length:
21
- - '77'
22
+ - '108'
22
23
  User-Agent:
23
24
  - Ruby
24
25
  response:
@@ -26,40 +27,40 @@ http_interactions:
26
27
  code: 200
27
28
  message: OK
28
29
  headers:
29
- Server:
30
- - Cowboy
31
- Connection:
32
- - keep-alive
33
- X-Apiary-Ratelimit-Limit:
34
- - '120'
35
- X-Apiary-Ratelimit-Remaining:
36
- - '111'
37
- Access-Control-Allow-Origin:
38
- - "*"
39
- Access-Control-Allow-Methods:
40
- - OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT
41
- Access-Control-Max-Age:
42
- - '10'
43
- X-Apiary-Transaction-Id:
44
- - 556ab7d42e7cbc030044b280
45
30
  Date:
46
- - Sun, 31 May 2015 07:27:16 GMT
47
- Transfer-Encoding:
48
- - chunked
49
- Via:
50
- - 1.1 vegur
31
+ - Sat, 13 Jun 2015 23:01:53 GMT
32
+ Server:
33
+ - Apache
34
+ X-Frame-Options:
35
+ - SAMEORIGIN
36
+ X-Xss-Protection:
37
+ - 1; mode=block
38
+ X-Content-Type-Options:
39
+ - nosniff
40
+ X-Powered-By:
41
+ - ''
42
+ Set-Cookie:
43
+ - CTXIDSCK=pmv8crr36dojr43dlq3784r1d1; path=/; HttpOnly
44
+ Expires:
45
+ - Thu, 19 Nov 1981 08:52:00 GMT
46
+ Cache-Control:
47
+ - no-store, no-cache, must-revalidate, post-check=0, pre-check=0
48
+ Pragma:
49
+ - no-cache
50
+ Vary:
51
+ - Accept-Encoding
52
+ Content-Encoding:
53
+ - gzip
54
+ Content-Length:
55
+ - '114'
56
+ Content-Type:
57
+ - application/json
51
58
  body:
52
- encoding: UTF-8
53
- string: |-
54
- {
55
- "success":true,
56
- "message":"BTCCAD Order Canceled",
57
- "data":
58
- {
59
- "id":"85",
60
- "currency_pair":"BTCAD"
61
- }
62
- }
59
+ encoding: ASCII-8BIT
60
+ string: !binary |-
61
+ H4sIAAAAAAAAA6tWKi5NTk4tLlaySkvMKU7VUcoFchLTU5WslPyLUlKLFPzy
62
+ SxTc8kvzUpR0lFISSxKVrKqVUouK8ouc81NAqiwMDJSQdYVkpCrkg3Wm5KcW
63
+ 56mXKKRWZBaX6CnV1nIBAHEGK69uAAAA
63
64
  http_version:
64
- recorded_at: Sun, 31 May 2015 07:30:26 GMT
65
+ recorded_at: Sat, 13 Jun 2015 23:01:55 GMT
65
66
  recorded_with: VCR 2.9.3