oanda_api 0.9.4 → 0.9.5

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.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +67 -6
  3. data/README.md +31 -3
  4. data/lib/oanda_api.rb +3 -1
  5. data/lib/oanda_api/client/client.rb +17 -12
  6. data/lib/oanda_api/client/namespace_proxy.rb +2 -2
  7. data/lib/oanda_api/client/resource_descriptor.rb +25 -9
  8. data/lib/oanda_api/client/username_client.rb +7 -0
  9. data/lib/oanda_api/configuration.rb +14 -0
  10. data/lib/oanda_api/resource/account.rb +22 -3
  11. data/lib/oanda_api/resource/candle.rb +1 -1
  12. data/lib/oanda_api/resource/labs/calendar_event.rb +25 -0
  13. data/lib/oanda_api/resource/labs/spread_history.rb +61 -0
  14. data/lib/oanda_api/resource/order.rb +4 -4
  15. data/lib/oanda_api/resource/transaction_history.rb +0 -1
  16. data/lib/oanda_api/resource_base.rb +64 -2
  17. data/lib/oanda_api/resource_collection.rb +6 -0
  18. data/lib/oanda_api/streaming/client.rb +1 -0
  19. data/lib/oanda_api/version.rb +1 -1
  20. data/oanda_api.gemspec +2 -2
  21. data/spec/fixtures/vcr_cassettes/accounts_get.yml +13 -79
  22. data/spec/fixtures/vcr_cassettes/accounts_id_get.yml +23 -125
  23. data/spec/fixtures/vcr_cassettes/calendar_events_period_get.yml +54 -0
  24. data/spec/fixtures/vcr_cassettes/calendar_instrument_and_period_get.yml +61 -0
  25. data/spec/fixtures/vcr_cassettes/calendar_period_get.yml +54 -0
  26. data/spec/fixtures/vcr_cassettes/candles_options_get.yml +9 -45
  27. data/spec/fixtures/vcr_cassettes/client_helper_account.yml +45 -0
  28. data/spec/fixtures/vcr_cassettes/client_helper_accounts.yml +45 -0
  29. data/spec/fixtures/vcr_cassettes/instrument_EUR_USD.yml +42 -0
  30. data/spec/fixtures/vcr_cassettes/instrument_USD_JPY.yml +42 -0
  31. data/spec/fixtures/vcr_cassettes/instruments_get.yml +37 -303
  32. data/spec/fixtures/vcr_cassettes/instruments_options_get.yml +6 -43
  33. data/spec/fixtures/vcr_cassettes/order_id_close.yml +448 -0
  34. data/spec/fixtures/vcr_cassettes/order_id_get.yml +84 -0
  35. data/spec/fixtures/vcr_cassettes/order_options_create.yml +42 -0
  36. data/spec/fixtures/vcr_cassettes/order_options_update.yml +82 -0
  37. data/spec/fixtures/vcr_cassettes/orders_get.yml +205 -0
  38. data/spec/fixtures/vcr_cassettes/orders_options_get.yml +120 -0
  39. data/spec/fixtures/vcr_cassettes/positions_get.yml +82 -0
  40. data/spec/fixtures/vcr_cassettes/positions_instrument_close.yml +154 -0
  41. data/spec/fixtures/vcr_cassettes/{account_id_order_options_create.yml → positions_instrument_get.yml} +24 -18
  42. data/spec/fixtures/vcr_cassettes/prices_options_get.yml +11 -48
  43. data/spec/fixtures/vcr_cassettes/spread_history_get.yml +53 -0
  44. data/spec/fixtures/vcr_cassettes/spreads_get.yml +53 -0
  45. data/spec/fixtures/vcr_cassettes/trade_id_close.yml +277 -0
  46. data/spec/fixtures/vcr_cassettes/trade_id_get.yml +82 -0
  47. data/spec/fixtures/vcr_cassettes/trade_options_modify.yml +80 -0
  48. data/spec/fixtures/vcr_cassettes/trades_filter_get.yml +90 -0
  49. data/spec/fixtures/vcr_cassettes/trades_get.yml +171 -0
  50. data/spec/fixtures/vcr_cassettes/transaction_id_get.yml +248 -0
  51. data/spec/fixtures/vcr_cassettes/transactions_options_get.yml +202 -0
  52. data/spec/fixtures/vcr_cassettes/with_throttling_and_max_requests_per_second.yml +25 -19
  53. data/spec/fixtures/vcr_cassettes/with_throttling_with_multiple_threads.yml +51 -39
  54. data/spec/fixtures/vcr_cassettes/without_throttling.yml +81 -61
  55. data/spec/oanda_api/client/client_spec.rb +23 -10
  56. data/spec/oanda_api/client/namespace_proxy_spec.rb +1 -1
  57. data/spec/oanda_api/client/resource_descriptor_spec.rb +45 -14
  58. data/spec/oanda_api/configuration_spec.rb +13 -0
  59. data/spec/oanda_api/examples/accounts_spec.rb +0 -7
  60. data/spec/oanda_api/examples/calendar_spec.rb +27 -0
  61. data/spec/oanda_api/examples/orders_spec.rb +12 -12
  62. data/spec/oanda_api/examples/positions_spec.rb +3 -3
  63. data/spec/oanda_api/examples/rates_spec.rb +4 -2
  64. data/spec/oanda_api/examples/spread_history_spec.rb +32 -0
  65. data/spec/oanda_api/examples/trades_spec.rb +5 -5
  66. data/spec/oanda_api/examples/transactions_spec.rb +2 -2
  67. data/spec/oanda_api/resource_base_spec.rb +48 -8
  68. data/spec/oanda_api/streaming/client_spec.rb +30 -2
  69. data/spec/spec_helper.rb +1 -1
  70. data/spec/support/client_helper.rb +45 -11
  71. data/spec/support/vcr.rb +1 -0
  72. metadata +63 -49
  73. data/spec/fixtures/vcr_cassettes/account_id_order_id_close.yml +0 -264
  74. data/spec/fixtures/vcr_cassettes/account_id_order_id_get.yml +0 -114
  75. data/spec/fixtures/vcr_cassettes/account_id_order_options_update.yml +0 -112
  76. data/spec/fixtures/vcr_cassettes/account_id_orders_get.yml +0 -118
  77. data/spec/fixtures/vcr_cassettes/account_id_orders_options_get.yml +0 -123
  78. data/spec/fixtures/vcr_cassettes/account_id_positions_get.yml +0 -112
  79. data/spec/fixtures/vcr_cassettes/account_id_positions_instrument_close.yml +0 -214
  80. data/spec/fixtures/vcr_cassettes/account_id_positions_instrument_get.yml +0 -110
  81. data/spec/fixtures/vcr_cassettes/account_id_trade_id_close.yml +0 -252
  82. data/spec/fixtures/vcr_cassettes/account_id_trade_id_get.yml +0 -112
  83. data/spec/fixtures/vcr_cassettes/account_id_trade_options_modify.yml +0 -110
  84. data/spec/fixtures/vcr_cassettes/account_id_trades_filter_get.yml +0 -118
  85. data/spec/fixtures/vcr_cassettes/account_id_trades_get.yml +0 -118
  86. data/spec/fixtures/vcr_cassettes/account_id_transaction_id_get.yml +0 -283
  87. data/spec/fixtures/vcr_cassettes/account_id_transactions_options_get.yml +0 -205
  88. data/spec/fixtures/vcr_cassettes/accounts_create.yml +0 -75
  89. data/spec/fixtures/vcr_cassettes/sandbox_client.yml +0 -116
  90. data/spec/fixtures/vcr_cassettes/sandbox_client_account.yml +0 -111
  91. data/spec/fixtures/vcr_cassettes/sandbox_instrument_EUR_USD.yml +0 -77
  92. data/spec/oanda_api/client/username_client_spec.rb +0 -31
@@ -16,7 +16,7 @@ module OandaAPI
16
16
 
17
17
  # Top of hour alignments
18
18
  M2 = "M2"
19
- M3 = "M3"
19
+ M3 = "M3"
20
20
  M4 = "M4"
21
21
  M5 = "M5"
22
22
  M10 = "M10"
@@ -0,0 +1,25 @@
1
+ module OandaAPI
2
+ module Resource
3
+ module Labs
4
+
5
+ # Calendar value object.
6
+ # See the Oanda Developer Guide for information about {http://developer.oanda.com/rest-live/forex-labs/#calendar Calendar}.
7
+ class CalendarEvent < ResourceBase
8
+ attr_accessor :actual,
9
+ :currency,
10
+ :forecast,
11
+ :impact,
12
+ :market,
13
+ :previous,
14
+ :region,
15
+ :timestamp,
16
+ :title,
17
+ :unit
18
+
19
+ def time
20
+ Time.at(timestamp).utc if timestamp
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,61 @@
1
+ module OandaAPI
2
+ module Resource
3
+ module Labs
4
+
5
+ # Spread value object.
6
+ # See the Oanda Developer Guide for information about {http://developer.oanda.com/rest-live/forex-labs/#spreads Spreads}.
7
+ class SpreadHistory < ResourceBase
8
+ attr_accessor :avg,
9
+ :max,
10
+ :min
11
+
12
+ alias_method :averages, :avg
13
+ alias_method :maximums, :max
14
+ alias_method :minimums, :min
15
+
16
+ def initialize(attributes = {})
17
+ attribs = attributes.dup
18
+ self.averages = attribs.delete(:avg) || []
19
+ self.maximums = attribs.delete(:max) || []
20
+ self.minimums = attribs.delete(:min) || []
21
+ super attribs
22
+ end
23
+
24
+ def averages=(array=[])
25
+ @avg = []
26
+ array.each { |elements| @avg << Tuple.new(*elements) }
27
+ end
28
+
29
+ def maximums=(array=[])
30
+ @max = []
31
+ array.each { |elements| @max << Tuple.new(*elements) }
32
+ end
33
+
34
+ def minimums=(array=[])
35
+ @min = []
36
+ array.each { |elements| @min << Tuple.new(*elements) }
37
+ end
38
+
39
+ # @private
40
+ class Tuple
41
+ attr_accessor :spread,
42
+ :time,
43
+ :timestamp
44
+
45
+ def initialize(timestamp, spread)
46
+ @timestamp = timestamp
47
+ @spread = spread
48
+ end
49
+
50
+ def time
51
+ Time.at(timestamp).utc if timestamp
52
+ end
53
+
54
+ def to_s
55
+ spread
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -23,10 +23,10 @@ module OandaAPI
23
23
 
24
24
  def initialize(attributes = {})
25
25
  attribs = attributes.dup
26
- self.order_opened = attribs.delete(order_opened) || {}
27
- self.trade_opened = attribs.delete(trade_opened) || {}
28
- self.trade_reduced = attribs.delete(trade_reduced) || {}
29
- self.trades_closed = attribs.delete(trades_closed) || []
26
+ self.order_opened = attribs.delete(:order_opened) || {}
27
+ self.trade_opened = attribs.delete(:trade_opened) || {}
28
+ self.trade_reduced = attribs.delete(:trade_reduced) || {}
29
+ self.trades_closed = attribs.delete(:trades_closed) || []
30
30
  super attribs
31
31
  end
32
32
 
@@ -3,7 +3,6 @@ module OandaAPI
3
3
  # Transactions History value object. Resource name in API: alltransactions.
4
4
  # See the Oanda Developer Guide for information about {http://developer.oanda.com/rest-live/transaction-history/ Transactions history}.
5
5
  class TransactionHistory < ResourceBase
6
-
7
6
  end
8
7
  end
9
8
  end
@@ -1,5 +1,6 @@
1
1
  module OandaAPI
2
2
  require 'json'
3
+
3
4
  # Base class for all Resources.
4
5
  #
5
6
  # @!attribute [rw] location
@@ -20,14 +21,63 @@ module OandaAPI
20
21
  @location = attributes.location if attributes.respond_to? :location
21
22
  end
22
23
 
23
- # Serializes an instance as JSON
24
+ # Serializes an instance as JSON.
24
25
  # @return [String] a stringified JSON representation of an instance
25
26
  def to_json(*args)
26
27
  JSON.generate @_attributes.merge(custom_attributes), *args
27
28
  end
28
29
 
30
+ # Returns the class of a Resource if klass_symbol is the name
31
+ # of a resource, otherwise nil.
32
+ #
33
+ # @example Example:
34
+ # ResourceBase.class_from_symbol(:transaction_history) => OandaAPI::Resource::TransactionHistory
35
+ # ResourceBase.class_from_symbol(:calendar_event) => OandaAPI::Resource::Labs::CalendarEvent
36
+ #
37
+ # @param [Symbol] resource_symbol symbolized resource name
38
+ #
39
+ # @return [Nil] if resource_symbol is not a Resource.
40
+ #
41
+ # @return [Class] if resource_symbol is identifies a Resource.
42
+ def self.class_from_symbol(resource_symbol)
43
+ descendant resource_symbol
44
+ end
45
+
46
+ # Tests whether a class is a Labs Resource.
47
+ #
48
+ # @param [Class] klass the class to be tested.
49
+ #
50
+ # @return [Boolean] True if the class is a Labs Resource.
51
+ def self.labs_resource?(klass)
52
+ (@lab_resources ||=[]).include? klass
53
+ end
54
+
55
+ # List of API resources that don't follow normal REST naming standards,
56
+ # and are not pluralized despite being collections.
57
+ NOT_PLURALIZED = [:calendar]
58
+
59
+ # Returns a pluralized version of the resource class name
60
+ # @param [Symbol] klass_symbol
61
+ # @return [String] the pluralized resource class name
62
+ def self.pluralize(klass_symbol)
63
+ NOT_PLURALIZED.include?(klass_symbol.to_sym) ? klass_symbol.to_s : OandaAPI::Utils.pluralize(klass_symbol)
64
+ end
65
+
29
66
  private
30
67
 
68
+ # @private
69
+ # Called whenever ResourceBase class is inherited by a descendant class.
70
+ # Used to track descendant classes.
71
+ # Used to identify classes within the "::Labs::" namespace.
72
+ def self.inherited(klass)
73
+ ResourceBase.inherited(klass) unless self == OandaAPI::ResourceBase
74
+ klass.to_s.match(/^(?<labs>(.*::)?Labs::)?(.*?)?(?<resource_name>(\w)+)$/) do |matched|
75
+ resource_symbol = OandaAPI::Utils.underscore(matched[:resource_name]).to_sym
76
+ (@descendants ||= {})[resource_symbol] = klass
77
+ (@lab_resources ||= []) << klass if matched[:labs]
78
+ end
79
+ end
80
+
31
81
  # @private
32
82
  # Initializes attributes.
33
83
  #
@@ -40,10 +90,22 @@ module OandaAPI
40
90
  end
41
91
  end
42
92
 
93
+ # @private
43
94
  # Provides additional attributes used in serialization.
44
- # @return [Hash] returns a hash of customized attributes for serialization
95
+ # @return [Hash] a hash of customized attributes for serialization
45
96
  def custom_attributes
46
97
  {}.tap { |hash| hash[:location] = location if location }
47
98
  end
99
+
100
+ # @private
101
+ # Returns a class name if klass_symbol is the name of a class that
102
+ # descends from {OandaAPI::ResourceBase}, otherwise nil.
103
+ # @param [Symbol] klass_symbol class name of a resource class
104
+ # @return [Class]
105
+ # @return [Nil] if klass_symbol is not a class that descends from
106
+ # {OandaAPI::ResourceBase}.
107
+ def self.descendant(klass_symbol)
108
+ (@descendants || {})[klass_symbol]
109
+ end
48
110
  end
49
111
  end
@@ -28,6 +28,12 @@ module OandaAPI
28
28
  # about the resource collection and its elements.
29
29
  def initialize(attributes, resource_descriptor)
30
30
  attributes = {} if attributes.nil? || attributes.respond_to?(:empty) && attributes.empty?
31
+ if attributes.kind_of?(Array)
32
+ h = {}
33
+ h["#{resource_descriptor.collection_name}".to_sym] = attributes
34
+ attributes = h
35
+ end
36
+
31
37
  fail ArgumentError, "Expecting a Hash" unless attributes.respond_to? :each_pair
32
38
  @attributes = Utils.rubyize_keys attributes
33
39
  @collection = @attributes.delete(resource_descriptor.collection_name) || []
@@ -132,6 +132,7 @@ module OandaAPI
132
132
  uri: api_uri(path),
133
133
  query: Utils.stringify_keys(conditions),
134
134
  headers: OandaAPI.configuration.headers.merge(headers)
135
+ @streaming_request.emit_heartbeats = emit_heartbeats?
135
136
  @streaming_request.stream(&block)
136
137
  return nil
137
138
  end
@@ -1,3 +1,3 @@
1
1
  module OandaAPI
2
- VERSION = "0.9.4"
2
+ VERSION = "0.9.5"
3
3
  end
@@ -26,7 +26,7 @@ Gem::Specification.new do |s|
26
26
  s.add_dependency "http-exceptions", "~> 0.0"
27
27
 
28
28
  s.add_development_dependency "rspec", "~> 3.2"
29
- s.add_development_dependency "vcr", "~> 2.9"
30
- s.add_development_dependency "webmock", "~> 1.21"
29
+ s.add_development_dependency "vcr", "~> 3.0"
30
+ s.add_development_dependency "webmock", "~> 1.24"
31
31
  s.add_development_dependency "yard", "~> 0.8"
32
32
  end
@@ -2,13 +2,15 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: get
5
- uri: http://api-sandbox.oanda.com/v1/accounts?username=dwaymotim
5
+ uri: https://api-fxpractice.oanda.com/v1/accounts
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,91 +23,23 @@ http_interactions:
21
23
  Server:
22
24
  - openresty/1.7.0.1
23
25
  Date:
24
- - Tue, 20 Jan 2015 17:22:27 GMT
26
+ - Mon, 14 Mar 2016 16:28:06 GMT
25
27
  Content-Type:
26
28
  - application/json
27
29
  Content-Length:
28
- - '139'
30
+ - '366'
29
31
  Connection:
30
32
  - keep-alive
31
33
  Etag:
32
- - '"2c8bda3c0aced2c86025961c4e2da0452332ea36"'
34
+ - '"efb224b14d5e6c03ab1a19a9983274e09d124b20"'
33
35
  body:
34
36
  encoding: UTF-8
35
- string: "{\n\t\"accounts\" : [\n\t\t{\n\t\t\t\"accountId\" : 5342358,\n\t\t\t\"accountName\"
37
+ string: "{\n\t\"accounts\" : [\n\t\t{\n\t\t\t\"accountId\" : 1871900,\n\t\t\t\"accountName\"
36
38
  : \"Primary\",\n\t\t\t\"accountCurrency\" : \"USD\",\n\t\t\t\"marginRate\"
37
- : 0.05\n\t\t}\n\t]\n}"
39
+ : 0.05\n\t\t},\n\t\t{\n\t\t\t\"accountId\" : 1401515,\n\t\t\t\"accountName\"
40
+ : \"USD\",\n\t\t\t\"accountCurrency\" : \"USD\",\n\t\t\t\"marginRate\" : 0.1\n\t\t},\n\t\t{\n\t\t\t\"accountId\"
41
+ : 5094848,\n\t\t\t\"accountName\" : \"WTI\",\n\t\t\t\"accountCurrency\" :
42
+ \"CAD\",\n\t\t\t\"marginRate\" : 0.05\n\t\t}\n\t]\n}"
38
43
  http_version:
39
- recorded_at: Tue, 20 Jan 2015 17:22:29 GMT
40
- - request:
41
- method: get
42
- uri: http://api-sandbox.oanda.com/v1/accounts/?username=paudougles
43
- body:
44
- encoding: US-ASCII
45
- string: ''
46
- headers:
47
- X-Accept-Datetime-Format:
48
- - RFC3339
49
- Connection:
50
- - keep-alive
51
- Keep-Alive:
52
- - 30
53
- response:
54
- status:
55
- code: 200
56
- message: OK
57
- headers:
58
- Server:
59
- - openresty/1.7.0.1
60
- Date:
61
- - Tue, 20 Jan 2015 23:27:03 GMT
62
- Content-Type:
63
- - application/json
64
- Content-Length:
65
- - '139'
66
- Connection:
67
- - keep-alive
68
- Etag:
69
- - '"61cce213956060b4ccb6fd9f47235b4c03e74095"'
70
- body:
71
- encoding: UTF-8
72
- string: "{\n\t\"accounts\" : [\n\t\t{\n\t\t\t\"accountId\" : 1724176,\n\t\t\t\"accountName\"
73
- : \"Primary\",\n\t\t\t\"accountCurrency\" : \"USD\",\n\t\t\t\"marginRate\"
74
- : 0.05\n\t\t}\n\t]\n}"
75
- http_version:
76
- recorded_at: Tue, 20 Jan 2015 23:27:03 GMT
77
- - request:
78
- method: get
79
- uri: http://api-sandbox.oanda.com/v1/accounts?username
80
- body:
81
- encoding: US-ASCII
82
- string: ''
83
- headers:
84
- X-Accept-Datetime-Format:
85
- - RFC3339
86
- Connection:
87
- - keep-alive
88
- Keep-Alive:
89
- - 30
90
- response:
91
- status:
92
- code: 404
93
- message: NOT_FOUND
94
- headers:
95
- Server:
96
- - openresty/1.7.0.1
97
- Date:
98
- - Fri, 23 Jan 2015 17:37:52 GMT
99
- Content-Type:
100
- - application/json
101
- Content-Length:
102
- - '144'
103
- Connection:
104
- - keep-alive
105
- body:
106
- encoding: UTF-8
107
- string: "{\n\t\"code\" : 55,\n\t\"message\" : \"Username specified is invalid\",\n\t\"moreInfo\"
108
- : \"http:\\/\\/developer.oanda.com\\/docs\\/v1\\/troubleshooting\\/#errors\"\n}"
109
- http_version:
110
- recorded_at: Fri, 23 Jan 2015 17:37:52 GMT
111
- recorded_with: VCR 2.9.3
44
+ recorded_at: Mon, 14 Mar 2016 16:28:06 GMT
45
+ recorded_with: VCR 3.0.1
@@ -2,13 +2,15 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: get
5
- uri: http://api-sandbox.oanda.com/v1/accounts?username=dwaymotim
5
+ uri: https://api-fxpractice.oanda.com/v1/accounts
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,31 +23,36 @@ http_interactions:
21
23
  Server:
22
24
  - openresty/1.7.0.1
23
25
  Date:
24
- - Tue, 20 Jan 2015 17:22:27 GMT
26
+ - Mon, 14 Mar 2016 16:28:07 GMT
25
27
  Content-Type:
26
28
  - application/json
27
29
  Content-Length:
28
- - '139'
30
+ - '366'
29
31
  Connection:
30
32
  - keep-alive
31
33
  Etag:
32
- - '"2c8bda3c0aced2c86025961c4e2da0452332ea36"'
34
+ - '"efb224b14d5e6c03ab1a19a9983274e09d124b20"'
33
35
  body:
34
36
  encoding: UTF-8
35
- string: "{\n\t\"accounts\" : [\n\t\t{\n\t\t\t\"accountId\" : 5342358,\n\t\t\t\"accountName\"
37
+ string: "{\n\t\"accounts\" : [\n\t\t{\n\t\t\t\"accountId\" : 1871900,\n\t\t\t\"accountName\"
36
38
  : \"Primary\",\n\t\t\t\"accountCurrency\" : \"USD\",\n\t\t\t\"marginRate\"
37
- : 0.05\n\t\t}\n\t]\n}"
39
+ : 0.05\n\t\t},\n\t\t{\n\t\t\t\"accountId\" : 1401515,\n\t\t\t\"accountName\"
40
+ : \"USD\",\n\t\t\t\"accountCurrency\" : \"USD\",\n\t\t\t\"marginRate\" : 0.1\n\t\t},\n\t\t{\n\t\t\t\"accountId\"
41
+ : 5094848,\n\t\t\t\"accountName\" : \"WTI\",\n\t\t\t\"accountCurrency\" :
42
+ \"CAD\",\n\t\t\t\"marginRate\" : 0.05\n\t\t}\n\t]\n}"
38
43
  http_version:
39
- recorded_at: Tue, 20 Jan 2015 17:22:29 GMT
44
+ recorded_at: Mon, 14 Mar 2016 16:28:07 GMT
40
45
  - request:
41
46
  method: get
42
- uri: http://api-sandbox.oanda.com/v1/accounts/5342358?username=dwaymotim
47
+ uri: https://api-fxpractice.oanda.com/v1/accounts/1871900
43
48
  body:
44
49
  encoding: US-ASCII
45
50
  string: ''
46
51
  headers:
47
52
  X-Accept-Datetime-Format:
48
53
  - RFC3339
54
+ Authorization:
55
+ - Bearer <OANDA_TESTING_API_TOKEN>
49
56
  Connection:
50
57
  - keep-alive
51
58
  Keep-Alive:
@@ -58,130 +65,21 @@ http_interactions:
58
65
  Server:
59
66
  - openresty/1.7.0.1
60
67
  Date:
61
- - Tue, 20 Jan 2015 17:22:27 GMT
68
+ - Mon, 14 Mar 2016 16:28:08 GMT
62
69
  Content-Type:
63
70
  - application/json
64
71
  Content-Length:
65
- - '247'
72
+ - '276'
66
73
  Connection:
67
74
  - keep-alive
68
75
  Etag:
69
- - '"52b4908f3477c81c8c80224512bc0715f21deaf4"'
76
+ - '"158b907f059d85274d407e88979dc2a616a3e0c9"'
70
77
  body:
71
78
  encoding: UTF-8
72
- string: "{\n\t\"accountId\" : 5342358,\n\t\"accountName\" : \"Primary\",\n\t\"balance\"
73
- : 100000,\n\t\"unrealizedPl\" : 0,\n\t\"realizedPl\" : 0,\n\t\"marginUsed\"
74
- : 0,\n\t\"marginAvail\" : 100000,\n\t\"openTrades\" : 0,\n\t\"openOrders\"
79
+ string: "{\n\t\"accountId\" : 1871900,\n\t\"accountName\" : \"Primary\",\n\t\"balance\"
80
+ : 100375.6663,\n\t\"unrealizedPl\" : -18.712,\n\t\"realizedPl\" : 332.7989,\n\t\"marginUsed\"
81
+ : 8111.17,\n\t\"marginAvail\" : 92245.7843,\n\t\"openTrades\" : 16,\n\t\"openOrders\"
75
82
  : 0,\n\t\"marginRate\" : 0.05,\n\t\"accountCurrency\" : \"USD\"\n}"
76
83
  http_version:
77
- recorded_at: Tue, 20 Jan 2015 17:22:29 GMT
78
- - request:
79
- method: get
80
- uri: http://api-sandbox.oanda.com/v1/accounts/?username=paudougles
81
- body:
82
- encoding: US-ASCII
83
- string: ''
84
- headers:
85
- X-Accept-Datetime-Format:
86
- - RFC3339
87
- Connection:
88
- - keep-alive
89
- Keep-Alive:
90
- - 30
91
- response:
92
- status:
93
- code: 200
94
- message: OK
95
- headers:
96
- Server:
97
- - openresty/1.7.0.1
98
- Date:
99
- - Tue, 20 Jan 2015 23:27:04 GMT
100
- Content-Type:
101
- - application/json
102
- Content-Length:
103
- - '139'
104
- Connection:
105
- - keep-alive
106
- Etag:
107
- - '"61cce213956060b4ccb6fd9f47235b4c03e74095"'
108
- body:
109
- encoding: UTF-8
110
- string: "{\n\t\"accounts\" : [\n\t\t{\n\t\t\t\"accountId\" : 1724176,\n\t\t\t\"accountName\"
111
- : \"Primary\",\n\t\t\t\"accountCurrency\" : \"USD\",\n\t\t\t\"marginRate\"
112
- : 0.05\n\t\t}\n\t]\n}"
113
- http_version:
114
- recorded_at: Tue, 20 Jan 2015 23:27:03 GMT
115
- - request:
116
- method: get
117
- uri: http://api-sandbox.oanda.com/v1/accounts/1724176?username=paudougles
118
- body:
119
- encoding: US-ASCII
120
- string: ''
121
- headers:
122
- X-Accept-Datetime-Format:
123
- - RFC3339
124
- Connection:
125
- - keep-alive
126
- Keep-Alive:
127
- - 30
128
- response:
129
- status:
130
- code: 200
131
- message: OK
132
- headers:
133
- Server:
134
- - openresty/1.7.0.1
135
- Date:
136
- - Tue, 20 Jan 2015 23:27:04 GMT
137
- Content-Type:
138
- - application/json
139
- Content-Length:
140
- - '247'
141
- Connection:
142
- - keep-alive
143
- Etag:
144
- - '"83c3b001199921bd888ca07ddf04539617fe4a63"'
145
- body:
146
- encoding: UTF-8
147
- string: "{\n\t\"accountId\" : 1724176,\n\t\"accountName\" : \"Primary\",\n\t\"balance\"
148
- : 100000,\n\t\"unrealizedPl\" : 0,\n\t\"realizedPl\" : 0,\n\t\"marginUsed\"
149
- : 0,\n\t\"marginAvail\" : 100000,\n\t\"openTrades\" : 0,\n\t\"openOrders\"
150
- : 0,\n\t\"marginRate\" : 0.05,\n\t\"accountCurrency\" : \"USD\"\n}"
151
- http_version:
152
- recorded_at: Tue, 20 Jan 2015 23:27:04 GMT
153
- - request:
154
- method: get
155
- uri: http://api-sandbox.oanda.com/v1/accounts?username
156
- body:
157
- encoding: US-ASCII
158
- string: ''
159
- headers:
160
- X-Accept-Datetime-Format:
161
- - RFC3339
162
- Connection:
163
- - keep-alive
164
- Keep-Alive:
165
- - 30
166
- response:
167
- status:
168
- code: 404
169
- message: NOT_FOUND
170
- headers:
171
- Server:
172
- - openresty/1.7.0.1
173
- Date:
174
- - Fri, 23 Jan 2015 17:37:52 GMT
175
- Content-Type:
176
- - application/json
177
- Content-Length:
178
- - '144'
179
- Connection:
180
- - keep-alive
181
- body:
182
- encoding: UTF-8
183
- string: "{\n\t\"code\" : 55,\n\t\"message\" : \"Username specified is invalid\",\n\t\"moreInfo\"
184
- : \"http:\\/\\/developer.oanda.com\\/docs\\/v1\\/troubleshooting\\/#errors\"\n}"
185
- http_version:
186
- recorded_at: Fri, 23 Jan 2015 17:37:53 GMT
187
- recorded_with: VCR 2.9.3
84
+ recorded_at: Mon, 14 Mar 2016 16:28:08 GMT
85
+ recorded_with: VCR 3.0.1