tradier 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. data/.yardopts +8 -0
  2. data/LICENSE.md +20 -0
  3. data/README.md +114 -0
  4. data/Rakefile +19 -0
  5. data/lib/tradier.rb +31 -0
  6. data/lib/tradier/account.rb +30 -0
  7. data/lib/tradier/api/accounts.rb +122 -0
  8. data/lib/tradier/api/markets.rb +113 -0
  9. data/lib/tradier/api/orders.rb +84 -0
  10. data/lib/tradier/api/utils.rb +47 -0
  11. data/lib/tradier/api/utils/account.rb +15 -0
  12. data/lib/tradier/api/utils/balance.rb +15 -0
  13. data/lib/tradier/api/utils/base.rb +46 -0
  14. data/lib/tradier/api/utils/event.rb +15 -0
  15. data/lib/tradier/api/utils/expiration.rb +19 -0
  16. data/lib/tradier/api/utils/gainloss.rb +15 -0
  17. data/lib/tradier/api/utils/history.rb +15 -0
  18. data/lib/tradier/api/utils/option_quote.rb +15 -0
  19. data/lib/tradier/api/utils/order.rb +15 -0
  20. data/lib/tradier/api/utils/position.rb +15 -0
  21. data/lib/tradier/api/utils/quote.rb +15 -0
  22. data/lib/tradier/api/utils/strike.rb +15 -0
  23. data/lib/tradier/api/utils/timesales.rb +15 -0
  24. data/lib/tradier/api/utils/watchlist.rb +15 -0
  25. data/lib/tradier/api/watchlists.rb +139 -0
  26. data/lib/tradier/balance.rb +17 -0
  27. data/lib/tradier/base.rb +76 -0
  28. data/lib/tradier/calendar.rb +23 -0
  29. data/lib/tradier/client.rb +89 -0
  30. data/lib/tradier/clock.rb +21 -0
  31. data/lib/tradier/configurable.rb +76 -0
  32. data/lib/tradier/core_ext/enumerable.rb +9 -0
  33. data/lib/tradier/default.rb +75 -0
  34. data/lib/tradier/error.rb +34 -0
  35. data/lib/tradier/error/bad_gateway.rb +11 -0
  36. data/lib/tradier/error/bad_request.rb +10 -0
  37. data/lib/tradier/error/client_error.rb +28 -0
  38. data/lib/tradier/error/configuration_error.rb +6 -0
  39. data/lib/tradier/error/decode_error.rb +9 -0
  40. data/lib/tradier/error/forbidden.rb +10 -0
  41. data/lib/tradier/error/gateway_timeout.rb +11 -0
  42. data/lib/tradier/error/internal_server_error.rb +11 -0
  43. data/lib/tradier/error/not_acceptable.rb +10 -0
  44. data/lib/tradier/error/not_found.rb +10 -0
  45. data/lib/tradier/error/raise_error.rb +31 -0
  46. data/lib/tradier/error/server_error.rb +28 -0
  47. data/lib/tradier/error/service_unavailable.rb +11 -0
  48. data/lib/tradier/error/too_many_requests.rb +12 -0
  49. data/lib/tradier/error/unauthorized.rb +10 -0
  50. data/lib/tradier/error/unprocessable_entity.rb +10 -0
  51. data/lib/tradier/event.rb +8 -0
  52. data/lib/tradier/history.rb +20 -0
  53. data/lib/tradier/option_quote.rb +37 -0
  54. data/lib/tradier/order.rb +14 -0
  55. data/lib/tradier/position.rb +7 -0
  56. data/lib/tradier/profile.rb +14 -0
  57. data/lib/tradier/quote.rb +12 -0
  58. data/lib/tradier/response/parse_json.rb +25 -0
  59. data/lib/tradier/response/raise_error.rb +31 -0
  60. data/lib/tradier/symbol.rb +147 -0
  61. data/lib/tradier/timesales.rb +11 -0
  62. data/lib/tradier/version.rb +3 -0
  63. data/lib/tradier/watchlist.rb +16 -0
  64. data/lib/tradier/watchlist_item.rb +17 -0
  65. data/spec/fixtures/account_balances.json +28 -0
  66. data/spec/fixtures/account_gainloss.json +18 -0
  67. data/spec/fixtures/account_history.json +96 -0
  68. data/spec/fixtures/account_orders.json +833 -0
  69. data/spec/fixtures/account_positions.json +22 -0
  70. data/spec/fixtures/calendar.json +400 -0
  71. data/spec/fixtures/chain.json +2972 -0
  72. data/spec/fixtures/clock.json +10 -0
  73. data/spec/fixtures/expirations.json +18 -0
  74. data/spec/fixtures/history.json +2086 -0
  75. data/spec/fixtures/option_quote.json +14 -0
  76. data/spec/fixtures/option_quotes.json +26 -0
  77. data/spec/fixtures/order.json +1 -0
  78. data/spec/fixtures/order_with_warnings.json +17 -0
  79. data/spec/fixtures/placed_order.json +6 -0
  80. data/spec/fixtures/quote.json +45 -0
  81. data/spec/fixtures/quotes.json +88 -0
  82. data/spec/fixtures/session.json +6 -0
  83. data/spec/fixtures/strikes.json +173 -0
  84. data/spec/fixtures/timesales.json +2956 -0
  85. data/spec/fixtures/user_balances.json +118 -0
  86. data/spec/fixtures/user_gainloss.json +6775 -0
  87. data/spec/fixtures/user_history.json +101 -0
  88. data/spec/fixtures/user_orders.json +57 -0
  89. data/spec/fixtures/user_positions.json +50 -0
  90. data/spec/fixtures/user_profile.json +103 -0
  91. data/spec/fixtures/watchlist.json +30 -0
  92. data/spec/fixtures/watchlist_item.json +6 -0
  93. data/spec/fixtures/watchlists.json +18 -0
  94. data/spec/spec_helper.rb +64 -0
  95. data/spec/tradier/account_spec.rb +76 -0
  96. data/spec/tradier/api/accounts_spec.rb +195 -0
  97. data/spec/tradier/api/markets_spec.rb +219 -0
  98. data/spec/tradier/api/orders_spec.rb +94 -0
  99. data/spec/tradier/api/utils/expiration_spec.rb +8 -0
  100. data/spec/tradier/api/watchlists_spec.rb +164 -0
  101. data/spec/tradier/balance_spec.rb +4 -0
  102. data/spec/tradier/base_spec.rb +11 -0
  103. data/spec/tradier/calendar_spec.rb +27 -0
  104. data/spec/tradier/client_spec.rb +125 -0
  105. data/spec/tradier/clock_spec.rb +73 -0
  106. data/spec/tradier/error/client_error_spec.rb +22 -0
  107. data/spec/tradier/error/server_error_spec.rb +22 -0
  108. data/spec/tradier/error_spec.rb +26 -0
  109. data/spec/tradier/option_quote_spec.rb +61 -0
  110. data/spec/tradier/order_spec.rb +43 -0
  111. data/spec/tradier/position_spec.rb +4 -0
  112. data/spec/tradier/profile_spec.rb +28 -0
  113. data/spec/tradier/quote_spec.rb +29 -0
  114. data/spec/tradier/symbol_spec.rb +54 -0
  115. data/spec/tradier/watchlist_item_spec.rb +48 -0
  116. data/spec/tradier/watchlist_spec.rb +35 -0
  117. data/spec/tradier_spec.rb +105 -0
  118. data/tradier.gemspec +30 -0
  119. metadata +302 -0
@@ -0,0 +1,84 @@
1
+ require 'tradier/api/utils'
2
+
3
+ module Tradier
4
+ module API
5
+ module Orders
6
+ include Tradier::API::Utils
7
+
8
+ # @see https://developer.tradier.com/documentation/trading/create-order
9
+ # @rate_limited Yes
10
+ # @authentication Requires user context
11
+ # Place an order.
12
+ # @param [Hash] options
13
+ # @option options [String] :account The account number.
14
+ # @return [Tradier::Order] An order.
15
+ # @raise [Tradier::Error::BadRequest] Error raised when supplied order is not valid.
16
+ # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
17
+ def create_order(options={})
18
+ account = options.delete(:account)
19
+ object_from_response(Tradier::Order, :post, "/accounts/#{account}/orders", options)
20
+ end
21
+ alias place_order create_order
22
+ alias submit_order create_order
23
+
24
+ # @see https://developer.tradier.com/documentation/trading/preview-order
25
+ # @rate_limited Yes
26
+ # @authentication Requires user context
27
+ # Preview an order.
28
+ # @return [Tradier::Order] An order.
29
+ # @raise [Tradier::Error::BadRequest] Error raised when supplied order is not valid.
30
+ # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
31
+ def preview_order(options={})
32
+ create_order(options.merge(preview: true))
33
+ end
34
+
35
+ # @see https://developer.tradier.com/documentation/trading/cancel-order
36
+ # @rate_limited Yes
37
+ # @authentication Requires user context
38
+ # Cancel an order.
39
+ # @param [Hash] options
40
+ # @option options [String] :account The account number.
41
+ # @option options [String] :id The id of the order.
42
+ # @return [Tradier::Order] An order.
43
+ # @raise [Tradier::Error::BadRequest] Error raised when supplied order is not valid.
44
+ # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
45
+ def cancel_order(options={})
46
+ account = options.delete(:account)
47
+ id = options.delete(:id)
48
+ object_from_response(Tradier::Order, :delete, "/accounts/#{account}/orders/#{id}", options)
49
+ end
50
+
51
+ # @see https://developer.tradier.com/documentation/accounts/get-account-order
52
+ # @rate_limited Yes
53
+ # @authentication Requires user context
54
+ # Retrieve an order.
55
+ # @param [Hash] options
56
+ # @option options [String] :account The account number.
57
+ # @option options [String] :id The id of the order.
58
+ # @return [Tradier::Order] An order.
59
+ # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
60
+ def order(options={})
61
+ account = options.delete(:account)
62
+ id = options.delete(:id)
63
+ object_from_response(Tradier::Order, :get, "/accounts/#{account}/orders/#{id}", options)
64
+ end
65
+
66
+ # @see https://developer.tradier.com/documentation/trading/change-order
67
+ # @rate_limited Yes
68
+ # @authentication Requires user context
69
+ # Update an order.
70
+ # @param [Hash] options
71
+ # @option options [String] :account The account number.
72
+ # @option options [String] :id The id of the order.
73
+ # @return [Tradier::Order] An order.
74
+ # @raise [Tradier::Error::BadRequest] Error raised when supplied order is not valid.
75
+ # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
76
+ def update_order(options={})
77
+ account = options.delete(:account)
78
+ id = options.delete(:id)
79
+ object_from_response(Tradier::Order, :put, "/accounts/#{account}/orders/#{id}", options)
80
+ end
81
+ alias change_order update_order
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,47 @@
1
+ require 'tradier/account'
2
+ require 'tradier/balance'
3
+ require 'tradier/calendar'
4
+ require 'tradier/clock'
5
+ require 'tradier/history'
6
+ require 'tradier/option_quote'
7
+ require 'tradier/order'
8
+ require 'tradier/position'
9
+ require 'tradier/profile'
10
+ require 'tradier/quote'
11
+ require 'tradier/timesales'
12
+ require 'tradier/watchlist'
13
+ require 'tradier/event'
14
+
15
+ require 'tradier/api/utils/account'
16
+ require 'tradier/api/utils/balance'
17
+ require 'tradier/api/utils/expiration'
18
+ require 'tradier/api/utils/gainloss'
19
+ require 'tradier/api/utils/history'
20
+ require 'tradier/api/utils/option_quote'
21
+ require 'tradier/api/utils/order'
22
+ require 'tradier/api/utils/position'
23
+ require 'tradier/api/utils/quote'
24
+ require 'tradier/api/utils/strike'
25
+ require 'tradier/api/utils/timesales'
26
+ require 'tradier/api/utils/watchlist'
27
+ require 'tradier/api/utils/event'
28
+
29
+ module Tradier
30
+ module API
31
+ module Utils
32
+
33
+ private
34
+
35
+ # @param klass [Class]
36
+ # @param request_method [Symbol]
37
+ # @param path [String]
38
+ # @param options [Hash]
39
+ # @return [klass instance]
40
+ def object_from_response(klass, request_method, path, options={})
41
+ response_body = send(request_method.to_sym, path, options)[:body]
42
+ klass.from_response(response_body)
43
+ end
44
+
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,15 @@
1
+ require 'tradier/api/utils/base'
2
+
3
+ module Tradier
4
+ module API
5
+ module Utils
6
+ class Account < Tradier::API::Utils::Base
7
+
8
+ def body
9
+ nested_array(Tradier::Account, [:accounts, :account])
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ require 'tradier/api/utils/base'
2
+
3
+ module Tradier
4
+ module API
5
+ module Utils
6
+ class Balance < Tradier::API::Utils::Base
7
+
8
+ def body
9
+ nested_array(Tradier::Balance, [:accounts, :account])
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,46 @@
1
+ require 'tradier/api/utils/base'
2
+
3
+ module Tradier
4
+ module API
5
+ module Utils
6
+ class Base
7
+
8
+ def self.from_response(body)
9
+ self.new(body)
10
+ end
11
+
12
+ def initialize(attrs)
13
+ @attrs = attrs
14
+ end
15
+
16
+ private
17
+
18
+ def nested_array(klass, response_path)
19
+ begin
20
+ nested_attrs = nested_response_body(response_path)
21
+ if nested_attrs.is_a?(Array)
22
+ nested_attrs.map do |element|
23
+ klass.from_response(element)
24
+ end
25
+ else
26
+ [klass.from_response(nested_attrs)]
27
+ end
28
+ rescue TypeError => e
29
+ []
30
+ end
31
+ end
32
+
33
+ def nested_response_body(path)
34
+ body = @attrs.dup
35
+
36
+ path.each do |p|
37
+ body = body[p]
38
+ end
39
+
40
+ body
41
+ end
42
+
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,15 @@
1
+ require 'tradier/api/utils/base'
2
+
3
+ module Tradier
4
+ module API
5
+ module Utils
6
+ class Event < Tradier::API::Utils::Base
7
+
8
+ def body
9
+ nested_array(Tradier::Event, [:history, :event])
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,19 @@
1
+ require 'tradier/api/utils/base'
2
+
3
+ module Tradier
4
+ module API
5
+ module Utils
6
+ class Expiration < Tradier::API::Utils::Base
7
+
8
+ def body
9
+ return [] unless @attrs[:expirations].kind_of?(Hash)
10
+
11
+ @attrs[:expirations].fetch(:date, []).map do |element|
12
+ Date.parse(element)
13
+ end
14
+ end
15
+
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,15 @@
1
+ require 'tradier/api/utils/base'
2
+
3
+ module Tradier
4
+ module API
5
+ module Utils
6
+ class Gainloss < Tradier::API::Utils::Base
7
+
8
+ def body
9
+ nested_array(Tradier::Position, [:gainloss, :closed_position])
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ require 'tradier/api/utils/base'
2
+
3
+ module Tradier
4
+ module API
5
+ module Utils
6
+ class History < Tradier::API::Utils::Base
7
+
8
+ def body
9
+ nested_array(Tradier::History, [:history, :day])
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ require 'tradier/api/utils/base'
2
+
3
+ module Tradier
4
+ module API
5
+ module Utils
6
+ class OptionQuote < Tradier::API::Utils::Base
7
+
8
+ def body
9
+ nested_array(Tradier::OptionQuote, [:options, :option])
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ require 'tradier/api/utils/base'
2
+
3
+ module Tradier
4
+ module API
5
+ module Utils
6
+ class Order < Tradier::API::Utils::Base
7
+
8
+ def body
9
+ nested_array(Tradier::Order, [:orders, :order])
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ require 'tradier/api/utils/base'
2
+
3
+ module Tradier
4
+ module API
5
+ module Utils
6
+ class Position < Tradier::API::Utils::Base
7
+
8
+ def body
9
+ nested_array(Tradier::Position, [:positions, :position])
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ require 'tradier/api/utils/base'
2
+
3
+ module Tradier
4
+ module API
5
+ module Utils
6
+ class Quote < Tradier::API::Utils::Base
7
+
8
+ def body
9
+ nested_array(Tradier::Quote, [:quotes, :quote])
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ require 'tradier/api/utils/base'
2
+
3
+ module Tradier
4
+ module API
5
+ module Utils
6
+ class Strike < Tradier::API::Utils::Base
7
+
8
+ def body
9
+ @attrs[:strikes][:strike]
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ require 'tradier/api/utils/base'
2
+
3
+ module Tradier
4
+ module API
5
+ module Utils
6
+ class Timesales < Tradier::API::Utils::Base
7
+
8
+ def body
9
+ nested_array(Tradier::Timesales, [:series, :data])
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ require 'tradier/api/utils/base'
2
+
3
+ module Tradier
4
+ module API
5
+ module Utils
6
+ class Watchlist < Tradier::API::Utils::Base
7
+
8
+ def body
9
+ nested_array(Tradier::Watchlist, [:watchlists, :watchlist])
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,139 @@
1
+ require 'tradier/api/utils'
2
+
3
+ module Tradier
4
+ module API
5
+ module Watchlists
6
+ include Tradier::API::Utils
7
+
8
+ # @see https://developer.tradier.com/documentation/watchlists/get-watchlists
9
+ # @rate_limited Yes
10
+ # @authentication Requires user context
11
+ # Get all watchlists.
12
+ # @return [Array<Tradier::Watchlist>] An array of watchlists.
13
+ # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
14
+ def watchlists(options={})
15
+ response = object_from_response(Tradier::API::Utils::Watchlist, :get, '/watchlists', options).body
16
+ end
17
+
18
+ # @see https://developer.tradier.com/documentation/watchlists/get-specific-watchlist
19
+ # @rate_limited Yes
20
+ # @authentication Requires user context
21
+ # Get a watchlist.
22
+ # @param [String] id The watchlist id.
23
+ # @return [Tradier::Watchlist] A watchlist.
24
+ # @raise [Tradier::Error::NotFound] Error raised when watchlist is not found.
25
+ # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
26
+ def watchlist(id, options={})
27
+ object_from_response(Tradier::Watchlist, :get, "/watchlists/#{id}", options)
28
+ end
29
+
30
+ # @see https://developer.tradier.com/documentation/watchlists/delete-watchlist
31
+ # @rate_limited Yes
32
+ # @authentication Requires user context
33
+ # Delete a watchlist.
34
+ # @param [String] id The watchlist id.
35
+ # @return [Boolean] Result of watchlist removal.
36
+ # @raise [Tradier::Error::NotFound] Error raised when watchlist is not found.
37
+ # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
38
+ def delete_watchlist(id, options={})
39
+ send(:delete, "/watchlists/#{id}", options)[:status] == 200
40
+ end
41
+
42
+ # @see https://developer.tradier.com/documentation/watchlists/create-watchlist
43
+ # @rate_limited Yes
44
+ # @authentication Requires user context
45
+ # Create a new watchlist.
46
+ # @param [Hash] options
47
+ # @option options [String] :name The watchlist name.
48
+ # @return [Tradier::Watchlist] A watchlist.
49
+ # @raise [Tradier::Error::BadRequest] Error raised when request is not valid.
50
+ # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
51
+ def create_watchlist(options={})
52
+ object_from_response(Tradier::Watchlist, :post, '/watchlists', options)
53
+ end
54
+
55
+ # @see https://developer.tradier.com/documentation/watchlists/update-watchlist
56
+ # @rate_limited Yes
57
+ # @authentication Requires user context
58
+ # Update a watchlist.
59
+ # @param [String] id The watchlist id.
60
+ # @param [Hash] options
61
+ # @option options [String] :name The watchlist name.
62
+ # @return [Tradier::Watchlist] A watchlist.
63
+ # @raise [Tradier::Error::BadRequest] Error raised when request is not valid.
64
+ # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
65
+ def update_watchlist(id, options={})
66
+ object_from_response(Tradier::Watchlist, :put, "/watchlists/#{id}", options)
67
+ end
68
+
69
+ # @see https://developer.tradier.com/documentation/watchlists/update-watchlist
70
+ # @rate_limited Yes
71
+ # @authentication Requires user context
72
+ # Retrieve a watchlist symbol.
73
+ # @param [String] id The watchlist id.
74
+ # @param [String] symbol The watchlist symbol.
75
+ # @return [Tradier::WatchlistItem] A watchlist item.
76
+ # @raise [Tradier::Error::NotFound] Error raised when watchlist or watchlist item is not found.
77
+ # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
78
+ def watchlist_item(id, symbol, options={})
79
+ object_from_response(Tradier::WatchlistItem, :get, "/watchlists/#{id}/symbols/#{symbol}", options)
80
+ end
81
+ alias watchlist_symbol watchlist_item
82
+
83
+ # @see https://developer.tradier.com/documentation/watchlists/add-watchlist-symbol
84
+ # @rate_limited Yes
85
+ # @authentication Requires user context
86
+ # Update a watchlist symbol.
87
+ # @param [String] id The watchlist id.
88
+ # @param [Hash] options
89
+ # @option options [String] :symbols A comma delimited list of symbols.
90
+ # @return [Tradier::Watchlist] A watchlist.
91
+ # @raise [Tradier::Error::BadRequest] Error raised when request is not valid.
92
+ # @raise [Tradier::Error::NotFound] Error raised when watchlist is not found.
93
+ # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
94
+ def add_watchlist_item(id, options={})
95
+ object_from_response(Tradier::WatchlistItem, :post, "/watchlists/#{id}/symbols", options)
96
+ end
97
+ alias create_watchlist_item add_watchlist_item
98
+ alias create_watchlist_symbol add_watchlist_item
99
+ alias add_watchlist_symbol add_watchlist_item
100
+
101
+ # @see https://developer.tradier.com/documentation/watchlists/remove-watchlist-symbol
102
+ # @rate_limited Yes
103
+ # @authentication Requires user context
104
+ # Remove a watchlist symbol.
105
+ # @param [String] id The watchlist id.
106
+ # @param [String] symbol The watchlist symbol.
107
+ # @return [Tradier::Watchlist] A watchlist.
108
+ # @raise [Tradier::Error::NotFound] Error raised when watchlist or watchlist item is not found.
109
+ # @raise [Tradier::Error::BadRequest] Error raised when request is not valid.
110
+ # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
111
+ def remove_watchlist_item(id, symbol, options={})
112
+ send(:delete, "/watchlists/#{id}/symbols/#{symbol}", options)[:status] == 200
113
+ end
114
+ alias delete_watchlist_item remove_watchlist_item
115
+ alias remove_watchlist_symbol remove_watchlist_item
116
+ alias delete_watchlist_symbol remove_watchlist_item
117
+
118
+ # @see https://developer.tradier.com/documentation/watchlists/update-watchlist-symbol
119
+ # @rate_limited Yes
120
+ # @authentication Requires user context
121
+ # Update a watchlist symbol.
122
+ # @param [String] id The watchlist id.
123
+ # @param [String] symbol The watchlist symbol.
124
+ # @param [Hash] options
125
+ # @option options [String] :shares The number of shares.
126
+ # @option options [String] :purchase_date The purchase date.
127
+ # @option options [String] :purchase_price The purchase price.
128
+ # @return [Tradier::WatchlistItem] A watchlist item.
129
+ # @raise [Tradier::Error::NotFound] Error raised when watchlist or watchlist item is not found.
130
+ # @raise [Tradier::Error::BadRequest] Error raised when request is not valid.
131
+ # @raise [Tradier::Error::Unauthorized] Error raised when supplied user credentials are not valid.
132
+ def update_watchlist_item(id, symbol, options={})
133
+ object_from_response(Tradier::WatchlistItem, :put, "/watchlists/#{id}/symbols/#{symbol}", options)
134
+ end
135
+ alias update_watchlist_symbol update_watchlist_item
136
+
137
+ end
138
+ end
139
+ end