schwab_rb 0.2.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 (71) hide show
  1. checksums.yaml +7 -0
  2. data/.copilotignore +4 -0
  3. data/.rspec +2 -0
  4. data/.rspec_status +292 -0
  5. data/.rubocop.yml +41 -0
  6. data/.rubocop_todo.yml +105 -0
  7. data/CHANGELOG.md +28 -0
  8. data/LICENSE.txt +23 -0
  9. data/README.md +271 -0
  10. data/Rakefile +12 -0
  11. data/doc/notes/data_objects_analysis.md +223 -0
  12. data/doc/notes/data_objects_refactoring_plan.md +82 -0
  13. data/examples/fetch_account_numbers.rb +49 -0
  14. data/examples/fetch_user_preferences.rb +49 -0
  15. data/lib/schwab_rb/account.rb +9 -0
  16. data/lib/schwab_rb/auth/auth_context.rb +23 -0
  17. data/lib/schwab_rb/auth/init_client_easy.rb +45 -0
  18. data/lib/schwab_rb/auth/init_client_login.rb +201 -0
  19. data/lib/schwab_rb/auth/init_client_token_file.rb +30 -0
  20. data/lib/schwab_rb/auth/login_flow_server.rb +55 -0
  21. data/lib/schwab_rb/auth/token.rb +24 -0
  22. data/lib/schwab_rb/auth/token_manager.rb +105 -0
  23. data/lib/schwab_rb/clients/async_client.rb +122 -0
  24. data/lib/schwab_rb/clients/base_client.rb +887 -0
  25. data/lib/schwab_rb/clients/client.rb +97 -0
  26. data/lib/schwab_rb/configuration.rb +39 -0
  27. data/lib/schwab_rb/constants.rb +7 -0
  28. data/lib/schwab_rb/data_objects/account.rb +281 -0
  29. data/lib/schwab_rb/data_objects/account_numbers.rb +68 -0
  30. data/lib/schwab_rb/data_objects/instrument.rb +156 -0
  31. data/lib/schwab_rb/data_objects/market_hours.rb +275 -0
  32. data/lib/schwab_rb/data_objects/option.rb +147 -0
  33. data/lib/schwab_rb/data_objects/option_chain.rb +95 -0
  34. data/lib/schwab_rb/data_objects/option_expiration_chain.rb +134 -0
  35. data/lib/schwab_rb/data_objects/order.rb +186 -0
  36. data/lib/schwab_rb/data_objects/order_leg.rb +68 -0
  37. data/lib/schwab_rb/data_objects/order_preview.rb +237 -0
  38. data/lib/schwab_rb/data_objects/position.rb +100 -0
  39. data/lib/schwab_rb/data_objects/price_history.rb +187 -0
  40. data/lib/schwab_rb/data_objects/quote.rb +276 -0
  41. data/lib/schwab_rb/data_objects/transaction.rb +132 -0
  42. data/lib/schwab_rb/data_objects/user_preferences.rb +129 -0
  43. data/lib/schwab_rb/market_hours.rb +13 -0
  44. data/lib/schwab_rb/movers.rb +35 -0
  45. data/lib/schwab_rb/option.rb +64 -0
  46. data/lib/schwab_rb/orders/builder.rb +202 -0
  47. data/lib/schwab_rb/orders/destination.rb +19 -0
  48. data/lib/schwab_rb/orders/duration.rb +9 -0
  49. data/lib/schwab_rb/orders/equity_instructions.rb +10 -0
  50. data/lib/schwab_rb/orders/errors.rb +5 -0
  51. data/lib/schwab_rb/orders/instruments.rb +35 -0
  52. data/lib/schwab_rb/orders/option_instructions.rb +10 -0
  53. data/lib/schwab_rb/orders/order.rb +77 -0
  54. data/lib/schwab_rb/orders/price_link_basis.rb +15 -0
  55. data/lib/schwab_rb/orders/price_link_type.rb +9 -0
  56. data/lib/schwab_rb/orders/session.rb +14 -0
  57. data/lib/schwab_rb/orders/special_instruction.rb +10 -0
  58. data/lib/schwab_rb/orders/stop_price_link_basis.rb +15 -0
  59. data/lib/schwab_rb/orders/stop_price_link_type.rb +9 -0
  60. data/lib/schwab_rb/orders/stop_type.rb +11 -0
  61. data/lib/schwab_rb/orders/tax_lot_method.rb +13 -0
  62. data/lib/schwab_rb/price_history.rb +55 -0
  63. data/lib/schwab_rb/quote.rb +13 -0
  64. data/lib/schwab_rb/transaction.rb +23 -0
  65. data/lib/schwab_rb/utils/enum_enforcer.rb +73 -0
  66. data/lib/schwab_rb/utils/logger.rb +70 -0
  67. data/lib/schwab_rb/utils/redactor.rb +104 -0
  68. data/lib/schwab_rb/version.rb +5 -0
  69. data/lib/schwab_rb.rb +48 -0
  70. data/sig/schwab_rb.rbs +4 -0
  71. metadata +289 -0
metadata ADDED
@@ -0,0 +1,289 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: schwab_rb
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Joseph Platta
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 2025-07-20 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: async
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '2.18'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '2.18'
26
+ - !ruby/object:Gem::Dependency
27
+ name: async-http
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '0.82'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0.82'
40
+ - !ruby/object:Gem::Dependency
41
+ name: sinatra
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: 4.1.1
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: 4.1.1
54
+ - !ruby/object:Gem::Dependency
55
+ name: oauth2
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '2.0'
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: 2.0.9
64
+ type: :runtime
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - "~>"
69
+ - !ruby/object:Gem::Version
70
+ version: '2.0'
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: 2.0.9
74
+ - !ruby/object:Gem::Dependency
75
+ name: puma
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: '6.5'
81
+ type: :runtime
82
+ prerelease: false
83
+ version_requirements: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: '6.5'
88
+ - !ruby/object:Gem::Dependency
89
+ name: rackup
90
+ requirement: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: '2.2'
95
+ type: :runtime
96
+ prerelease: false
97
+ version_requirements: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: '2.2'
102
+ - !ruby/object:Gem::Dependency
103
+ name: openssl
104
+ requirement: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
107
+ - !ruby/object:Gem::Version
108
+ version: '3.1'
109
+ type: :runtime
110
+ prerelease: false
111
+ version_requirements: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - "~>"
114
+ - !ruby/object:Gem::Version
115
+ version: '3.1'
116
+ - !ruby/object:Gem::Dependency
117
+ name: dotenv
118
+ requirement: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ type: :runtime
124
+ prerelease: false
125
+ version_requirements: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ - !ruby/object:Gem::Dependency
131
+ name: rspec
132
+ requirement: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - "~>"
135
+ - !ruby/object:Gem::Version
136
+ version: '3.13'
137
+ type: :development
138
+ prerelease: false
139
+ version_requirements: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - "~>"
142
+ - !ruby/object:Gem::Version
143
+ version: '3.13'
144
+ - !ruby/object:Gem::Dependency
145
+ name: async-rspec
146
+ requirement: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - "~>"
149
+ - !ruby/object:Gem::Version
150
+ version: '1.17'
151
+ type: :development
152
+ prerelease: false
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - "~>"
156
+ - !ruby/object:Gem::Version
157
+ version: '1.17'
158
+ - !ruby/object:Gem::Dependency
159
+ name: rubocop
160
+ requirement: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - "~>"
163
+ - !ruby/object:Gem::Version
164
+ version: '1.21'
165
+ type: :development
166
+ prerelease: false
167
+ version_requirements: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - "~>"
170
+ - !ruby/object:Gem::Version
171
+ version: '1.21'
172
+ - !ruby/object:Gem::Dependency
173
+ name: pry
174
+ requirement: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - "~>"
177
+ - !ruby/object:Gem::Version
178
+ version: 0.14.2
179
+ type: :development
180
+ prerelease: false
181
+ version_requirements: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - "~>"
184
+ - !ruby/object:Gem::Version
185
+ version: 0.14.2
186
+ description: A comprehensive Ruby client for interacting with the Charles Schwab API.
187
+ Provides access to account data, market quotes, options chains, order management,
188
+ and more with both synchronous and asynchronous support.
189
+ email:
190
+ - jwplatta@gmail.com
191
+ executables: []
192
+ extensions: []
193
+ extra_rdoc_files: []
194
+ files:
195
+ - ".copilotignore"
196
+ - ".rspec"
197
+ - ".rspec_status"
198
+ - ".rubocop.yml"
199
+ - ".rubocop_todo.yml"
200
+ - CHANGELOG.md
201
+ - LICENSE.txt
202
+ - README.md
203
+ - Rakefile
204
+ - doc/notes/data_objects_analysis.md
205
+ - doc/notes/data_objects_refactoring_plan.md
206
+ - examples/fetch_account_numbers.rb
207
+ - examples/fetch_user_preferences.rb
208
+ - lib/schwab_rb.rb
209
+ - lib/schwab_rb/account.rb
210
+ - lib/schwab_rb/auth/auth_context.rb
211
+ - lib/schwab_rb/auth/init_client_easy.rb
212
+ - lib/schwab_rb/auth/init_client_login.rb
213
+ - lib/schwab_rb/auth/init_client_token_file.rb
214
+ - lib/schwab_rb/auth/login_flow_server.rb
215
+ - lib/schwab_rb/auth/token.rb
216
+ - lib/schwab_rb/auth/token_manager.rb
217
+ - lib/schwab_rb/clients/async_client.rb
218
+ - lib/schwab_rb/clients/base_client.rb
219
+ - lib/schwab_rb/clients/client.rb
220
+ - lib/schwab_rb/configuration.rb
221
+ - lib/schwab_rb/constants.rb
222
+ - lib/schwab_rb/data_objects/account.rb
223
+ - lib/schwab_rb/data_objects/account_numbers.rb
224
+ - lib/schwab_rb/data_objects/instrument.rb
225
+ - lib/schwab_rb/data_objects/market_hours.rb
226
+ - lib/schwab_rb/data_objects/option.rb
227
+ - lib/schwab_rb/data_objects/option_chain.rb
228
+ - lib/schwab_rb/data_objects/option_expiration_chain.rb
229
+ - lib/schwab_rb/data_objects/order.rb
230
+ - lib/schwab_rb/data_objects/order_leg.rb
231
+ - lib/schwab_rb/data_objects/order_preview.rb
232
+ - lib/schwab_rb/data_objects/position.rb
233
+ - lib/schwab_rb/data_objects/price_history.rb
234
+ - lib/schwab_rb/data_objects/quote.rb
235
+ - lib/schwab_rb/data_objects/transaction.rb
236
+ - lib/schwab_rb/data_objects/user_preferences.rb
237
+ - lib/schwab_rb/market_hours.rb
238
+ - lib/schwab_rb/movers.rb
239
+ - lib/schwab_rb/option.rb
240
+ - lib/schwab_rb/orders/builder.rb
241
+ - lib/schwab_rb/orders/destination.rb
242
+ - lib/schwab_rb/orders/duration.rb
243
+ - lib/schwab_rb/orders/equity_instructions.rb
244
+ - lib/schwab_rb/orders/errors.rb
245
+ - lib/schwab_rb/orders/instruments.rb
246
+ - lib/schwab_rb/orders/option_instructions.rb
247
+ - lib/schwab_rb/orders/order.rb
248
+ - lib/schwab_rb/orders/price_link_basis.rb
249
+ - lib/schwab_rb/orders/price_link_type.rb
250
+ - lib/schwab_rb/orders/session.rb
251
+ - lib/schwab_rb/orders/special_instruction.rb
252
+ - lib/schwab_rb/orders/stop_price_link_basis.rb
253
+ - lib/schwab_rb/orders/stop_price_link_type.rb
254
+ - lib/schwab_rb/orders/stop_type.rb
255
+ - lib/schwab_rb/orders/tax_lot_method.rb
256
+ - lib/schwab_rb/price_history.rb
257
+ - lib/schwab_rb/quote.rb
258
+ - lib/schwab_rb/transaction.rb
259
+ - lib/schwab_rb/utils/enum_enforcer.rb
260
+ - lib/schwab_rb/utils/logger.rb
261
+ - lib/schwab_rb/utils/redactor.rb
262
+ - lib/schwab_rb/version.rb
263
+ - sig/schwab_rb.rbs
264
+ homepage: https://github.com/jwplatta/schwab_rb
265
+ licenses:
266
+ - MIT
267
+ metadata:
268
+ allowed_push_host: https://rubygems.org
269
+ homepage_uri: https://github.com/jwplatta/schwab_rb
270
+ source_code_uri: https://github.com/jwplatta/schwab_rb
271
+ changelog_uri: https://github.com/jwplatta/schwab_rb/blob/main/CHANGELOG.md
272
+ rdoc_options: []
273
+ require_paths:
274
+ - lib
275
+ required_ruby_version: !ruby/object:Gem::Requirement
276
+ requirements:
277
+ - - ">="
278
+ - !ruby/object:Gem::Version
279
+ version: 3.0.0
280
+ required_rubygems_version: !ruby/object:Gem::Requirement
281
+ requirements:
282
+ - - ">="
283
+ - !ruby/object:Gem::Version
284
+ version: '0'
285
+ requirements: []
286
+ rubygems_version: 3.6.3
287
+ specification_version: 4
288
+ summary: Ruby client for the Charles Schwab API
289
+ test_files: []