iex-ruby-client 1.2.0 → 1.5.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 (73) hide show
  1. checksums.yaml +4 -4
  2. data/.env.sample +2 -0
  3. data/.gitignore +1 -0
  4. data/.rubocop_todo.yml +0 -8
  5. data/CHANGELOG.md +27 -0
  6. data/Gemfile +1 -0
  7. data/README.md +237 -18
  8. data/RELEASING.md +3 -3
  9. data/lib/iex/api.rb +8 -1
  10. data/lib/iex/api/client.rb +15 -2
  11. data/lib/iex/api/config/client.rb +52 -0
  12. data/lib/iex/api/config/logger.rb +35 -0
  13. data/lib/iex/cloud/connection.rb +2 -1
  14. data/lib/iex/endpoints/advanced_stats.rb +11 -0
  15. data/lib/iex/endpoints/balance_sheet.rb +13 -0
  16. data/lib/iex/endpoints/cash_flow.rb +13 -0
  17. data/lib/iex/endpoints/fx.rb +13 -0
  18. data/lib/iex/endpoints/historial_prices.rb +30 -0
  19. data/lib/iex/endpoints/key_stat.rb +14 -0
  20. data/lib/iex/endpoints/ref_data.rb +6 -1
  21. data/lib/iex/errors.rb +3 -1
  22. data/lib/iex/errors/invalid_symbols_list.rb +14 -0
  23. data/lib/iex/errors/stat_not_found_error.rb +13 -0
  24. data/lib/iex/resources.rb +5 -0
  25. data/lib/iex/resources/advanced_stats.rb +84 -0
  26. data/lib/iex/resources/balance_sheet.rb +60 -0
  27. data/lib/iex/resources/cash_flow.rb +43 -0
  28. data/lib/iex/resources/currency_rate.rb +9 -0
  29. data/lib/iex/resources/historical_prices.rb +31 -0
  30. data/lib/iex/resources/income.rb +2 -0
  31. data/lib/iex/resources/news.rb +3 -0
  32. data/lib/iex/resources/resource.rb +12 -0
  33. data/lib/iex/version.rb +1 -1
  34. data/script/console +9 -0
  35. data/spec/fixtures/iex/advanced_stats/invalid.yml +50 -0
  36. data/spec/fixtures/iex/advanced_stats/msft.yml +57 -0
  37. data/spec/fixtures/iex/balance_sheet/invalid.yml +50 -0
  38. data/spec/fixtures/iex/balance_sheet/msft.yml +56 -0
  39. data/spec/fixtures/iex/cash_flow/invalid.yml +50 -0
  40. data/spec/fixtures/iex/cash_flow/msft.yml +56 -0
  41. data/spec/fixtures/iex/fx/invalid.yml +83 -0
  42. data/spec/fixtures/iex/fx/latest.yml +85 -0
  43. data/spec/fixtures/iex/fx/latest_one_symbol.yml +85 -0
  44. data/spec/fixtures/iex/historical_prices/abcd.yml +56 -0
  45. data/spec/fixtures/iex/historical_prices/invalid.yml +50 -0
  46. data/spec/fixtures/iex/historical_prices/invalid_date.yml +50 -0
  47. data/spec/fixtures/iex/historical_prices/invalid_range.yml +47 -0
  48. data/spec/fixtures/iex/historical_prices/msft.yml +79 -0
  49. data/spec/fixtures/iex/historical_prices/msft_5d.yml +61 -0
  50. data/spec/fixtures/iex/historical_prices/msft_date_and_chart_by_day.yml +57 -0
  51. data/spec/fixtures/iex/historical_prices/msft_specific_date_trimmed.yml +445 -0
  52. data/spec/fixtures/iex/income/msft.yml +54 -51
  53. data/spec/fixtures/iex/key_stat/individual.yml +60 -0
  54. data/spec/fixtures/iex/key_stat/invalid_stat.yml +60 -0
  55. data/spec/fixtures/iex/key_stat/invalid_symbol.yml +50 -0
  56. data/spec/fixtures/iex/ref-data/exchange_symbols.yml +1926 -0
  57. data/spec/iex/client_spec.rb +91 -13
  58. data/spec/iex/config/client_spec.rb +49 -0
  59. data/spec/iex/config/logger_spec.rb +46 -0
  60. data/spec/iex/endpoints/advanced_stats_spec.rb +110 -0
  61. data/spec/iex/endpoints/balance_sheet_spec.rb +80 -0
  62. data/spec/iex/endpoints/cash_flow_spec.rb +59 -0
  63. data/spec/iex/endpoints/fx_spec.rb +48 -0
  64. data/spec/iex/endpoints/historical_prices_spec.rb +206 -0
  65. data/spec/iex/endpoints/income_spec.rb +31 -29
  66. data/spec/iex/endpoints/key_stat_spec.rb +43 -0
  67. data/spec/iex/endpoints/news_spec.rb +3 -0
  68. data/spec/iex/endpoints/ref_data_spec.rb +57 -12
  69. data/spec/iex/resources/resource_spec.rb +36 -0
  70. data/spec/spec_helper.rb +3 -3
  71. metadata +78 -6
  72. data/lib/iex/api/config.rb +0 -47
  73. data/spec/iex/config_spec.rb +0 -22
@@ -37,6 +37,42 @@ describe IEX::Resources::Resource do
37
37
  end
38
38
  end
39
39
 
40
+ context 'percent to string (Positive)' do
41
+ subject do
42
+ IEX::Resources::Resource.percentage_to_string(3.3793)
43
+ end
44
+ it 'converts to percentage' do
45
+ expect(subject).to eq '+3.38%'
46
+ end
47
+ end
48
+
49
+ context 'percent to string (Negative)' do
50
+ subject do
51
+ IEX::Resources::Resource.percentage_to_string(-3.3793)
52
+ end
53
+ it 'converts to percentage' do
54
+ expect(subject).to eq '-3.38%'
55
+ end
56
+ end
57
+
58
+ context 'percent to string (nil)' do
59
+ subject do
60
+ IEX::Resources::Resource.percentage_to_string(nil)
61
+ end
62
+ it 'nil argument does not convert' do
63
+ expect(subject).to eq nil
64
+ end
65
+ end
66
+
67
+ context 'float number to percent (0)' do
68
+ subject do
69
+ IEX::Resources::Resource.percentage_to_string(0)
70
+ end
71
+ it 'Zero converts to +0.00%' do
72
+ expect(subject).to eq '+0.00%'
73
+ end
74
+ end
75
+
40
76
  context 'Unformatted money amount to dollar' do
41
77
  subject do
42
78
  IEX::Resources::Resource.to_dollar(amount: 123_391)
data/spec/spec_helper.rb CHANGED
@@ -2,12 +2,12 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..'))
2
2
 
3
3
  require 'rubygems'
4
4
  require 'rspec'
5
+ require 'dotenv'
5
6
 
6
7
  require 'iex-ruby-client'
7
8
 
8
- Dir[File.join(File.dirname(__FILE__), 'support', '**/*.rb')].each do |file|
9
+ Dir[File.join(File.dirname(__FILE__), 'support', '**/*.rb')].sort.each do |file|
9
10
  require file
10
11
  end
11
12
 
12
- ENV['IEX_API_PUBLISHABLE_TOKEN'] ||= 'test-iex-api-publishable-token'
13
- ENV['IEX_API_SECRET_TOKEN'] ||= 'test-iex-api-secret-token'
13
+ Dotenv.load('.env', '.env.sample')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iex-ruby-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Doubrovkine
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-01 00:00:00.000000000 Z
11
+ date: 2021-08-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -142,6 +142,7 @@ executables: []
142
142
  extensions: []
143
143
  extra_rdoc_files: []
144
144
  files:
145
+ - ".env.sample"
145
146
  - ".github/FUNDING.yml"
146
147
  - ".gitignore"
147
148
  - ".rspec"
@@ -161,17 +162,24 @@ files:
161
162
  - lib/iex-ruby-client.rb
162
163
  - lib/iex/api.rb
163
164
  - lib/iex/api/client.rb
164
- - lib/iex/api/config.rb
165
+ - lib/iex/api/config/client.rb
166
+ - lib/iex/api/config/logger.rb
165
167
  - lib/iex/cloud.rb
166
168
  - lib/iex/cloud/connection.rb
167
169
  - lib/iex/cloud/request.rb
168
170
  - lib/iex/cloud/response.rb
171
+ - lib/iex/endpoints/advanced_stats.rb
172
+ - lib/iex/endpoints/balance_sheet.rb
173
+ - lib/iex/endpoints/cash_flow.rb
169
174
  - lib/iex/endpoints/chart.rb
170
175
  - lib/iex/endpoints/company.rb
171
176
  - lib/iex/endpoints/crypto.rb
172
177
  - lib/iex/endpoints/dividends.rb
173
178
  - lib/iex/endpoints/earnings.rb
179
+ - lib/iex/endpoints/fx.rb
180
+ - lib/iex/endpoints/historial_prices.rb
174
181
  - lib/iex/endpoints/income.rb
182
+ - lib/iex/endpoints/key_stat.rb
175
183
  - lib/iex/endpoints/key_stats.rb
176
184
  - lib/iex/endpoints/largest_trades.rb
177
185
  - lib/iex/endpoints/logo.rb
@@ -184,15 +192,22 @@ files:
184
192
  - lib/iex/endpoints/stock_market.rb
185
193
  - lib/iex/errors.rb
186
194
  - lib/iex/errors/client_error.rb
195
+ - lib/iex/errors/invalid_symbols_list.rb
187
196
  - lib/iex/errors/permission_denied_error.rb
197
+ - lib/iex/errors/stat_not_found_error.rb
188
198
  - lib/iex/errors/symbol_not_found_error.rb
189
199
  - lib/iex/logger.rb
190
200
  - lib/iex/resources.rb
201
+ - lib/iex/resources/advanced_stats.rb
202
+ - lib/iex/resources/balance_sheet.rb
203
+ - lib/iex/resources/cash_flow.rb
191
204
  - lib/iex/resources/chart.rb
192
205
  - lib/iex/resources/company.rb
193
206
  - lib/iex/resources/crypto.rb
207
+ - lib/iex/resources/currency_rate.rb
194
208
  - lib/iex/resources/dividends.rb
195
209
  - lib/iex/resources/earnings.rb
210
+ - lib/iex/resources/historical_prices.rb
196
211
  - lib/iex/resources/income.rb
197
212
  - lib/iex/resources/key_stats.rb
198
213
  - lib/iex/resources/largest_trades.rb
@@ -205,6 +220,13 @@ files:
205
220
  - lib/iex/resources/symbol.rb
206
221
  - lib/iex/resources/symbols.rb
207
222
  - lib/iex/version.rb
223
+ - script/console
224
+ - spec/fixtures/iex/advanced_stats/invalid.yml
225
+ - spec/fixtures/iex/advanced_stats/msft.yml
226
+ - spec/fixtures/iex/balance_sheet/invalid.yml
227
+ - spec/fixtures/iex/balance_sheet/msft.yml
228
+ - spec/fixtures/iex/cash_flow/invalid.yml
229
+ - spec/fixtures/iex/cash_flow/msft.yml
208
230
  - spec/fixtures/iex/chart/1d.yml
209
231
  - spec/fixtures/iex/chart/20190306.yml
210
232
  - spec/fixtures/iex/chart/bad_option.yml
@@ -223,9 +245,23 @@ files:
223
245
  - spec/fixtures/iex/dividends/msft_invalid_range.yml
224
246
  - spec/fixtures/iex/earnings/invalid.yml
225
247
  - spec/fixtures/iex/earnings/msft.yml
248
+ - spec/fixtures/iex/fx/invalid.yml
249
+ - spec/fixtures/iex/fx/latest.yml
250
+ - spec/fixtures/iex/fx/latest_one_symbol.yml
251
+ - spec/fixtures/iex/historical_prices/abcd.yml
252
+ - spec/fixtures/iex/historical_prices/invalid.yml
253
+ - spec/fixtures/iex/historical_prices/invalid_date.yml
254
+ - spec/fixtures/iex/historical_prices/invalid_range.yml
255
+ - spec/fixtures/iex/historical_prices/msft.yml
256
+ - spec/fixtures/iex/historical_prices/msft_5d.yml
257
+ - spec/fixtures/iex/historical_prices/msft_date_and_chart_by_day.yml
258
+ - spec/fixtures/iex/historical_prices/msft_specific_date_trimmed.yml
226
259
  - spec/fixtures/iex/income/invalid.yml
227
260
  - spec/fixtures/iex/income/msft.yml
228
261
  - spec/fixtures/iex/income/nsrgy.yml
262
+ - spec/fixtures/iex/key_stat/individual.yml
263
+ - spec/fixtures/iex/key_stat/invalid_stat.yml
264
+ - spec/fixtures/iex/key_stat/invalid_symbol.yml
229
265
  - spec/fixtures/iex/key_stats/invalid.yml
230
266
  - spec/fixtures/iex/key_stats/msft.yml
231
267
  - spec/fixtures/iex/largest-trades/aapl.yml
@@ -240,6 +276,7 @@ files:
240
276
  - spec/fixtures/iex/price/msft.yml
241
277
  - spec/fixtures/iex/quote/invalid.yml
242
278
  - spec/fixtures/iex/quote/msft.yml
279
+ - spec/fixtures/iex/ref-data/exchange_symbols.yml
243
280
  - spec/fixtures/iex/ref-data/isin.yml
244
281
  - spec/fixtures/iex/ref-data/isin_mapped.yml
245
282
  - spec/fixtures/iex/ref-data/symbols.yml
@@ -248,13 +285,20 @@ files:
248
285
  - spec/fixtures/iex/sectors/sectors-performance.yml
249
286
  - spec/fixtures/iex/stock_market/list_mostactive.yml
250
287
  - spec/iex/client_spec.rb
251
- - spec/iex/config_spec.rb
288
+ - spec/iex/config/client_spec.rb
289
+ - spec/iex/config/logger_spec.rb
290
+ - spec/iex/endpoints/advanced_stats_spec.rb
291
+ - spec/iex/endpoints/balance_sheet_spec.rb
292
+ - spec/iex/endpoints/cash_flow_spec.rb
252
293
  - spec/iex/endpoints/chart_spec.rb
253
294
  - spec/iex/endpoints/company_spec.rb
254
295
  - spec/iex/endpoints/crypto_spec.rb
255
296
  - spec/iex/endpoints/dividends_spec.rb
256
297
  - spec/iex/endpoints/earnings_spec.rb
298
+ - spec/iex/endpoints/fx_spec.rb
299
+ - spec/iex/endpoints/historical_prices_spec.rb
257
300
  - spec/iex/endpoints/income_spec.rb
301
+ - spec/iex/endpoints/key_stat_spec.rb
258
302
  - spec/iex/endpoints/key_stats_spec.rb
259
303
  - spec/iex/endpoints/largest_trades_spec.rb
260
304
  - spec/iex/endpoints/logo_spec.rb
@@ -289,11 +333,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
289
333
  - !ruby/object:Gem::Version
290
334
  version: 1.3.6
291
335
  requirements: []
292
- rubygems_version: 3.1.3
336
+ rubygems_version: 3.1.6
293
337
  signing_key:
294
338
  specification_version: 4
295
339
  summary: IEX Finance API Ruby client with support for retrieving stock quotes.
296
340
  test_files:
341
+ - spec/fixtures/iex/advanced_stats/invalid.yml
342
+ - spec/fixtures/iex/advanced_stats/msft.yml
343
+ - spec/fixtures/iex/balance_sheet/invalid.yml
344
+ - spec/fixtures/iex/balance_sheet/msft.yml
345
+ - spec/fixtures/iex/cash_flow/invalid.yml
346
+ - spec/fixtures/iex/cash_flow/msft.yml
297
347
  - spec/fixtures/iex/chart/1d.yml
298
348
  - spec/fixtures/iex/chart/20190306.yml
299
349
  - spec/fixtures/iex/chart/bad_option.yml
@@ -312,9 +362,23 @@ test_files:
312
362
  - spec/fixtures/iex/dividends/msft_invalid_range.yml
313
363
  - spec/fixtures/iex/earnings/invalid.yml
314
364
  - spec/fixtures/iex/earnings/msft.yml
365
+ - spec/fixtures/iex/fx/invalid.yml
366
+ - spec/fixtures/iex/fx/latest.yml
367
+ - spec/fixtures/iex/fx/latest_one_symbol.yml
368
+ - spec/fixtures/iex/historical_prices/abcd.yml
369
+ - spec/fixtures/iex/historical_prices/invalid.yml
370
+ - spec/fixtures/iex/historical_prices/invalid_date.yml
371
+ - spec/fixtures/iex/historical_prices/invalid_range.yml
372
+ - spec/fixtures/iex/historical_prices/msft.yml
373
+ - spec/fixtures/iex/historical_prices/msft_5d.yml
374
+ - spec/fixtures/iex/historical_prices/msft_date_and_chart_by_day.yml
375
+ - spec/fixtures/iex/historical_prices/msft_specific_date_trimmed.yml
315
376
  - spec/fixtures/iex/income/invalid.yml
316
377
  - spec/fixtures/iex/income/msft.yml
317
378
  - spec/fixtures/iex/income/nsrgy.yml
379
+ - spec/fixtures/iex/key_stat/individual.yml
380
+ - spec/fixtures/iex/key_stat/invalid_stat.yml
381
+ - spec/fixtures/iex/key_stat/invalid_symbol.yml
318
382
  - spec/fixtures/iex/key_stats/invalid.yml
319
383
  - spec/fixtures/iex/key_stats/msft.yml
320
384
  - spec/fixtures/iex/largest-trades/aapl.yml
@@ -329,6 +393,7 @@ test_files:
329
393
  - spec/fixtures/iex/price/msft.yml
330
394
  - spec/fixtures/iex/quote/invalid.yml
331
395
  - spec/fixtures/iex/quote/msft.yml
396
+ - spec/fixtures/iex/ref-data/exchange_symbols.yml
332
397
  - spec/fixtures/iex/ref-data/isin.yml
333
398
  - spec/fixtures/iex/ref-data/isin_mapped.yml
334
399
  - spec/fixtures/iex/ref-data/symbols.yml
@@ -337,13 +402,20 @@ test_files:
337
402
  - spec/fixtures/iex/sectors/sectors-performance.yml
338
403
  - spec/fixtures/iex/stock_market/list_mostactive.yml
339
404
  - spec/iex/client_spec.rb
340
- - spec/iex/config_spec.rb
405
+ - spec/iex/config/client_spec.rb
406
+ - spec/iex/config/logger_spec.rb
407
+ - spec/iex/endpoints/advanced_stats_spec.rb
408
+ - spec/iex/endpoints/balance_sheet_spec.rb
409
+ - spec/iex/endpoints/cash_flow_spec.rb
341
410
  - spec/iex/endpoints/chart_spec.rb
342
411
  - spec/iex/endpoints/company_spec.rb
343
412
  - spec/iex/endpoints/crypto_spec.rb
344
413
  - spec/iex/endpoints/dividends_spec.rb
345
414
  - spec/iex/endpoints/earnings_spec.rb
415
+ - spec/iex/endpoints/fx_spec.rb
416
+ - spec/iex/endpoints/historical_prices_spec.rb
346
417
  - spec/iex/endpoints/income_spec.rb
418
+ - spec/iex/endpoints/key_stat_spec.rb
347
419
  - spec/iex/endpoints/key_stats_spec.rb
348
420
  - spec/iex/endpoints/largest_trades_spec.rb
349
421
  - spec/iex/endpoints/logo_spec.rb
@@ -1,47 +0,0 @@
1
- module IEX
2
- module Api
3
- module Config
4
- extend self
5
-
6
- ATTRIBUTES = %i[
7
- proxy
8
- user_agent
9
- ca_path
10
- ca_file
11
- logger
12
- timeout
13
- open_timeout
14
- endpoint
15
- publishable_token
16
- secret_token
17
- ].freeze
18
-
19
- attr_accessor(*Config::ATTRIBUTES)
20
-
21
- def reset!
22
- self.endpoint = 'https://cloud.iexapis.com/v1'
23
- self.publishable_token = ENV['IEX_API_PUBLISHABLE_TOKEN']
24
- self.secret_token = ENV['IEX_API_SECRET_TOKEN']
25
- self.user_agent = "IEX Ruby Client/#{IEX::VERSION}"
26
- self.ca_path = defined?(OpenSSL) ? OpenSSL::X509::DEFAULT_CERT_DIR : nil
27
- self.ca_file = defined?(OpenSSL) ? OpenSSL::X509::DEFAULT_CERT_FILE : nil
28
- self.proxy = nil
29
- self.logger = nil
30
- self.timeout = nil
31
- self.open_timeout = nil
32
- end
33
- end
34
-
35
- class << self
36
- def configure
37
- block_given? ? yield(Config) : Config
38
- end
39
-
40
- def config
41
- Config
42
- end
43
- end
44
- end
45
- end
46
-
47
- IEX::Api::Config.reset!
@@ -1,22 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe IEX::Api::Config do
4
- before do
5
- IEX::Api.config.reset!
6
- end
7
- describe '#defaults' do
8
- it 'sets endpoint' do
9
- expect(IEX::Api.config.endpoint).to eq 'https://cloud.iexapis.com/v1'
10
- end
11
- end
12
- describe '#configure' do
13
- before do
14
- IEX::Api.configure do |config|
15
- config.endpoint = 'updated'
16
- end
17
- end
18
- it 'sets endpoint' do
19
- expect(IEX::Api.config.endpoint).to eq 'updated'
20
- end
21
- end
22
- end