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
@@ -29,11 +29,12 @@ describe "OandaAPI::Streaming::Client" do
|
|
29
29
|
|
30
30
|
describe "#api_uri" do
|
31
31
|
let(:client) { Struct.new(:domain) { include OandaAPI::Client }.new }
|
32
|
+
let(:resource_descriptor) {OandaAPI::Client::ResourceDescriptor.new "/accounts", :get}
|
32
33
|
it "is domain specific" do
|
33
34
|
uris = {}
|
34
35
|
OandaAPI::DOMAINS.each do |domain|
|
35
36
|
client.domain = domain
|
36
|
-
uris[client.api_uri(
|
37
|
+
uris[client.api_uri(resource_descriptor)] = domain
|
37
38
|
end
|
38
39
|
expect(uris.size).to eq(3)
|
39
40
|
end
|
@@ -41,7 +42,7 @@ describe "OandaAPI::Streaming::Client" do
|
|
41
42
|
it "is an absolute URI" do
|
42
43
|
OandaAPI::DOMAINS.each do |domain|
|
43
44
|
client.domain = domain
|
44
|
-
uri = URI.parse client.api_uri(
|
45
|
+
uri = URI.parse client.api_uri(resource_descriptor)
|
45
46
|
expect(uri.absolute?).to be true
|
46
47
|
end
|
47
48
|
end
|
@@ -73,6 +74,33 @@ describe "OandaAPI::Streaming::Client" do
|
|
73
74
|
expect(client.emit_heartbeats?).to be value
|
74
75
|
end
|
75
76
|
end
|
77
|
+
|
78
|
+
it "includes heartbeats when true" do
|
79
|
+
events_json = <<-END
|
80
|
+
{"heartbeat":{"time":"2014-05-26T13:58:40Z"}}\r\n
|
81
|
+
{"transaction":{"id":10001}}\r\n
|
82
|
+
{"transaction":{"id":10002}}
|
83
|
+
END
|
84
|
+
|
85
|
+
client = OandaAPI::Streaming::Client.new(:practice, "token")
|
86
|
+
stub_request(:get, "https://stream-fxpractice.oanda.com/v1/events").to_return(body: events_json, status: 200)
|
87
|
+
|
88
|
+
[{emit_heartbeats: true, heartbeats: 1, non_heartbeats: 2},
|
89
|
+
{emit_heartbeats: false, heartbeats: 0, non_heartbeats: 2}].each do |test|
|
90
|
+
|
91
|
+
client.emit_heartbeats = test[:emit_heartbeats]
|
92
|
+
heartbeats = non_heartbeats = 0
|
93
|
+
client.events.stream do |resource|
|
94
|
+
if resource.is_a? OandaAPI::Resource::Heartbeat
|
95
|
+
heartbeats += 1
|
96
|
+
else
|
97
|
+
non_heartbeats += 1
|
98
|
+
end
|
99
|
+
end
|
100
|
+
expect(heartbeats).to eq test[:heartbeats]
|
101
|
+
expect(non_heartbeats).to eq test[:non_heartbeats]
|
102
|
+
end
|
103
|
+
end
|
76
104
|
end
|
77
105
|
|
78
106
|
describe "headers" do
|
data/spec/spec_helper.rb
CHANGED
@@ -12,7 +12,7 @@ require 'oanda_api'
|
|
12
12
|
RSpec.configure do |c|
|
13
13
|
c.before(:suite) do
|
14
14
|
# Disable request throttling because all examples are stubbed with VCR and webmock.
|
15
|
-
|
15
|
+
OandaAPI.configure { |config| config.use_request_throttling = false }
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
@@ -1,22 +1,55 @@
|
|
1
1
|
require 'support/vcr'
|
2
|
+
|
2
3
|
module ClientHelper
|
3
|
-
# Returns a
|
4
|
+
# Returns a practice API client
|
4
5
|
def self.client
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
@client ||= OandaAPI::Client::TokenClient.new :practice, test_account_token
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.test_account_token
|
10
|
+
ENV.fetch("OANDA_API_TESTING_TOKEN") do
|
11
|
+
fail(ArgumentError, <<-END
|
12
|
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
13
|
+
+ Missing Authentication Token for testing. +
|
14
|
+
+ +
|
15
|
+
+ A test you are running is attempting to create a new +
|
16
|
+
+ testing fixture by making an API request to the Oanda +
|
17
|
+
+ Practice API. Normally this is ONLY required when adding +
|
18
|
+
+ a new API endpoint. Running existing tests do not require +
|
19
|
+
+ this. +
|
20
|
+
+ +
|
21
|
+
+ To create new VCR cassette fixtures for the test suite: +
|
22
|
+
+ 1. You need to have an Oanda Practice account. (See: +
|
23
|
+
+ https://fxtrade.oanda.com/your_account/fxtrade/register/) +
|
24
|
+
+ 2. Define OANDA_API_TESTING_TOKEN as an environment +
|
25
|
+
+ variable, setting its value to the authentication +
|
26
|
+
+ token for your Oanda Practice account. +
|
27
|
+
+ 3. Run the tests. You can examine the VCR test fixures +
|
28
|
+
+ that were created in /spec/fixtures/vcr_cassettes. +
|
29
|
+
+ There will not be any reference to your authentication +
|
30
|
+
+ token in the fixture. +
|
31
|
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
32
|
+
END
|
33
|
+
)
|
9
34
|
end
|
10
35
|
end
|
11
36
|
|
12
|
-
#
|
13
|
-
def self.
|
14
|
-
VCR.use_cassette("
|
15
|
-
|
16
|
-
ClientHelper.client.account(account_id)
|
37
|
+
# A collection of accounts
|
38
|
+
def self.accounts
|
39
|
+
VCR.use_cassette("client_helper_accounts") do
|
40
|
+
ClientHelper.client.accounts.get
|
17
41
|
end
|
18
42
|
end
|
19
43
|
|
44
|
+
# Returns an account namespace for the client
|
45
|
+
def self.account
|
46
|
+
client.account(accounts.first.account_id)
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.account_id
|
50
|
+
accounts.first.account_id
|
51
|
+
end
|
52
|
+
|
20
53
|
# Creates a trade
|
21
54
|
def self.create_trade(instrument: "USD_JPY",
|
22
55
|
type: "market",
|
@@ -41,6 +74,7 @@ module ClientHelper
|
|
41
74
|
else
|
42
75
|
fail ArgumentError, "invalid order type: #{type}"
|
43
76
|
end
|
77
|
+
|
44
78
|
account.order(opts).create
|
45
79
|
end
|
46
80
|
|
@@ -48,7 +82,7 @@ module ClientHelper
|
|
48
82
|
|
49
83
|
# Returns a lightweight instrument object
|
50
84
|
def self.instrument(instrument)
|
51
|
-
VCR.use_cassette("
|
85
|
+
VCR.use_cassette("instrument_#{instrument}") do
|
52
86
|
price = ClientHelper.client.prices(instruments: instrument).get.first
|
53
87
|
o = Struct.new(:instrument, :bid, :ask).new
|
54
88
|
o.instrument = instrument
|
data/spec/support/vcr.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oanda_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dean Missikowski
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-03-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -78,28 +78,28 @@ dependencies:
|
|
78
78
|
requirements:
|
79
79
|
- - "~>"
|
80
80
|
- !ruby/object:Gem::Version
|
81
|
-
version: '
|
81
|
+
version: '3.0'
|
82
82
|
type: :development
|
83
83
|
prerelease: false
|
84
84
|
version_requirements: !ruby/object:Gem::Requirement
|
85
85
|
requirements:
|
86
86
|
- - "~>"
|
87
87
|
- !ruby/object:Gem::Version
|
88
|
-
version: '
|
88
|
+
version: '3.0'
|
89
89
|
- !ruby/object:Gem::Dependency
|
90
90
|
name: webmock
|
91
91
|
requirement: !ruby/object:Gem::Requirement
|
92
92
|
requirements:
|
93
93
|
- - "~>"
|
94
94
|
- !ruby/object:Gem::Version
|
95
|
-
version: '1.
|
95
|
+
version: '1.24'
|
96
96
|
type: :development
|
97
97
|
prerelease: false
|
98
98
|
version_requirements: !ruby/object:Gem::Requirement
|
99
99
|
requirements:
|
100
100
|
- - "~>"
|
101
101
|
- !ruby/object:Gem::Version
|
102
|
-
version: '1.
|
102
|
+
version: '1.24'
|
103
103
|
- !ruby/object:Gem::Dependency
|
104
104
|
name: yard
|
105
105
|
requirement: !ruby/object:Gem::Requirement
|
@@ -144,6 +144,8 @@ files:
|
|
144
144
|
- lib/oanda_api/resource/candle.rb
|
145
145
|
- lib/oanda_api/resource/heartbeat.rb
|
146
146
|
- lib/oanda_api/resource/instrument.rb
|
147
|
+
- lib/oanda_api/resource/labs/calendar_event.rb
|
148
|
+
- lib/oanda_api/resource/labs/spread_history.rb
|
147
149
|
- lib/oanda_api/resource/order.rb
|
148
150
|
- lib/oanda_api/resource/position.rb
|
149
151
|
- lib/oanda_api/resource/price.rb
|
@@ -162,32 +164,37 @@ files:
|
|
162
164
|
- lib/oanda_api/utils/utils.rb
|
163
165
|
- lib/oanda_api/version.rb
|
164
166
|
- oanda_api.gemspec
|
165
|
-
- spec/fixtures/vcr_cassettes/account_id_order_id_close.yml
|
166
|
-
- spec/fixtures/vcr_cassettes/account_id_order_id_get.yml
|
167
|
-
- spec/fixtures/vcr_cassettes/account_id_order_options_create.yml
|
168
|
-
- spec/fixtures/vcr_cassettes/account_id_order_options_update.yml
|
169
|
-
- spec/fixtures/vcr_cassettes/account_id_orders_get.yml
|
170
|
-
- spec/fixtures/vcr_cassettes/account_id_orders_options_get.yml
|
171
|
-
- spec/fixtures/vcr_cassettes/account_id_positions_get.yml
|
172
|
-
- spec/fixtures/vcr_cassettes/account_id_positions_instrument_close.yml
|
173
|
-
- spec/fixtures/vcr_cassettes/account_id_positions_instrument_get.yml
|
174
|
-
- spec/fixtures/vcr_cassettes/account_id_trade_id_close.yml
|
175
|
-
- spec/fixtures/vcr_cassettes/account_id_trade_id_get.yml
|
176
|
-
- spec/fixtures/vcr_cassettes/account_id_trade_options_modify.yml
|
177
|
-
- spec/fixtures/vcr_cassettes/account_id_trades_filter_get.yml
|
178
|
-
- spec/fixtures/vcr_cassettes/account_id_trades_get.yml
|
179
|
-
- spec/fixtures/vcr_cassettes/account_id_transaction_id_get.yml
|
180
|
-
- spec/fixtures/vcr_cassettes/account_id_transactions_options_get.yml
|
181
|
-
- spec/fixtures/vcr_cassettes/accounts_create.yml
|
182
167
|
- spec/fixtures/vcr_cassettes/accounts_get.yml
|
183
168
|
- spec/fixtures/vcr_cassettes/accounts_id_get.yml
|
169
|
+
- spec/fixtures/vcr_cassettes/calendar_events_period_get.yml
|
170
|
+
- spec/fixtures/vcr_cassettes/calendar_instrument_and_period_get.yml
|
171
|
+
- spec/fixtures/vcr_cassettes/calendar_period_get.yml
|
184
172
|
- spec/fixtures/vcr_cassettes/candles_options_get.yml
|
173
|
+
- spec/fixtures/vcr_cassettes/client_helper_account.yml
|
174
|
+
- spec/fixtures/vcr_cassettes/client_helper_accounts.yml
|
175
|
+
- spec/fixtures/vcr_cassettes/instrument_EUR_USD.yml
|
176
|
+
- spec/fixtures/vcr_cassettes/instrument_USD_JPY.yml
|
185
177
|
- spec/fixtures/vcr_cassettes/instruments_get.yml
|
186
178
|
- spec/fixtures/vcr_cassettes/instruments_options_get.yml
|
179
|
+
- spec/fixtures/vcr_cassettes/order_id_close.yml
|
180
|
+
- spec/fixtures/vcr_cassettes/order_id_get.yml
|
181
|
+
- spec/fixtures/vcr_cassettes/order_options_create.yml
|
182
|
+
- spec/fixtures/vcr_cassettes/order_options_update.yml
|
183
|
+
- spec/fixtures/vcr_cassettes/orders_get.yml
|
184
|
+
- spec/fixtures/vcr_cassettes/orders_options_get.yml
|
185
|
+
- spec/fixtures/vcr_cassettes/positions_get.yml
|
186
|
+
- spec/fixtures/vcr_cassettes/positions_instrument_close.yml
|
187
|
+
- spec/fixtures/vcr_cassettes/positions_instrument_get.yml
|
187
188
|
- spec/fixtures/vcr_cassettes/prices_options_get.yml
|
188
|
-
- spec/fixtures/vcr_cassettes/
|
189
|
-
- spec/fixtures/vcr_cassettes/
|
190
|
-
- spec/fixtures/vcr_cassettes/
|
189
|
+
- spec/fixtures/vcr_cassettes/spread_history_get.yml
|
190
|
+
- spec/fixtures/vcr_cassettes/spreads_get.yml
|
191
|
+
- spec/fixtures/vcr_cassettes/trade_id_close.yml
|
192
|
+
- spec/fixtures/vcr_cassettes/trade_id_get.yml
|
193
|
+
- spec/fixtures/vcr_cassettes/trade_options_modify.yml
|
194
|
+
- spec/fixtures/vcr_cassettes/trades_filter_get.yml
|
195
|
+
- spec/fixtures/vcr_cassettes/trades_get.yml
|
196
|
+
- spec/fixtures/vcr_cassettes/transaction_id_get.yml
|
197
|
+
- spec/fixtures/vcr_cassettes/transactions_options_get.yml
|
191
198
|
- spec/fixtures/vcr_cassettes/with_throttling_and_max_requests_per_second.yml
|
192
199
|
- spec/fixtures/vcr_cassettes/with_throttling_with_multiple_threads.yml
|
193
200
|
- spec/fixtures/vcr_cassettes/without_throttling.yml
|
@@ -196,13 +203,14 @@ files:
|
|
196
203
|
- spec/oanda_api/client/namespace_proxy_spec.rb
|
197
204
|
- spec/oanda_api/client/resource_descriptor_spec.rb
|
198
205
|
- spec/oanda_api/client/token_client_spec.rb
|
199
|
-
- spec/oanda_api/client/username_client_spec.rb
|
200
206
|
- spec/oanda_api/configuration_spec.rb
|
201
207
|
- spec/oanda_api/examples/accounts_spec.rb
|
208
|
+
- spec/oanda_api/examples/calendar_spec.rb
|
202
209
|
- spec/oanda_api/examples/orders_spec.rb
|
203
210
|
- spec/oanda_api/examples/positions_spec.rb
|
204
211
|
- spec/oanda_api/examples/rates_spec.rb
|
205
212
|
- spec/oanda_api/examples/request_throttling_spec.rb
|
213
|
+
- spec/oanda_api/examples/spread_history_spec.rb
|
206
214
|
- spec/oanda_api/examples/trades_spec.rb
|
207
215
|
- spec/oanda_api/examples/transactions_spec.rb
|
208
216
|
- spec/oanda_api/resource_base_spec.rb
|
@@ -238,37 +246,42 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
238
246
|
version: '0'
|
239
247
|
requirements: []
|
240
248
|
rubyforge_project:
|
241
|
-
rubygems_version: 2.
|
249
|
+
rubygems_version: 2.5.1
|
242
250
|
signing_key:
|
243
251
|
specification_version: 4
|
244
252
|
summary: A ruby client for the Oanda REST API.
|
245
253
|
test_files:
|
246
|
-
- spec/fixtures/vcr_cassettes/account_id_order_id_close.yml
|
247
|
-
- spec/fixtures/vcr_cassettes/account_id_order_id_get.yml
|
248
|
-
- spec/fixtures/vcr_cassettes/account_id_order_options_create.yml
|
249
|
-
- spec/fixtures/vcr_cassettes/account_id_order_options_update.yml
|
250
|
-
- spec/fixtures/vcr_cassettes/account_id_orders_get.yml
|
251
|
-
- spec/fixtures/vcr_cassettes/account_id_orders_options_get.yml
|
252
|
-
- spec/fixtures/vcr_cassettes/account_id_positions_get.yml
|
253
|
-
- spec/fixtures/vcr_cassettes/account_id_positions_instrument_close.yml
|
254
|
-
- spec/fixtures/vcr_cassettes/account_id_positions_instrument_get.yml
|
255
|
-
- spec/fixtures/vcr_cassettes/account_id_trade_id_close.yml
|
256
|
-
- spec/fixtures/vcr_cassettes/account_id_trade_id_get.yml
|
257
|
-
- spec/fixtures/vcr_cassettes/account_id_trade_options_modify.yml
|
258
|
-
- spec/fixtures/vcr_cassettes/account_id_trades_filter_get.yml
|
259
|
-
- spec/fixtures/vcr_cassettes/account_id_trades_get.yml
|
260
|
-
- spec/fixtures/vcr_cassettes/account_id_transaction_id_get.yml
|
261
|
-
- spec/fixtures/vcr_cassettes/account_id_transactions_options_get.yml
|
262
|
-
- spec/fixtures/vcr_cassettes/accounts_create.yml
|
263
254
|
- spec/fixtures/vcr_cassettes/accounts_get.yml
|
264
255
|
- spec/fixtures/vcr_cassettes/accounts_id_get.yml
|
256
|
+
- spec/fixtures/vcr_cassettes/calendar_events_period_get.yml
|
257
|
+
- spec/fixtures/vcr_cassettes/calendar_instrument_and_period_get.yml
|
258
|
+
- spec/fixtures/vcr_cassettes/calendar_period_get.yml
|
265
259
|
- spec/fixtures/vcr_cassettes/candles_options_get.yml
|
260
|
+
- spec/fixtures/vcr_cassettes/client_helper_account.yml
|
261
|
+
- spec/fixtures/vcr_cassettes/client_helper_accounts.yml
|
262
|
+
- spec/fixtures/vcr_cassettes/instrument_EUR_USD.yml
|
263
|
+
- spec/fixtures/vcr_cassettes/instrument_USD_JPY.yml
|
266
264
|
- spec/fixtures/vcr_cassettes/instruments_get.yml
|
267
265
|
- spec/fixtures/vcr_cassettes/instruments_options_get.yml
|
266
|
+
- spec/fixtures/vcr_cassettes/order_id_close.yml
|
267
|
+
- spec/fixtures/vcr_cassettes/order_id_get.yml
|
268
|
+
- spec/fixtures/vcr_cassettes/order_options_create.yml
|
269
|
+
- spec/fixtures/vcr_cassettes/order_options_update.yml
|
270
|
+
- spec/fixtures/vcr_cassettes/orders_get.yml
|
271
|
+
- spec/fixtures/vcr_cassettes/orders_options_get.yml
|
272
|
+
- spec/fixtures/vcr_cassettes/positions_get.yml
|
273
|
+
- spec/fixtures/vcr_cassettes/positions_instrument_close.yml
|
274
|
+
- spec/fixtures/vcr_cassettes/positions_instrument_get.yml
|
268
275
|
- spec/fixtures/vcr_cassettes/prices_options_get.yml
|
269
|
-
- spec/fixtures/vcr_cassettes/
|
270
|
-
- spec/fixtures/vcr_cassettes/
|
271
|
-
- spec/fixtures/vcr_cassettes/
|
276
|
+
- spec/fixtures/vcr_cassettes/spread_history_get.yml
|
277
|
+
- spec/fixtures/vcr_cassettes/spreads_get.yml
|
278
|
+
- spec/fixtures/vcr_cassettes/trade_id_close.yml
|
279
|
+
- spec/fixtures/vcr_cassettes/trade_id_get.yml
|
280
|
+
- spec/fixtures/vcr_cassettes/trade_options_modify.yml
|
281
|
+
- spec/fixtures/vcr_cassettes/trades_filter_get.yml
|
282
|
+
- spec/fixtures/vcr_cassettes/trades_get.yml
|
283
|
+
- spec/fixtures/vcr_cassettes/transaction_id_get.yml
|
284
|
+
- spec/fixtures/vcr_cassettes/transactions_options_get.yml
|
272
285
|
- spec/fixtures/vcr_cassettes/with_throttling_and_max_requests_per_second.yml
|
273
286
|
- spec/fixtures/vcr_cassettes/with_throttling_with_multiple_threads.yml
|
274
287
|
- spec/fixtures/vcr_cassettes/without_throttling.yml
|
@@ -277,13 +290,14 @@ test_files:
|
|
277
290
|
- spec/oanda_api/client/namespace_proxy_spec.rb
|
278
291
|
- spec/oanda_api/client/resource_descriptor_spec.rb
|
279
292
|
- spec/oanda_api/client/token_client_spec.rb
|
280
|
-
- spec/oanda_api/client/username_client_spec.rb
|
281
293
|
- spec/oanda_api/configuration_spec.rb
|
282
294
|
- spec/oanda_api/examples/accounts_spec.rb
|
295
|
+
- spec/oanda_api/examples/calendar_spec.rb
|
283
296
|
- spec/oanda_api/examples/orders_spec.rb
|
284
297
|
- spec/oanda_api/examples/positions_spec.rb
|
285
298
|
- spec/oanda_api/examples/rates_spec.rb
|
286
299
|
- spec/oanda_api/examples/request_throttling_spec.rb
|
300
|
+
- spec/oanda_api/examples/spread_history_spec.rb
|
287
301
|
- spec/oanda_api/examples/trades_spec.rb
|
288
302
|
- spec/oanda_api/examples/transactions_spec.rb
|
289
303
|
- spec/oanda_api/resource_base_spec.rb
|
@@ -1,264 +0,0 @@
|
|
1
|
-
---
|
2
|
-
http_interactions:
|
3
|
-
- request:
|
4
|
-
method: post
|
5
|
-
uri: http://api-sandbox.oanda.com/v1/accounts/5342358/orders
|
6
|
-
body:
|
7
|
-
encoding: UTF-8
|
8
|
-
string: expiry=2015-01-20T18%3A22%3A31%2B00%3A00&instrument=USD_JPY&price=1.14089&side=buy&type=limit&units=10000&username=dwaymotim
|
9
|
-
headers:
|
10
|
-
X-Accept-Datetime-Format:
|
11
|
-
- RFC3339
|
12
|
-
Connection:
|
13
|
-
- keep-alive
|
14
|
-
Keep-Alive:
|
15
|
-
- 30
|
16
|
-
response:
|
17
|
-
status:
|
18
|
-
code: 201
|
19
|
-
message: CREATED
|
20
|
-
headers:
|
21
|
-
Server:
|
22
|
-
- openresty/1.7.0.1
|
23
|
-
Date:
|
24
|
-
- Tue, 20 Jan 2015 17:22:28 GMT
|
25
|
-
Content-Type:
|
26
|
-
- application/json
|
27
|
-
Content-Length:
|
28
|
-
- '313'
|
29
|
-
Connection:
|
30
|
-
- keep-alive
|
31
|
-
Location:
|
32
|
-
- http://api-sandbox.oanda.com/v1/accounts/5342358/orders/175503913
|
33
|
-
body:
|
34
|
-
encoding: UTF-8
|
35
|
-
string: "{\n\t\"instrument\" : \"USD_JPY\",\n\t\"time\" : \"2015-01-20T17:22:28.000000Z\",\n\t\"price\"
|
36
|
-
: 1.14089,\n\t\"orderOpened\" : {\n\t\t\"id\" : 175503913,\n\t\t\"units\"
|
37
|
-
: 10000,\n\t\t\"side\" : \"buy\",\n\t\t\"takeProfit\" : 0,\n\t\t\"stopLoss\"
|
38
|
-
: 0,\n\t\t\"expiry\" : \"2015-01-20T18:22:31.000000Z\",\n\t\t\"upperBound\"
|
39
|
-
: 0,\n\t\t\"lowerBound\" : 0,\n\t\t\"trailingStop\" : 0\n\t}\n}"
|
40
|
-
http_version:
|
41
|
-
recorded_at: Tue, 20 Jan 2015 17:22:31 GMT
|
42
|
-
- request:
|
43
|
-
method: get
|
44
|
-
uri: http://api-sandbox.oanda.com/v1/accounts/5342358/orders?username=dwaymotim
|
45
|
-
body:
|
46
|
-
encoding: US-ASCII
|
47
|
-
string: ''
|
48
|
-
headers:
|
49
|
-
X-Accept-Datetime-Format:
|
50
|
-
- RFC3339
|
51
|
-
Connection:
|
52
|
-
- keep-alive
|
53
|
-
Keep-Alive:
|
54
|
-
- 30
|
55
|
-
response:
|
56
|
-
status:
|
57
|
-
code: 200
|
58
|
-
message: OK
|
59
|
-
headers:
|
60
|
-
Server:
|
61
|
-
- openresty/1.7.0.1
|
62
|
-
Date:
|
63
|
-
- Tue, 20 Jan 2015 17:22:28 GMT
|
64
|
-
Content-Type:
|
65
|
-
- application/json
|
66
|
-
Content-Length:
|
67
|
-
- '1683'
|
68
|
-
Connection:
|
69
|
-
- keep-alive
|
70
|
-
Etag:
|
71
|
-
- '"f7d8307f842f7716a831e277508d85f5338d2db4"'
|
72
|
-
X-Result-Count:
|
73
|
-
- '5'
|
74
|
-
body:
|
75
|
-
encoding: UTF-8
|
76
|
-
string: "{\n\t\"orders\" : [\n\t\t{\n\t\t\t\"id\" : 175503913,\n\t\t\t\"instrument\"
|
77
|
-
: \"USD_JPY\",\n\t\t\t\"units\" : 10000,\n\t\t\t\"side\" : \"buy\",\n\t\t\t\"type\"
|
78
|
-
: \"limit\",\n\t\t\t\"time\" : \"2015-01-20T17:22:28.000000Z\",\n\t\t\t\"price\"
|
79
|
-
: 1.14089,\n\t\t\t\"takeProfit\" : 0,\n\t\t\t\"stopLoss\" : 0,\n\t\t\t\"expiry\"
|
80
|
-
: \"2015-01-20T18:22:31.000000Z\",\n\t\t\t\"upperBound\" : 0,\n\t\t\t\"lowerBound\"
|
81
|
-
: 0,\n\t\t\t\"trailingStop\" : 0\n\t\t},\n\t\t{\n\t\t\t\"id\" : 175503911,\n\t\t\t\"instrument\"
|
82
|
-
: \"USD_JPY\",\n\t\t\t\"units\" : 9000,\n\t\t\t\"side\" : \"buy\",\n\t\t\t\"type\"
|
83
|
-
: \"limit\",\n\t\t\t\"time\" : \"2015-01-20T17:22:28.000000Z\",\n\t\t\t\"price\"
|
84
|
-
: 1.14089,\n\t\t\t\"takeProfit\" : 0,\n\t\t\t\"stopLoss\" : 0,\n\t\t\t\"expiry\"
|
85
|
-
: \"2015-01-20T18:22:30.000000Z\",\n\t\t\t\"upperBound\" : 0,\n\t\t\t\"lowerBound\"
|
86
|
-
: 0,\n\t\t\t\"trailingStop\" : 0\n\t\t},\n\t\t{\n\t\t\t\"id\" : 175503910,\n\t\t\t\"instrument\"
|
87
|
-
: \"USD_JPY\",\n\t\t\t\"units\" : 10000,\n\t\t\t\"side\" : \"buy\",\n\t\t\t\"type\"
|
88
|
-
: \"limit\",\n\t\t\t\"time\" : \"2015-01-20T17:22:28.000000Z\",\n\t\t\t\"price\"
|
89
|
-
: 1.14089,\n\t\t\t\"takeProfit\" : 0,\n\t\t\t\"stopLoss\" : 0,\n\t\t\t\"expiry\"
|
90
|
-
: \"2015-01-20T18:22:30.000000Z\",\n\t\t\t\"upperBound\" : 0,\n\t\t\t\"lowerBound\"
|
91
|
-
: 0,\n\t\t\t\"trailingStop\" : 0\n\t\t},\n\t\t{\n\t\t\t\"id\" : 175503909,\n\t\t\t\"instrument\"
|
92
|
-
: \"USD_JPY\",\n\t\t\t\"units\" : 10000,\n\t\t\t\"side\" : \"buy\",\n\t\t\t\"type\"
|
93
|
-
: \"limit\",\n\t\t\t\"time\" : \"2015-01-20T17:22:28.000000Z\",\n\t\t\t\"price\"
|
94
|
-
: 1.14089,\n\t\t\t\"takeProfit\" : 0,\n\t\t\t\"stopLoss\" : 0,\n\t\t\t\"expiry\"
|
95
|
-
: \"2015-01-20T18:22:30.000000Z\",\n\t\t\t\"upperBound\" : 0,\n\t\t\t\"lowerBound\"
|
96
|
-
: 0,\n\t\t\t\"trailingStop\" : 0\n\t\t},\n\t\t{\n\t\t\t\"id\" : 175503908,\n\t\t\t\"instrument\"
|
97
|
-
: \"USD_JPY\",\n\t\t\t\"units\" : 10000,\n\t\t\t\"side\" : \"buy\",\n\t\t\t\"type\"
|
98
|
-
: \"limit\",\n\t\t\t\"time\" : \"2015-01-20T17:22:27.000000Z\",\n\t\t\t\"price\"
|
99
|
-
: 1.14089,\n\t\t\t\"takeProfit\" : 0,\n\t\t\t\"stopLoss\" : 0,\n\t\t\t\"expiry\"
|
100
|
-
: \"2015-01-20T18:22:30.000000Z\",\n\t\t\t\"upperBound\" : 0,\n\t\t\t\"lowerBound\"
|
101
|
-
: 0,\n\t\t\t\"trailingStop\" : 0\n\t\t}\n\t]\n}"
|
102
|
-
http_version:
|
103
|
-
recorded_at: Tue, 20 Jan 2015 17:22:31 GMT
|
104
|
-
- request:
|
105
|
-
method: delete
|
106
|
-
uri: http://api-sandbox.oanda.com/v1/accounts/5342358/orders/175503913?username=dwaymotim
|
107
|
-
body:
|
108
|
-
encoding: US-ASCII
|
109
|
-
string: ''
|
110
|
-
headers:
|
111
|
-
X-Accept-Datetime-Format:
|
112
|
-
- RFC3339
|
113
|
-
Connection:
|
114
|
-
- keep-alive
|
115
|
-
Keep-Alive:
|
116
|
-
- 30
|
117
|
-
response:
|
118
|
-
status:
|
119
|
-
code: 200
|
120
|
-
message: OK
|
121
|
-
headers:
|
122
|
-
Server:
|
123
|
-
- openresty/1.7.0.1
|
124
|
-
Date:
|
125
|
-
- Tue, 20 Jan 2015 17:22:29 GMT
|
126
|
-
Content-Type:
|
127
|
-
- application/json
|
128
|
-
Content-Length:
|
129
|
-
- '166'
|
130
|
-
Connection:
|
131
|
-
- keep-alive
|
132
|
-
body:
|
133
|
-
encoding: UTF-8
|
134
|
-
string: "{\n\t\"id\" : 175503913,\n\t\"instrument\" : \"USD_JPY\",\n\t\"units\"
|
135
|
-
: 10000,\n\t\"side\" : \"buy\",\n\t\"price\" : 1.14089,\n\t\"time\" : \"2015-01-20T17:22:29.000000Z\",\n\t\"type\"
|
136
|
-
: \"BuyLimit\"\n}"
|
137
|
-
http_version:
|
138
|
-
recorded_at: Tue, 20 Jan 2015 17:22:31 GMT
|
139
|
-
- request:
|
140
|
-
method: get
|
141
|
-
uri: http://api-sandbox.oanda.com/v1/accounts/5342358/orders?username=dwaymotim
|
142
|
-
body:
|
143
|
-
encoding: US-ASCII
|
144
|
-
string: ''
|
145
|
-
headers:
|
146
|
-
X-Accept-Datetime-Format:
|
147
|
-
- RFC3339
|
148
|
-
Connection:
|
149
|
-
- keep-alive
|
150
|
-
Keep-Alive:
|
151
|
-
- 30
|
152
|
-
response:
|
153
|
-
status:
|
154
|
-
code: 200
|
155
|
-
message: OK
|
156
|
-
headers:
|
157
|
-
Server:
|
158
|
-
- openresty/1.7.0.1
|
159
|
-
Date:
|
160
|
-
- Tue, 20 Jan 2015 17:22:29 GMT
|
161
|
-
Content-Type:
|
162
|
-
- application/json
|
163
|
-
Content-Length:
|
164
|
-
- '1350'
|
165
|
-
Connection:
|
166
|
-
- keep-alive
|
167
|
-
Etag:
|
168
|
-
- '"16f3da3e5a0a8b39a957a4a071f276157154f4c6"'
|
169
|
-
X-Result-Count:
|
170
|
-
- '4'
|
171
|
-
body:
|
172
|
-
encoding: UTF-8
|
173
|
-
string: "{\n\t\"orders\" : [\n\t\t{\n\t\t\t\"id\" : 175503911,\n\t\t\t\"instrument\"
|
174
|
-
: \"USD_JPY\",\n\t\t\t\"units\" : 9000,\n\t\t\t\"side\" : \"buy\",\n\t\t\t\"type\"
|
175
|
-
: \"limit\",\n\t\t\t\"time\" : \"2015-01-20T17:22:28.000000Z\",\n\t\t\t\"price\"
|
176
|
-
: 1.14089,\n\t\t\t\"takeProfit\" : 0,\n\t\t\t\"stopLoss\" : 0,\n\t\t\t\"expiry\"
|
177
|
-
: \"2015-01-20T18:22:30.000000Z\",\n\t\t\t\"upperBound\" : 0,\n\t\t\t\"lowerBound\"
|
178
|
-
: 0,\n\t\t\t\"trailingStop\" : 0\n\t\t},\n\t\t{\n\t\t\t\"id\" : 175503910,\n\t\t\t\"instrument\"
|
179
|
-
: \"USD_JPY\",\n\t\t\t\"units\" : 10000,\n\t\t\t\"side\" : \"buy\",\n\t\t\t\"type\"
|
180
|
-
: \"limit\",\n\t\t\t\"time\" : \"2015-01-20T17:22:28.000000Z\",\n\t\t\t\"price\"
|
181
|
-
: 1.14089,\n\t\t\t\"takeProfit\" : 0,\n\t\t\t\"stopLoss\" : 0,\n\t\t\t\"expiry\"
|
182
|
-
: \"2015-01-20T18:22:30.000000Z\",\n\t\t\t\"upperBound\" : 0,\n\t\t\t\"lowerBound\"
|
183
|
-
: 0,\n\t\t\t\"trailingStop\" : 0\n\t\t},\n\t\t{\n\t\t\t\"id\" : 175503909,\n\t\t\t\"instrument\"
|
184
|
-
: \"USD_JPY\",\n\t\t\t\"units\" : 10000,\n\t\t\t\"side\" : \"buy\",\n\t\t\t\"type\"
|
185
|
-
: \"limit\",\n\t\t\t\"time\" : \"2015-01-20T17:22:28.000000Z\",\n\t\t\t\"price\"
|
186
|
-
: 1.14089,\n\t\t\t\"takeProfit\" : 0,\n\t\t\t\"stopLoss\" : 0,\n\t\t\t\"expiry\"
|
187
|
-
: \"2015-01-20T18:22:30.000000Z\",\n\t\t\t\"upperBound\" : 0,\n\t\t\t\"lowerBound\"
|
188
|
-
: 0,\n\t\t\t\"trailingStop\" : 0\n\t\t},\n\t\t{\n\t\t\t\"id\" : 175503908,\n\t\t\t\"instrument\"
|
189
|
-
: \"USD_JPY\",\n\t\t\t\"units\" : 10000,\n\t\t\t\"side\" : \"buy\",\n\t\t\t\"type\"
|
190
|
-
: \"limit\",\n\t\t\t\"time\" : \"2015-01-20T17:22:27.000000Z\",\n\t\t\t\"price\"
|
191
|
-
: 1.14089,\n\t\t\t\"takeProfit\" : 0,\n\t\t\t\"stopLoss\" : 0,\n\t\t\t\"expiry\"
|
192
|
-
: \"2015-01-20T18:22:30.000000Z\",\n\t\t\t\"upperBound\" : 0,\n\t\t\t\"lowerBound\"
|
193
|
-
: 0,\n\t\t\t\"trailingStop\" : 0\n\t\t}\n\t]\n}"
|
194
|
-
http_version:
|
195
|
-
recorded_at: Tue, 20 Jan 2015 17:22:31 GMT
|
196
|
-
- request:
|
197
|
-
method: post
|
198
|
-
uri: http://api-sandbox.oanda.com/v1//accounts/5342358/orders
|
199
|
-
body:
|
200
|
-
encoding: UTF-8
|
201
|
-
string: username=dwaymotim
|
202
|
-
headers:
|
203
|
-
X-Accept-Datetime-Format:
|
204
|
-
- RFC3339
|
205
|
-
Connection:
|
206
|
-
- keep-alive
|
207
|
-
Keep-Alive:
|
208
|
-
- 30
|
209
|
-
response:
|
210
|
-
status:
|
211
|
-
code: 400
|
212
|
-
message: BAD_REQUEST
|
213
|
-
headers:
|
214
|
-
Server:
|
215
|
-
- openresty/1.7.0.1
|
216
|
-
Date:
|
217
|
-
- Tue, 20 Jan 2015 21:03:07 GMT
|
218
|
-
Content-Type:
|
219
|
-
- application/json
|
220
|
-
Content-Length:
|
221
|
-
- '145'
|
222
|
-
Connection:
|
223
|
-
- keep-alive
|
224
|
-
body:
|
225
|
-
encoding: UTF-8
|
226
|
-
string: "{\n\t\"code\" : 2,\n\t\"message\" : \"Missing required argument: type\",\n\t\"moreInfo\"
|
227
|
-
: \"http:\\/\\/developer.oanda.com\\/docs\\/v1\\/troubleshooting\\/#errors\"\n}"
|
228
|
-
http_version:
|
229
|
-
recorded_at: Tue, 20 Jan 2015 21:03:07 GMT
|
230
|
-
- request:
|
231
|
-
method: delete
|
232
|
-
uri: http://api-sandbox.oanda.com/v1/accounts/5342358/orders/orders/175503913?username=dwaymotim
|
233
|
-
body:
|
234
|
-
encoding: US-ASCII
|
235
|
-
string: ''
|
236
|
-
headers:
|
237
|
-
X-Accept-Datetime-Format:
|
238
|
-
- RFC3339
|
239
|
-
Connection:
|
240
|
-
- keep-alive
|
241
|
-
Keep-Alive:
|
242
|
-
- 30
|
243
|
-
response:
|
244
|
-
status:
|
245
|
-
code: 400
|
246
|
-
message: BAD_REQUEST
|
247
|
-
headers:
|
248
|
-
Server:
|
249
|
-
- openresty/1.7.0.1
|
250
|
-
Date:
|
251
|
-
- Tue, 20 Jan 2015 23:53:33 GMT
|
252
|
-
Content-Type:
|
253
|
-
- application/json
|
254
|
-
Content-Length:
|
255
|
-
- '166'
|
256
|
-
Connection:
|
257
|
-
- keep-alive
|
258
|
-
body:
|
259
|
-
encoding: UTF-8
|
260
|
-
string: "{\n\t\"code\" : 52,\n\t\"message\" : \"Invalid or malformed resource
|
261
|
-
identifier: accountId\",\n\t\"moreInfo\" : \"http:\\/\\/developer.oanda.com\\/docs\\/v1\\/troubleshooting\\/#errors\"\n}"
|
262
|
-
http_version:
|
263
|
-
recorded_at: Tue, 20 Jan 2015 23:53:33 GMT
|
264
|
-
recorded_with: VCR 2.9.3
|