tradier 0.1.0

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 (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