oanda_api 0.9.4 → 0.9.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +67 -6
- data/README.md +31 -3
- data/lib/oanda_api.rb +3 -1
- data/lib/oanda_api/client/client.rb +17 -12
- data/lib/oanda_api/client/namespace_proxy.rb +2 -2
- data/lib/oanda_api/client/resource_descriptor.rb +25 -9
- data/lib/oanda_api/client/username_client.rb +7 -0
- data/lib/oanda_api/configuration.rb +14 -0
- data/lib/oanda_api/resource/account.rb +22 -3
- data/lib/oanda_api/resource/candle.rb +1 -1
- data/lib/oanda_api/resource/labs/calendar_event.rb +25 -0
- data/lib/oanda_api/resource/labs/spread_history.rb +61 -0
- data/lib/oanda_api/resource/order.rb +4 -4
- data/lib/oanda_api/resource/transaction_history.rb +0 -1
- data/lib/oanda_api/resource_base.rb +64 -2
- data/lib/oanda_api/resource_collection.rb +6 -0
- data/lib/oanda_api/streaming/client.rb +1 -0
- data/lib/oanda_api/version.rb +1 -1
- data/oanda_api.gemspec +2 -2
- data/spec/fixtures/vcr_cassettes/accounts_get.yml +13 -79
- data/spec/fixtures/vcr_cassettes/accounts_id_get.yml +23 -125
- data/spec/fixtures/vcr_cassettes/calendar_events_period_get.yml +54 -0
- data/spec/fixtures/vcr_cassettes/calendar_instrument_and_period_get.yml +61 -0
- data/spec/fixtures/vcr_cassettes/calendar_period_get.yml +54 -0
- data/spec/fixtures/vcr_cassettes/candles_options_get.yml +9 -45
- data/spec/fixtures/vcr_cassettes/client_helper_account.yml +45 -0
- data/spec/fixtures/vcr_cassettes/client_helper_accounts.yml +45 -0
- data/spec/fixtures/vcr_cassettes/instrument_EUR_USD.yml +42 -0
- data/spec/fixtures/vcr_cassettes/instrument_USD_JPY.yml +42 -0
- data/spec/fixtures/vcr_cassettes/instruments_get.yml +37 -303
- data/spec/fixtures/vcr_cassettes/instruments_options_get.yml +6 -43
- data/spec/fixtures/vcr_cassettes/order_id_close.yml +448 -0
- data/spec/fixtures/vcr_cassettes/order_id_get.yml +84 -0
- data/spec/fixtures/vcr_cassettes/order_options_create.yml +42 -0
- data/spec/fixtures/vcr_cassettes/order_options_update.yml +82 -0
- data/spec/fixtures/vcr_cassettes/orders_get.yml +205 -0
- data/spec/fixtures/vcr_cassettes/orders_options_get.yml +120 -0
- data/spec/fixtures/vcr_cassettes/positions_get.yml +82 -0
- data/spec/fixtures/vcr_cassettes/positions_instrument_close.yml +154 -0
- data/spec/fixtures/vcr_cassettes/{account_id_order_options_create.yml → positions_instrument_get.yml} +24 -18
- data/spec/fixtures/vcr_cassettes/prices_options_get.yml +11 -48
- data/spec/fixtures/vcr_cassettes/spread_history_get.yml +53 -0
- data/spec/fixtures/vcr_cassettes/spreads_get.yml +53 -0
- data/spec/fixtures/vcr_cassettes/trade_id_close.yml +277 -0
- data/spec/fixtures/vcr_cassettes/trade_id_get.yml +82 -0
- data/spec/fixtures/vcr_cassettes/trade_options_modify.yml +80 -0
- data/spec/fixtures/vcr_cassettes/trades_filter_get.yml +90 -0
- data/spec/fixtures/vcr_cassettes/trades_get.yml +171 -0
- data/spec/fixtures/vcr_cassettes/transaction_id_get.yml +248 -0
- data/spec/fixtures/vcr_cassettes/transactions_options_get.yml +202 -0
- data/spec/fixtures/vcr_cassettes/with_throttling_and_max_requests_per_second.yml +25 -19
- data/spec/fixtures/vcr_cassettes/with_throttling_with_multiple_threads.yml +51 -39
- data/spec/fixtures/vcr_cassettes/without_throttling.yml +81 -61
- data/spec/oanda_api/client/client_spec.rb +23 -10
- data/spec/oanda_api/client/namespace_proxy_spec.rb +1 -1
- data/spec/oanda_api/client/resource_descriptor_spec.rb +45 -14
- data/spec/oanda_api/configuration_spec.rb +13 -0
- data/spec/oanda_api/examples/accounts_spec.rb +0 -7
- data/spec/oanda_api/examples/calendar_spec.rb +27 -0
- data/spec/oanda_api/examples/orders_spec.rb +12 -12
- data/spec/oanda_api/examples/positions_spec.rb +3 -3
- data/spec/oanda_api/examples/rates_spec.rb +4 -2
- data/spec/oanda_api/examples/spread_history_spec.rb +32 -0
- data/spec/oanda_api/examples/trades_spec.rb +5 -5
- data/spec/oanda_api/examples/transactions_spec.rb +2 -2
- data/spec/oanda_api/resource_base_spec.rb +48 -8
- data/spec/oanda_api/streaming/client_spec.rb +30 -2
- data/spec/spec_helper.rb +1 -1
- data/spec/support/client_helper.rb +45 -11
- data/spec/support/vcr.rb +1 -0
- metadata +63 -49
- data/spec/fixtures/vcr_cassettes/account_id_order_id_close.yml +0 -264
- data/spec/fixtures/vcr_cassettes/account_id_order_id_get.yml +0 -114
- data/spec/fixtures/vcr_cassettes/account_id_order_options_update.yml +0 -112
- data/spec/fixtures/vcr_cassettes/account_id_orders_get.yml +0 -118
- data/spec/fixtures/vcr_cassettes/account_id_orders_options_get.yml +0 -123
- data/spec/fixtures/vcr_cassettes/account_id_positions_get.yml +0 -112
- data/spec/fixtures/vcr_cassettes/account_id_positions_instrument_close.yml +0 -214
- data/spec/fixtures/vcr_cassettes/account_id_positions_instrument_get.yml +0 -110
- data/spec/fixtures/vcr_cassettes/account_id_trade_id_close.yml +0 -252
- data/spec/fixtures/vcr_cassettes/account_id_trade_id_get.yml +0 -112
- data/spec/fixtures/vcr_cassettes/account_id_trade_options_modify.yml +0 -110
- data/spec/fixtures/vcr_cassettes/account_id_trades_filter_get.yml +0 -118
- data/spec/fixtures/vcr_cassettes/account_id_trades_get.yml +0 -118
- data/spec/fixtures/vcr_cassettes/account_id_transaction_id_get.yml +0 -283
- data/spec/fixtures/vcr_cassettes/account_id_transactions_options_get.yml +0 -205
- data/spec/fixtures/vcr_cassettes/accounts_create.yml +0 -75
- data/spec/fixtures/vcr_cassettes/sandbox_client.yml +0 -116
- data/spec/fixtures/vcr_cassettes/sandbox_client_account.yml +0 -111
- data/spec/fixtures/vcr_cassettes/sandbox_instrument_EUR_USD.yml +0 -77
- data/spec/oanda_api/client/username_client_spec.rb +0 -31
@@ -2,13 +2,15 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri:
|
5
|
+
uri: https://api-fxpractice.oanda.com/v1/prices?instruments=EUR_USD
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
9
9
|
headers:
|
10
10
|
X-Accept-Datetime-Format:
|
11
11
|
- RFC3339
|
12
|
+
Authorization:
|
13
|
+
- Bearer <OANDA_TESTING_API_TOKEN>
|
12
14
|
Connection:
|
13
15
|
- keep-alive
|
14
16
|
Keep-Alive:
|
@@ -21,7 +23,7 @@ http_interactions:
|
|
21
23
|
Server:
|
22
24
|
- openresty/1.7.0.1
|
23
25
|
Date:
|
24
|
-
-
|
26
|
+
- Mon, 14 Mar 2016 16:28:49 GMT
|
25
27
|
Content-Type:
|
26
28
|
- application/json
|
27
29
|
Content-Length:
|
@@ -29,23 +31,25 @@ http_interactions:
|
|
29
31
|
Connection:
|
30
32
|
- keep-alive
|
31
33
|
Etag:
|
32
|
-
- '"
|
34
|
+
- '"7307c40c38b58f85d7f3145c3c71bd20c5445765"'
|
33
35
|
body:
|
34
36
|
encoding: UTF-8
|
35
37
|
string: "{\n\t\"prices\" : [\n\t\t{\n\t\t\t\"instrument\" : \"EUR_USD\",\n\t\t\t\"time\"
|
36
|
-
: \"
|
37
|
-
: 1.
|
38
|
+
: \"2016-03-14T16:28:48.718496Z\",\n\t\t\t\"bid\" : 1.11104,\n\t\t\t\"ask\"
|
39
|
+
: 1.11118\n\t\t}\n\t]\n}"
|
38
40
|
http_version:
|
39
|
-
recorded_at:
|
41
|
+
recorded_at: Mon, 14 Mar 2016 16:28:48 GMT
|
40
42
|
- request:
|
41
43
|
method: get
|
42
|
-
uri:
|
44
|
+
uri: https://api-fxpractice.oanda.com/v1/prices?instruments=EUR_USD
|
43
45
|
body:
|
44
46
|
encoding: US-ASCII
|
45
47
|
string: ''
|
46
48
|
headers:
|
47
49
|
X-Accept-Datetime-Format:
|
48
50
|
- RFC3339
|
51
|
+
Authorization:
|
52
|
+
- Bearer <OANDA_TESTING_API_TOKEN>
|
49
53
|
Connection:
|
50
54
|
- keep-alive
|
51
55
|
Keep-Alive:
|
@@ -58,7 +62,7 @@ http_interactions:
|
|
58
62
|
Server:
|
59
63
|
- openresty/1.7.0.1
|
60
64
|
Date:
|
61
|
-
-
|
65
|
+
- Mon, 14 Mar 2016 16:28:50 GMT
|
62
66
|
Content-Type:
|
63
67
|
- application/json
|
64
68
|
Content-Length:
|
@@ -66,23 +70,25 @@ http_interactions:
|
|
66
70
|
Connection:
|
67
71
|
- keep-alive
|
68
72
|
Etag:
|
69
|
-
- '"
|
73
|
+
- '"50c652cb079cb183ec34718d3760fd9f07cd9948"'
|
70
74
|
body:
|
71
75
|
encoding: UTF-8
|
72
76
|
string: "{\n\t\"prices\" : [\n\t\t{\n\t\t\t\"instrument\" : \"EUR_USD\",\n\t\t\t\"time\"
|
73
|
-
: \"
|
74
|
-
: 1.
|
77
|
+
: \"2016-03-14T16:28:49.214000Z\",\n\t\t\t\"bid\" : 1.11104,\n\t\t\t\"ask\"
|
78
|
+
: 1.11118\n\t\t}\n\t]\n}"
|
75
79
|
http_version:
|
76
|
-
recorded_at:
|
80
|
+
recorded_at: Mon, 14 Mar 2016 16:28:50 GMT
|
77
81
|
- request:
|
78
82
|
method: get
|
79
|
-
uri:
|
83
|
+
uri: https://api-fxpractice.oanda.com/v1/prices?instruments=EUR_USD
|
80
84
|
body:
|
81
85
|
encoding: US-ASCII
|
82
86
|
string: ''
|
83
87
|
headers:
|
84
88
|
X-Accept-Datetime-Format:
|
85
89
|
- RFC3339
|
90
|
+
Authorization:
|
91
|
+
- Bearer <OANDA_TESTING_API_TOKEN>
|
86
92
|
Connection:
|
87
93
|
- keep-alive
|
88
94
|
Keep-Alive:
|
@@ -95,7 +101,7 @@ http_interactions:
|
|
95
101
|
Server:
|
96
102
|
- openresty/1.7.0.1
|
97
103
|
Date:
|
98
|
-
-
|
104
|
+
- Mon, 14 Mar 2016 16:28:51 GMT
|
99
105
|
Content-Type:
|
100
106
|
- application/json
|
101
107
|
Content-Length:
|
@@ -103,23 +109,25 @@ http_interactions:
|
|
103
109
|
Connection:
|
104
110
|
- keep-alive
|
105
111
|
Etag:
|
106
|
-
- '"
|
112
|
+
- '"50c652cb079cb183ec34718d3760fd9f07cd9948"'
|
107
113
|
body:
|
108
114
|
encoding: UTF-8
|
109
115
|
string: "{\n\t\"prices\" : [\n\t\t{\n\t\t\t\"instrument\" : \"EUR_USD\",\n\t\t\t\"time\"
|
110
|
-
: \"
|
111
|
-
: 1.
|
116
|
+
: \"2016-03-14T16:28:49.214000Z\",\n\t\t\t\"bid\" : 1.11104,\n\t\t\t\"ask\"
|
117
|
+
: 1.11118\n\t\t}\n\t]\n}"
|
112
118
|
http_version:
|
113
|
-
recorded_at:
|
119
|
+
recorded_at: Mon, 14 Mar 2016 16:28:51 GMT
|
114
120
|
- request:
|
115
121
|
method: get
|
116
|
-
uri:
|
122
|
+
uri: https://api-fxpractice.oanda.com/v1/prices?instruments=EUR_USD
|
117
123
|
body:
|
118
124
|
encoding: US-ASCII
|
119
125
|
string: ''
|
120
126
|
headers:
|
121
127
|
X-Accept-Datetime-Format:
|
122
128
|
- RFC3339
|
129
|
+
Authorization:
|
130
|
+
- Bearer <OANDA_TESTING_API_TOKEN>
|
123
131
|
Connection:
|
124
132
|
- keep-alive
|
125
133
|
Keep-Alive:
|
@@ -132,7 +140,7 @@ http_interactions:
|
|
132
140
|
Server:
|
133
141
|
- openresty/1.7.0.1
|
134
142
|
Date:
|
135
|
-
-
|
143
|
+
- Mon, 14 Mar 2016 16:28:52 GMT
|
136
144
|
Content-Type:
|
137
145
|
- application/json
|
138
146
|
Content-Length:
|
@@ -140,23 +148,25 @@ http_interactions:
|
|
140
148
|
Connection:
|
141
149
|
- keep-alive
|
142
150
|
Etag:
|
143
|
-
- '"
|
151
|
+
- '"50c652cb079cb183ec34718d3760fd9f07cd9948"'
|
144
152
|
body:
|
145
153
|
encoding: UTF-8
|
146
154
|
string: "{\n\t\"prices\" : [\n\t\t{\n\t\t\t\"instrument\" : \"EUR_USD\",\n\t\t\t\"time\"
|
147
|
-
: \"
|
148
|
-
: 1.
|
155
|
+
: \"2016-03-14T16:28:49.214000Z\",\n\t\t\t\"bid\" : 1.11104,\n\t\t\t\"ask\"
|
156
|
+
: 1.11118\n\t\t}\n\t]\n}"
|
149
157
|
http_version:
|
150
|
-
recorded_at:
|
158
|
+
recorded_at: Mon, 14 Mar 2016 16:28:52 GMT
|
151
159
|
- request:
|
152
160
|
method: get
|
153
|
-
uri:
|
161
|
+
uri: https://api-fxpractice.oanda.com/v1/prices?instruments=EUR_USD
|
154
162
|
body:
|
155
163
|
encoding: US-ASCII
|
156
164
|
string: ''
|
157
165
|
headers:
|
158
166
|
X-Accept-Datetime-Format:
|
159
167
|
- RFC3339
|
168
|
+
Authorization:
|
169
|
+
- Bearer <OANDA_TESTING_API_TOKEN>
|
160
170
|
Connection:
|
161
171
|
- keep-alive
|
162
172
|
Keep-Alive:
|
@@ -169,7 +179,7 @@ http_interactions:
|
|
169
179
|
Server:
|
170
180
|
- openresty/1.7.0.1
|
171
181
|
Date:
|
172
|
-
-
|
182
|
+
- Mon, 14 Mar 2016 16:28:53 GMT
|
173
183
|
Content-Type:
|
174
184
|
- application/json
|
175
185
|
Content-Length:
|
@@ -177,23 +187,25 @@ http_interactions:
|
|
177
187
|
Connection:
|
178
188
|
- keep-alive
|
179
189
|
Etag:
|
180
|
-
- '"
|
190
|
+
- '"50c652cb079cb183ec34718d3760fd9f07cd9948"'
|
181
191
|
body:
|
182
192
|
encoding: UTF-8
|
183
193
|
string: "{\n\t\"prices\" : [\n\t\t{\n\t\t\t\"instrument\" : \"EUR_USD\",\n\t\t\t\"time\"
|
184
|
-
: \"
|
185
|
-
: 1.
|
194
|
+
: \"2016-03-14T16:28:49.214000Z\",\n\t\t\t\"bid\" : 1.11104,\n\t\t\t\"ask\"
|
195
|
+
: 1.11118\n\t\t}\n\t]\n}"
|
186
196
|
http_version:
|
187
|
-
recorded_at:
|
197
|
+
recorded_at: Mon, 14 Mar 2016 16:28:53 GMT
|
188
198
|
- request:
|
189
199
|
method: get
|
190
|
-
uri:
|
200
|
+
uri: https://api-fxpractice.oanda.com/v1/prices?instruments=EUR_USD
|
191
201
|
body:
|
192
202
|
encoding: US-ASCII
|
193
203
|
string: ''
|
194
204
|
headers:
|
195
205
|
X-Accept-Datetime-Format:
|
196
206
|
- RFC3339
|
207
|
+
Authorization:
|
208
|
+
- Bearer <OANDA_TESTING_API_TOKEN>
|
197
209
|
Connection:
|
198
210
|
- keep-alive
|
199
211
|
Keep-Alive:
|
@@ -206,7 +218,7 @@ http_interactions:
|
|
206
218
|
Server:
|
207
219
|
- openresty/1.7.0.1
|
208
220
|
Date:
|
209
|
-
-
|
221
|
+
- Mon, 14 Mar 2016 16:28:54 GMT
|
210
222
|
Content-Type:
|
211
223
|
- application/json
|
212
224
|
Content-Length:
|
@@ -214,23 +226,25 @@ http_interactions:
|
|
214
226
|
Connection:
|
215
227
|
- keep-alive
|
216
228
|
Etag:
|
217
|
-
- '"
|
229
|
+
- '"50c652cb079cb183ec34718d3760fd9f07cd9948"'
|
218
230
|
body:
|
219
231
|
encoding: UTF-8
|
220
232
|
string: "{\n\t\"prices\" : [\n\t\t{\n\t\t\t\"instrument\" : \"EUR_USD\",\n\t\t\t\"time\"
|
221
|
-
: \"
|
222
|
-
: 1.
|
233
|
+
: \"2016-03-14T16:28:49.214000Z\",\n\t\t\t\"bid\" : 1.11104,\n\t\t\t\"ask\"
|
234
|
+
: 1.11118\n\t\t}\n\t]\n}"
|
223
235
|
http_version:
|
224
|
-
recorded_at:
|
236
|
+
recorded_at: Mon, 14 Mar 2016 16:28:54 GMT
|
225
237
|
- request:
|
226
238
|
method: get
|
227
|
-
uri:
|
239
|
+
uri: https://api-fxpractice.oanda.com/v1/prices?instruments=EUR_USD
|
228
240
|
body:
|
229
241
|
encoding: US-ASCII
|
230
242
|
string: ''
|
231
243
|
headers:
|
232
244
|
X-Accept-Datetime-Format:
|
233
245
|
- RFC3339
|
246
|
+
Authorization:
|
247
|
+
- Bearer <OANDA_TESTING_API_TOKEN>
|
234
248
|
Connection:
|
235
249
|
- keep-alive
|
236
250
|
Keep-Alive:
|
@@ -243,7 +257,7 @@ http_interactions:
|
|
243
257
|
Server:
|
244
258
|
- openresty/1.7.0.1
|
245
259
|
Date:
|
246
|
-
-
|
260
|
+
- Mon, 14 Mar 2016 16:28:55 GMT
|
247
261
|
Content-Type:
|
248
262
|
- application/json
|
249
263
|
Content-Length:
|
@@ -251,23 +265,25 @@ http_interactions:
|
|
251
265
|
Connection:
|
252
266
|
- keep-alive
|
253
267
|
Etag:
|
254
|
-
- '"
|
268
|
+
- '"50c652cb079cb183ec34718d3760fd9f07cd9948"'
|
255
269
|
body:
|
256
270
|
encoding: UTF-8
|
257
271
|
string: "{\n\t\"prices\" : [\n\t\t{\n\t\t\t\"instrument\" : \"EUR_USD\",\n\t\t\t\"time\"
|
258
|
-
: \"
|
259
|
-
: 1.
|
272
|
+
: \"2016-03-14T16:28:49.214000Z\",\n\t\t\t\"bid\" : 1.11104,\n\t\t\t\"ask\"
|
273
|
+
: 1.11118\n\t\t}\n\t]\n}"
|
260
274
|
http_version:
|
261
|
-
recorded_at:
|
275
|
+
recorded_at: Mon, 14 Mar 2016 16:28:55 GMT
|
262
276
|
- request:
|
263
277
|
method: get
|
264
|
-
uri:
|
278
|
+
uri: https://api-fxpractice.oanda.com/v1/prices?instruments=EUR_USD
|
265
279
|
body:
|
266
280
|
encoding: US-ASCII
|
267
281
|
string: ''
|
268
282
|
headers:
|
269
283
|
X-Accept-Datetime-Format:
|
270
284
|
- RFC3339
|
285
|
+
Authorization:
|
286
|
+
- Bearer <OANDA_TESTING_API_TOKEN>
|
271
287
|
Connection:
|
272
288
|
- keep-alive
|
273
289
|
Keep-Alive:
|
@@ -280,7 +296,7 @@ http_interactions:
|
|
280
296
|
Server:
|
281
297
|
- openresty/1.7.0.1
|
282
298
|
Date:
|
283
|
-
-
|
299
|
+
- Mon, 14 Mar 2016 16:28:56 GMT
|
284
300
|
Content-Type:
|
285
301
|
- application/json
|
286
302
|
Content-Length:
|
@@ -288,23 +304,25 @@ http_interactions:
|
|
288
304
|
Connection:
|
289
305
|
- keep-alive
|
290
306
|
Etag:
|
291
|
-
- '"
|
307
|
+
- '"50c652cb079cb183ec34718d3760fd9f07cd9948"'
|
292
308
|
body:
|
293
309
|
encoding: UTF-8
|
294
310
|
string: "{\n\t\"prices\" : [\n\t\t{\n\t\t\t\"instrument\" : \"EUR_USD\",\n\t\t\t\"time\"
|
295
|
-
: \"
|
296
|
-
: 1.
|
311
|
+
: \"2016-03-14T16:28:49.214000Z\",\n\t\t\t\"bid\" : 1.11104,\n\t\t\t\"ask\"
|
312
|
+
: 1.11118\n\t\t}\n\t]\n}"
|
297
313
|
http_version:
|
298
|
-
recorded_at:
|
314
|
+
recorded_at: Mon, 14 Mar 2016 16:28:56 GMT
|
299
315
|
- request:
|
300
316
|
method: get
|
301
|
-
uri:
|
317
|
+
uri: https://api-fxpractice.oanda.com/v1/prices?instruments=EUR_USD
|
302
318
|
body:
|
303
319
|
encoding: US-ASCII
|
304
320
|
string: ''
|
305
321
|
headers:
|
306
322
|
X-Accept-Datetime-Format:
|
307
323
|
- RFC3339
|
324
|
+
Authorization:
|
325
|
+
- Bearer <OANDA_TESTING_API_TOKEN>
|
308
326
|
Connection:
|
309
327
|
- keep-alive
|
310
328
|
Keep-Alive:
|
@@ -317,7 +335,7 @@ http_interactions:
|
|
317
335
|
Server:
|
318
336
|
- openresty/1.7.0.1
|
319
337
|
Date:
|
320
|
-
-
|
338
|
+
- Mon, 14 Mar 2016 16:28:58 GMT
|
321
339
|
Content-Type:
|
322
340
|
- application/json
|
323
341
|
Content-Length:
|
@@ -325,23 +343,25 @@ http_interactions:
|
|
325
343
|
Connection:
|
326
344
|
- keep-alive
|
327
345
|
Etag:
|
328
|
-
- '"
|
346
|
+
- '"50c652cb079cb183ec34718d3760fd9f07cd9948"'
|
329
347
|
body:
|
330
348
|
encoding: UTF-8
|
331
349
|
string: "{\n\t\"prices\" : [\n\t\t{\n\t\t\t\"instrument\" : \"EUR_USD\",\n\t\t\t\"time\"
|
332
|
-
: \"
|
333
|
-
: 1.
|
350
|
+
: \"2016-03-14T16:28:49.214000Z\",\n\t\t\t\"bid\" : 1.11104,\n\t\t\t\"ask\"
|
351
|
+
: 1.11118\n\t\t}\n\t]\n}"
|
334
352
|
http_version:
|
335
|
-
recorded_at:
|
353
|
+
recorded_at: Mon, 14 Mar 2016 16:28:57 GMT
|
336
354
|
- request:
|
337
355
|
method: get
|
338
|
-
uri:
|
356
|
+
uri: https://api-fxpractice.oanda.com/v1/prices?instruments=EUR_USD
|
339
357
|
body:
|
340
358
|
encoding: US-ASCII
|
341
359
|
string: ''
|
342
360
|
headers:
|
343
361
|
X-Accept-Datetime-Format:
|
344
362
|
- RFC3339
|
363
|
+
Authorization:
|
364
|
+
- Bearer <OANDA_TESTING_API_TOKEN>
|
345
365
|
Connection:
|
346
366
|
- keep-alive
|
347
367
|
Keep-Alive:
|
@@ -354,7 +374,7 @@ http_interactions:
|
|
354
374
|
Server:
|
355
375
|
- openresty/1.7.0.1
|
356
376
|
Date:
|
357
|
-
-
|
377
|
+
- Mon, 14 Mar 2016 16:28:59 GMT
|
358
378
|
Content-Type:
|
359
379
|
- application/json
|
360
380
|
Content-Length:
|
@@ -362,12 +382,12 @@ http_interactions:
|
|
362
382
|
Connection:
|
363
383
|
- keep-alive
|
364
384
|
Etag:
|
365
|
-
- '"
|
385
|
+
- '"50c652cb079cb183ec34718d3760fd9f07cd9948"'
|
366
386
|
body:
|
367
387
|
encoding: UTF-8
|
368
388
|
string: "{\n\t\"prices\" : [\n\t\t{\n\t\t\t\"instrument\" : \"EUR_USD\",\n\t\t\t\"time\"
|
369
|
-
: \"
|
370
|
-
: 1.
|
389
|
+
: \"2016-03-14T16:28:49.214000Z\",\n\t\t\t\"bid\" : 1.11104,\n\t\t\t\"ask\"
|
390
|
+
: 1.11118\n\t\t}\n\t]\n}"
|
371
391
|
http_version:
|
372
|
-
recorded_at:
|
373
|
-
recorded_with: VCR
|
392
|
+
recorded_at: Mon, 14 Mar 2016 16:28:58 GMT
|
393
|
+
recorded_with: VCR 3.0.1
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'uri'
|
3
3
|
require 'webmock/rspec'
|
4
|
+
require 'support/client_helper'
|
4
5
|
|
5
6
|
describe "OandaAPI::Client" do
|
6
7
|
describe ".query_string_normalizer" do
|
@@ -66,16 +67,28 @@ describe "OandaAPI::Client" do
|
|
66
67
|
end
|
67
68
|
expect(OandaAPI::Client.last_throttled_at).to be > before_throttled_at
|
68
69
|
end
|
70
|
+
it "tracks the time the last request was issued" do
|
71
|
+
OandaAPI.configuration.use_request_throttling = true
|
72
|
+
before_throttled_at = Time.now
|
73
|
+
(OandaAPI.configuration.max_requests_per_second + 2).times do
|
74
|
+
OandaAPI::Client.throttle_request_rate
|
75
|
+
end
|
76
|
+
expect(OandaAPI::Client.last_request_at).to be > before_throttled_at
|
77
|
+
|
78
|
+
end
|
79
|
+
|
69
80
|
end
|
70
81
|
end
|
71
82
|
|
72
83
|
describe "#api_uri" do
|
73
84
|
let(:client) { Struct.new(:domain) { include OandaAPI::Client }.new }
|
85
|
+
let(:resource_descriptor) {OandaAPI::Client::ResourceDescriptor.new "/accounts", :get}
|
86
|
+
|
74
87
|
it "is domain specific" do
|
75
88
|
uris = {}
|
76
89
|
OandaAPI::DOMAINS.each do |domain|
|
77
90
|
client.domain = domain
|
78
|
-
uris[client.api_uri(
|
91
|
+
uris[client.api_uri(resource_descriptor)] = domain
|
79
92
|
end
|
80
93
|
expect(uris.size).to eq(3)
|
81
94
|
end
|
@@ -83,7 +96,7 @@ describe "OandaAPI::Client" do
|
|
83
96
|
it "is an absolute URI" do
|
84
97
|
OandaAPI::DOMAINS.each do |domain|
|
85
98
|
client.domain = domain
|
86
|
-
uri = URI.parse client.api_uri(
|
99
|
+
uri = URI.parse client.api_uri(resource_descriptor)
|
87
100
|
expect(uri.absolute?).to be true
|
88
101
|
end
|
89
102
|
end
|
@@ -93,7 +106,7 @@ describe "OandaAPI::Client" do
|
|
93
106
|
let(:client) { (Class.new { include OandaAPI::Client }).new }
|
94
107
|
|
95
108
|
it "is called by the constructor of an including class" do
|
96
|
-
OandaAPI::Client.default_options[:connection_adapter] = nil
|
109
|
+
OandaAPI::Client.default_options[:connection_adapter] = nil
|
97
110
|
expect(OandaAPI::Client.default_options[:connection_adapter]).to be_nil
|
98
111
|
|
99
112
|
klass = Class.new { include OandaAPI::Client }
|
@@ -104,30 +117,30 @@ describe "OandaAPI::Client" do
|
|
104
117
|
expect(OandaAPI::Client.default_options[:connection_adapter_options][:keep_alive]).to eq 20
|
105
118
|
end
|
106
119
|
|
107
|
-
it "loads a persistent connection adapter" do
|
108
|
-
OandaAPI::Client.default_options[:connection_adapter] = nil
|
120
|
+
it "loads a persistent connection adapter" do
|
121
|
+
OandaAPI::Client.default_options[:connection_adapter] = nil
|
109
122
|
expect(OandaAPI::Client.default_options[:connection_adapter]).to be_nil
|
110
123
|
client.load_persistent_connection_adapter keep_alive: 30
|
111
124
|
expect(OandaAPI::Client.default_options[:connection_adapter]).to be_a HTTParty::Persistent::ConnectionAdapter
|
112
125
|
end
|
113
126
|
|
114
|
-
it "overrides a persistent connection adapter settings" do
|
127
|
+
it "overrides a persistent connection adapter settings" do
|
115
128
|
client.load_persistent_connection_adapter pool_size: OandaAPI.configuration.connection_pool_size + 1
|
116
129
|
expect(OandaAPI::Client.default_options[:connection_adapter_options][:pool_size]).to eq OandaAPI.configuration.connection_pool_size + 1
|
117
130
|
end
|
118
131
|
end
|
119
|
-
|
132
|
+
|
120
133
|
describe "#execute_request" do
|
121
|
-
let(:client) {
|
134
|
+
let(:client) { ClientHelper.client }
|
122
135
|
|
123
136
|
it "returns a response for a successful request" do
|
124
|
-
stub_request(:get, "
|
137
|
+
stub_request(:get, "https://api-fxpractice.oanda.com/v1/accounts")
|
125
138
|
.to_return(status: 200, body: "{\"accounts\" : []}", headers: { "content-type" => "application/json" })
|
126
139
|
expect(client.execute_request(:get, "/accounts")).to be_an OandaAPI::ResourceCollection
|
127
140
|
end
|
128
141
|
|
129
142
|
it "raises OandaAPI::RequestError for an invalid request" do
|
130
|
-
stub_request(:get, "
|
143
|
+
stub_request(:get, "https://api-fxpractice.oanda.com/v1/accounts/a_bad_request")
|
131
144
|
.to_return(status: [404, "Something bad happened (but we still love you)."])
|
132
145
|
expect { client.execute_request :get, "/accounts/a_bad_request" }.to raise_error(OandaAPI::RequestError)
|
133
146
|
end
|