cointrader.net 0.8.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (27) hide show
  1. checksums.yaml +4 -4
  2. data/lib/cointrader.net/client.rb +1 -0
  3. data/lib/cointrader.net/client/error.rb +6 -0
  4. data/lib/cointrader.net/client/request.rb +30 -1
  5. data/lib/cointrader.net/version.rb +1 -1
  6. data/spec/client_spec.rb +49 -79
  7. data/spec/fixtures/vcr_cassettes/{balance.yml → Cointrader_Client/account/_balance/returns_a_balance.yml} +6 -6
  8. data/spec/fixtures/vcr_cassettes/{tradehistory.yml → Cointrader_Client/account/_tradehistory/returns_trade_history.yml} +6 -6
  9. data/spec/fixtures/vcr_cassettes/{cancel.yml → Cointrader_Client/order/_cancel/cancels_an_order.yml} +12 -12
  10. data/spec/fixtures/vcr_cassettes/Cointrader_Client/order/_limit_buy/returns_an_order.yml +66 -0
  11. data/spec/fixtures/vcr_cassettes/Cointrader_Client/order/_limit_buy/throws_an_error_when_there_are_insufficient_funds.yml +66 -0
  12. data/spec/fixtures/vcr_cassettes/Cointrader_Client/order/_limit_sell/returns_an_order.yml +66 -0
  13. data/spec/fixtures/vcr_cassettes/{list.yml → Cointrader_Client/order/_list/when_there_are_no_orders/throws_an_error.yml} +6 -6
  14. data/spec/fixtures/vcr_cassettes/Cointrader_Client/order/_list/when_there_are_orders/lists_open_limit_orders.yml +129 -0
  15. data/spec/fixtures/vcr_cassettes/Cointrader_Client/order/_market_buy/returns_an_order.yml +67 -0
  16. data/spec/fixtures/vcr_cassettes/Cointrader_Client/order/_market_sell/returns_an_order.yml +66 -0
  17. data/spec/fixtures/vcr_cassettes/{trades.yml → Cointrader_Client/order/_trades/lists_recent_trades_executed.yml} +11 -9
  18. data/spec/fixtures/vcr_cassettes/{orders.yml → Cointrader_Client/stats/_orders/returns_open_orders.yml} +12 -12
  19. data/spec/fixtures/vcr_cassettes/{stats_24h.yml → Cointrader_Client/stats/_stats_24h/returns_24_hour_sliding_statistics.yml} +11 -11
  20. data/spec/fixtures/vcr_cassettes/{stats_7d.yml → Cointrader_Client/stats/_stats_7d/returns_7_day_sliding_statistics.yml} +10 -10
  21. data/spec/fixtures/vcr_cassettes/{symbol.yml → Cointrader_Client/stats/_symbol/returns_supported_currencies.yml} +6 -6
  22. data/spec/spec_helper.rb +1 -0
  23. metadata +33 -28
  24. data/spec/fixtures/vcr_cassettes/limit_buy.yml +0 -65
  25. data/spec/fixtures/vcr_cassettes/limit_sell.yml +0 -58
  26. data/spec/fixtures/vcr_cassettes/market_buy.yml +0 -71
  27. data/spec/fixtures/vcr_cassettes/market_sell.yml +0 -72
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c04efa6cfe08064cb0a38a0a0833cd0c381e7c1f
4
- data.tar.gz: 3ff238c3c11eddece8093c43a0dd36c94f2135d9
3
+ metadata.gz: 7ecad613ebfbea1bf2859dfc6a00029ef45610b6
4
+ data.tar.gz: bdfbb95bb25cbabcc7ba0399734d6455f6562ace
5
5
  SHA512:
6
- metadata.gz: 174fa7f56e4f7c47e43a560eec5bca74b7f39646151b1e5c49025155e753bc17f52356019052a4cd61883ebc0e67ed9072c749fd401335509dc949c3aa458c8a
7
- data.tar.gz: 8c8f63407026fdf073e2daf634fdaa68b2286148e2cabc6583f825990c5736303153897aef0a5fdd6cb08df90e5bd59160fd28f4ec9da027e0392c867ab6cd47
6
+ metadata.gz: ea34eb938fc6805bb1728a9ba78c3692760d2769e8f6f2b9e7732fd97ec1f8ce83a91469d27a499372abca87518f829d89f57fbfe9e4f892573bd048981f301b
7
+ data.tar.gz: 79a0c0b1bb3bc3fbd72729dad7d6d607bc143b6b7904a3d56a10cdd44dfb085757ae6adbcaa5d3c3b6ebf908c1de47ce0b0787fb7aa1917ca7b4f15a1045b63c
@@ -2,6 +2,7 @@ require_relative 'client/request'
2
2
  require_relative 'client/stats'
3
3
  require_relative 'client/account'
4
4
  require_relative 'client/order'
5
+ require_relative 'client/error'
5
6
 
6
7
  module Cointrader
7
8
  class Client
@@ -0,0 +1,6 @@
1
+ module Cointrader
2
+ class Error < StandardError; end
3
+ class Unauthorized < Error; end
4
+ class InsufficientFunds < Error; end
5
+ class NoOpenOrders < Error; end
6
+ end
@@ -39,9 +39,11 @@ module Cointrader
39
39
  end
40
40
 
41
41
  def request(method, path, body={})
42
- JSON.parse(hmac_request(method, path, body))
42
+ check_errors(JSON.parse(hmac_request(method, path, body)))
43
43
  end
44
44
 
45
+ private
46
+
45
47
  def hmac_request method, path, body={}
46
48
  payload = {}
47
49
  headers = { :content_type => 'application/json' }
@@ -77,5 +79,32 @@ module Cointrader
77
79
  headers: headers,
78
80
  )
79
81
  end
82
+
83
+ # Returns the error code from `response` or `nil` if there is none.
84
+ def extract_error_code response
85
+ return unless response
86
+ return unless response['data'] && response['data'].class == Hash
87
+ return unless response['data']['errorCode']
88
+
89
+ response['data']['errorCode'].to_i
90
+ end
91
+
92
+ def check_errors response
93
+ code = extract_error_code(response)
94
+
95
+ if code
96
+ errorClass =
97
+ case code
98
+ when 401 then Unauthorized
99
+ when 802, 803 then InsufficientFunds # Fiat, Crypto respectively.
100
+ when 801 then NoOpenOrders
101
+ else Error
102
+ end
103
+
104
+ raise errorClass.new(response['message'])
105
+ end
106
+
107
+ response
108
+ end
80
109
  end
81
110
  end
@@ -1,3 +1,3 @@
1
1
  module Cointrader
2
- VERSION = "0.8.0"
2
+ VERSION = "0.9.0"
3
3
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Cointrader::Client do
3
+ describe Cointrader::Client, vcr: true do
4
4
  def limit_buy
5
5
  subject.limit_buy(total_quantity: 1, price: 10)
6
6
  end
@@ -17,57 +17,33 @@ describe Cointrader::Client do
17
17
  subject.market_sell(total_amount: 1)
18
18
  end
19
19
 
20
- def safe_limit_buy
21
- VCR.use_cassette('limit_buy', &method(:limit_buy))
22
- end
23
-
24
- def safe_limit_sell
25
- VCR.use_cassette('limit_sell', &method(:limit_sell))
26
- end
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
-
36
20
  describe 'stats' do
37
21
  describe '#symbol' do
38
22
  it 'returns supported currencies' do
39
- VCR.use_cassette('symbol') do
40
- response = subject.symbol
41
- expect_success(response)
42
- expect(response['data'][0]['name']).to eq 'Bitcoin (BTC)'
43
- end
23
+ response = subject.symbol
24
+ expect_success(response)
25
+ expect(response['data'][0]['name']).to eq 'Bitcoin (BTC)'
44
26
  end
45
27
  end
46
28
 
47
29
  describe '#stats_24h' do
48
30
  it 'returns 24 hour sliding statistics' do
49
- VCR.use_cassette('stats_24h') do
50
- response = subject.stats_24h
51
- expect_success(response)
52
- end
31
+ response = subject.stats_24h
32
+ expect_success(response)
53
33
  end
54
34
  end
55
35
 
56
36
  describe '#stats_7d' do
57
37
  it 'returns 7 day sliding statistics' do
58
- VCR.use_cassette('stats_7d') do
59
- response = subject.stats_7d
60
- expect_success(response)
61
- end
38
+ response = subject.stats_7d
39
+ expect_success(response)
62
40
  end
63
41
  end
64
42
 
65
43
  describe '#orders' do
66
44
  it 'returns open orders' do
67
- VCR.use_cassette('orders') do
68
- response = subject.orders
69
- expect_success(response)
70
- end
45
+ response = subject.orders
46
+ expect_success(response)
71
47
  end
72
48
  end
73
49
  end
@@ -75,21 +51,17 @@ describe Cointrader::Client do
75
51
  describe 'account' do
76
52
  describe '#balance' do
77
53
  it 'returns a balance' do
78
- VCR.use_cassette('balance') do
79
- response = subject.balance
54
+ response = subject.balance
80
55
 
81
- expect_success(response)
82
- expect(response['data']['BTC']['available']).not_to be_nil
83
- end
56
+ expect_success(response)
57
+ expect(response['data']['BTC']['available']).not_to be_nil
84
58
  end
85
59
  end
86
60
 
87
61
  describe '#tradehistory' do
88
62
  it 'returns trade history' do
89
- VCR.use_cassette('tradehistory') do
90
- response = subject.tradehistory
91
- expect_success(response)
92
- end
63
+ response = subject.tradehistory
64
+ expect_success(response)
93
65
  end
94
66
  end
95
67
  end
@@ -97,74 +69,72 @@ describe Cointrader::Client do
97
69
  describe 'order' do
98
70
  describe '#limit_buy' do
99
71
  it 'returns an order' do
100
- VCR.use_cassette('limit_buy') do
101
- response = limit_buy
102
- expect_success(response)
103
- expect(response['data']['id']).not_to be_nil
104
- end
72
+ response = limit_buy
73
+ expect_success(response)
74
+ expect(response['data']['id']).not_to be_nil
75
+ end
76
+
77
+ it 'throws an error when there are insufficient funds' do
78
+ expect { subject.limit_buy(price: 1_000_000, total_quantity: 1) }.to raise_error(Cointrader::InsufficientFunds)
105
79
  end
106
80
  end
107
81
 
108
82
  describe '#limit_sell' do
109
83
  it 'returns an order' do
110
- VCR.use_cassette('limit_sell') do
111
- response = limit_sell
112
- expect_success(response)
113
- expect(response['data']['id']).not_to be_nil
114
- end
84
+ response = limit_sell
85
+ expect_success(response)
86
+ expect(response['data']['id']).not_to be_nil
115
87
  end
116
88
  end
117
89
 
118
90
  describe '#cancel' do
119
- let(:order) { safe_limit_buy }
91
+ let(:order) { limit_buy }
120
92
 
121
- it 'cancels and order' do
122
- VCR.use_cassette('cancel') do
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
127
- end
93
+ it 'cancels an order' do
94
+ response = subject.cancel(order_id: order['data']['id'])
95
+ expect_success(response)
128
96
  end
129
97
  end
130
98
 
131
99
  describe '#list' do
132
- it 'lists open limit orders' do
133
- VCR.use_cassette('list') do
100
+ context 'when there are orders' do
101
+ let(:order) { limit_buy }
102
+ after { subject.cancel(order_id: order['data']['id'] )}
103
+
104
+ it 'lists open limit orders' do
105
+ order
134
106
  response = subject.list
135
107
  expect_success(response)
136
- # expect(response['data'][0]['type'])
108
+ end
109
+ end
110
+
111
+ context 'when there are no orders' do
112
+ it 'throws an error' do
113
+ expect { subject.list }.to raise_error(Cointrader::NoOpenOrders)
137
114
  end
138
115
  end
139
116
  end
140
117
 
141
118
  describe '#market_buy' do
142
119
  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
120
+ response = market_buy
121
+ expect_success(response)
122
+ expect(response['message']).not_to eq('Unauthorized')
148
123
  end
149
124
  end
150
125
 
151
126
  describe '#market_sell' do
152
127
  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')
157
- end
128
+ response = market_sell
129
+ expect_success(response)
130
+ expect(response['message']).not_to eq('Unauthorized')
158
131
  end
159
132
  end
160
133
 
161
134
  describe '#trades' do
162
135
  it 'lists recent trades executed' do
163
- VCR.use_cassette('trades') do
164
- response = subject.trades
165
- expect_success(response)
166
- # expect(response['data'][0]['price'])
167
- end
136
+ response = subject.trades
137
+ expect_success(response)
168
138
  end
169
139
  end
170
140
  end
@@ -5,8 +5,8 @@ http_interactions:
5
5
  uri: https://sandbox.cointrader.net/api4/account/balance
6
6
  body:
7
7
  encoding: UTF-8
8
- string: '{"secret":"2MlxW8mUU9MG4bvq7C6M4PSd5J8SaauW4H2dXnyJyAcN","t":"2015-06-13
9
- 23:00:21 UTC"}'
8
+ string: '{"secret":"2MlxW8mUU9MG4bvq7C6M4PSd5J8SaauW4H2dXnyJyAcN","t":"2015-07-06
9
+ 00:33:09 UTC"}'
10
10
  headers:
11
11
  Accept:
12
12
  - "*/*; q=0.5, application/xml"
@@ -17,7 +17,7 @@ http_interactions:
17
17
  X-Auth:
18
18
  - nCsNvmrxTpYFnJQyU16gq6R9ncOUA6UhF4wZnuf7IqkL
19
19
  X-Auth-Hash:
20
- - 149ab2f07d5f872b8244e00a63e7978aa961760215f523c46869aba6c69b41a9
20
+ - e6bb80adc0eaaa0c1b6de259208d310034606062bc0c6e9d27a892364d08c6e8
21
21
  Content-Length:
22
22
  - '87'
23
23
  User-Agent:
@@ -28,7 +28,7 @@ http_interactions:
28
28
  message: OK
29
29
  headers:
30
30
  Date:
31
- - Sat, 13 Jun 2015 23:00:26 GMT
31
+ - Mon, 06 Jul 2015 00:33:10 GMT
32
32
  Server:
33
33
  - Apache
34
34
  X-Frame-Options:
@@ -40,7 +40,7 @@ http_interactions:
40
40
  X-Powered-By:
41
41
  - ''
42
42
  Set-Cookie:
43
- - CTXIDSCK=rumaii5548fj7n7g95sjggu251; path=/; HttpOnly
43
+ - CTXIDSCK=4f9kvstmt2ff4r5i4i42ssv4q0; path=/; HttpOnly
44
44
  Expires:
45
45
  - Thu, 19 Nov 1981 08:52:00 GMT
46
46
  Cache-Control:
@@ -62,5 +62,5 @@ http_interactions:
62
62
  EnMS84BKlHSUUhJLEpWsqpWcQpxBVGJZYmZOYlIOSLWBngEUANXl58Vn5Oek
63
63
  oAuX5Jck5qAK1uoohQa7YDMMwxg0A0BanR3J1FpbywUAkRGfN/oAAAA=
64
64
  http_version:
65
- recorded_at: Sat, 13 Jun 2015 23:00:26 GMT
65
+ recorded_at: Mon, 06 Jul 2015 00:33:11 GMT
66
66
  recorded_with: VCR 2.9.3
@@ -5,8 +5,8 @@ http_interactions:
5
5
  uri: https://sandbox.cointrader.net/api4/account/tradehistory/BTCUSD
6
6
  body:
7
7
  encoding: UTF-8
8
- string: '{"secret":"2MlxW8mUU9MG4bvq7C6M4PSd5J8SaauW4H2dXnyJyAcN","t":"2015-06-13
9
- 23:00:26 UTC"}'
8
+ string: '{"secret":"2MlxW8mUU9MG4bvq7C6M4PSd5J8SaauW4H2dXnyJyAcN","t":"2015-07-06
9
+ 00:33:11 UTC"}'
10
10
  headers:
11
11
  Accept:
12
12
  - "*/*; q=0.5, application/xml"
@@ -17,7 +17,7 @@ http_interactions:
17
17
  X-Auth:
18
18
  - nCsNvmrxTpYFnJQyU16gq6R9ncOUA6UhF4wZnuf7IqkL
19
19
  X-Auth-Hash:
20
- - df4718084a819b003d263c40e0ab07f5c3d0f323d2e8bbd4dd7f96111ea2219f
20
+ - 70b3415aa79e305dd4bbc7035576a776fc19e79f78a19bb11f3348b0d3286774
21
21
  Content-Length:
22
22
  - '87'
23
23
  User-Agent:
@@ -28,7 +28,7 @@ http_interactions:
28
28
  message: OK
29
29
  headers:
30
30
  Date:
31
- - Sat, 13 Jun 2015 23:00:27 GMT
31
+ - Mon, 06 Jul 2015 00:33:13 GMT
32
32
  Server:
33
33
  - Apache
34
34
  X-Frame-Options:
@@ -40,7 +40,7 @@ http_interactions:
40
40
  X-Powered-By:
41
41
  - ''
42
42
  Set-Cookie:
43
- - CTXIDSCK=gdillhuvabvuc9994n1t8an4q7; path=/; HttpOnly
43
+ - CTXIDSCK=vdddf8frh65pplqpfcakv5lfg4; path=/; HttpOnly
44
44
  Expires:
45
45
  - Thu, 19 Nov 1981 08:52:00 GMT
46
46
  Cache-Control:
@@ -62,5 +62,5 @@ http_interactions:
62
62
  yiWmpypZKfnlKwQkFpcohBQlpqQWK7gBlaQo6SilJJYkKllFx9ZyAQBQ0dFf
63
63
  TAAAAA==
64
64
  http_version:
65
- recorded_at: Sat, 13 Jun 2015 23:00:27 GMT
65
+ recorded_at: Mon, 06 Jul 2015 00:33:14 GMT
66
66
  recorded_with: VCR 2.9.3
@@ -2,11 +2,11 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: post
5
- uri: https://sandbox.cointrader.net/api4/order/BTCUSD/cancel
5
+ uri: https://sandbox.cointrader.net/api4/order/BTCUSD/buy
6
6
  body:
7
7
  encoding: UTF-8
8
- string: '{"order_id":"2222321","secret":"2MlxW8mUU9MG4bvq7C6M4PSd5J8SaauW4H2dXnyJyAcN","t":"2015-06-13
9
- 23:01:51 UTC"}'
8
+ string: '{"total_quantity":"1.00000000","price":"10.00","secret":"2MlxW8mUU9MG4bvq7C6M4PSd5J8SaauW4H2dXnyJyAcN","t":"2015-07-06
9
+ 00:33:24 UTC"}'
10
10
  headers:
11
11
  Accept:
12
12
  - "*/*; q=0.5, application/xml"
@@ -17,9 +17,9 @@ http_interactions:
17
17
  X-Auth:
18
18
  - nCsNvmrxTpYFnJQyU16gq6R9ncOUA6UhF4wZnuf7IqkL
19
19
  X-Auth-Hash:
20
- - f6f960802d0ec32112a9b5c659ceac1a46cbe62ad22bdc38070451fa0c09ae50
20
+ - 6bdad317ad5711f68b05097d42aa897691ef2d9a72a4e5eab3658d00ddc703d5
21
21
  Content-Length:
22
- - '108'
22
+ - '133'
23
23
  User-Agent:
24
24
  - Ruby
25
25
  response:
@@ -28,7 +28,7 @@ http_interactions:
28
28
  message: OK
29
29
  headers:
30
30
  Date:
31
- - Sat, 13 Jun 2015 23:01:53 GMT
31
+ - Mon, 06 Jul 2015 00:33:26 GMT
32
32
  Server:
33
33
  - Apache
34
34
  X-Frame-Options:
@@ -40,7 +40,7 @@ http_interactions:
40
40
  X-Powered-By:
41
41
  - ''
42
42
  Set-Cookie:
43
- - CTXIDSCK=pmv8crr36dojr43dlq3784r1d1; path=/; HttpOnly
43
+ - CTXIDSCK=a0mojedrbeebc6pr9poeodriu7; path=/; HttpOnly
44
44
  Expires:
45
45
  - Thu, 19 Nov 1981 08:52:00 GMT
46
46
  Cache-Control:
@@ -52,15 +52,15 @@ http_interactions:
52
52
  Content-Encoding:
53
53
  - gzip
54
54
  Content-Length:
55
- - '114'
55
+ - '131'
56
56
  Content-Type:
57
57
  - application/json
58
58
  body:
59
59
  encoding: ASCII-8BIT
60
60
  string: !binary |-
61
- H4sIAAAAAAAAA6tWKi5NTk4tLlaySkvMKU7VUcoFchLTU5WslPyLUlKLFPzy
62
- SxTc8kvzUpR0lFISSxKVrKqVUouK8ouc81NAqiwMDJSQdYVkpCrkg3Wm5KcW
63
- 56mXKKRWZBaX6CnV1nIBAHEGK69uAAAA
61
+ H4sIAAAAAAAAA6tWKi5NTk4tLlaySkvMKU7VUcoFchLTU5WslJxKKxX8i1JS
62
+ ixRci4ryi6wUPPOKS9PSMpMzU/NKFNxK81KK9RSCUnMTM/My89KtFAz0DKBA
63
+ QUlHKSWxJFHJqlopFaTXOT8FZKKFgZESsg0kGFhbywUAxhnDjqwAAAA=
64
64
  http_version:
65
- recorded_at: Sat, 13 Jun 2015 23:01:55 GMT
65
+ recorded_at: Mon, 06 Jul 2015 00:33:27 GMT
66
66
  recorded_with: VCR 2.9.3
@@ -0,0 +1,66 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://sandbox.cointrader.net/api4/order/BTCUSD/buy
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"total_quantity":"1.00000000","price":"10.00","secret":"2MlxW8mUU9MG4bvq7C6M4PSd5J8SaauW4H2dXnyJyAcN","t":"2015-07-06
9
+ 00:33:14 UTC"}'
10
+ headers:
11
+ Accept:
12
+ - "*/*; q=0.5, application/xml"
13
+ Accept-Encoding:
14
+ - gzip, deflate
15
+ Content-Type:
16
+ - application/json
17
+ X-Auth:
18
+ - nCsNvmrxTpYFnJQyU16gq6R9ncOUA6UhF4wZnuf7IqkL
19
+ X-Auth-Hash:
20
+ - 7684a274dc8e01dcc26b8098399b9f1280bc572ccd9bf0460f051749291f29b4
21
+ Content-Length:
22
+ - '133'
23
+ User-Agent:
24
+ - Ruby
25
+ response:
26
+ status:
27
+ code: 200
28
+ message: OK
29
+ headers:
30
+ Date:
31
+ - Mon, 06 Jul 2015 00:33:16 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=pna8o9aoelska2eeltndlfr9e5; 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
58
+ body:
59
+ encoding: ASCII-8BIT
60
+ string: !binary |-
61
+ H4sIAAAAAAAAA6tWKi5NTk4tLlaySkvMKU7VUcoFchLTU5WslJxKKxX8i1JS
62
+ ixRci4ryi6wUPPOKS9PSMpMzU/NKFNxK81KK9RSCUnMTM/My89KtFAz0DKBA
63
+ QUlHKSWxJFHJqlopFaTXOT8FZKKFgZESsg0kGFhbywUAxhnDjqwAAAA=
64
+ http_version:
65
+ recorded_at: Mon, 06 Jul 2015 00:33:17 GMT
66
+ recorded_with: VCR 2.9.3