iex-ruby-client 1.3.0 → 1.6.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 (61) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +21 -0
  4. data/README.md +202 -16
  5. data/RELEASING.md +3 -3
  6. data/UPGRADING.md +8 -0
  7. data/iex-ruby-client.gemspec +1 -1
  8. data/lib/iex/api/client.rb +5 -0
  9. data/lib/iex/api.rb +5 -0
  10. data/lib/iex/endpoints/balance_sheet.rb +13 -0
  11. data/lib/iex/endpoints/cash_flow.rb +13 -0
  12. data/lib/iex/endpoints/fx.rb +13 -0
  13. data/lib/iex/endpoints/historial_prices.rb +30 -0
  14. data/lib/iex/endpoints/key_stat.rb +14 -0
  15. data/lib/iex/endpoints/ref_data.rb +5 -0
  16. data/lib/iex/errors/invalid_symbols_list.rb +14 -0
  17. data/lib/iex/errors/stat_not_found_error.rb +13 -0
  18. data/lib/iex/errors.rb +3 -1
  19. data/lib/iex/resources/advanced_stats.rb +43 -1
  20. data/lib/iex/resources/balance_sheet.rb +60 -0
  21. data/lib/iex/resources/cash_flow.rb +43 -0
  22. data/lib/iex/resources/currency_rate.rb +9 -0
  23. data/lib/iex/resources/historical_prices.rb +31 -0
  24. data/lib/iex/resources/income.rb +2 -0
  25. data/lib/iex/resources/news.rb +3 -0
  26. data/lib/iex/resources/resource.rb +17 -1
  27. data/lib/iex/resources.rb +4 -0
  28. data/lib/iex/version.rb +1 -1
  29. data/lib/iex-ruby-client.rb +1 -1
  30. data/script/console +9 -0
  31. data/spec/fixtures/iex/balance_sheet/invalid.yml +50 -0
  32. data/spec/fixtures/iex/balance_sheet/msft.yml +56 -0
  33. data/spec/fixtures/iex/cash_flow/invalid.yml +50 -0
  34. data/spec/fixtures/iex/cash_flow/msft.yml +56 -0
  35. data/spec/fixtures/iex/fx/invalid.yml +83 -0
  36. data/spec/fixtures/iex/fx/latest.yml +85 -0
  37. data/spec/fixtures/iex/fx/latest_one_symbol.yml +85 -0
  38. data/spec/fixtures/iex/historical_prices/abcd.yml +56 -0
  39. data/spec/fixtures/iex/historical_prices/invalid.yml +50 -0
  40. data/spec/fixtures/iex/historical_prices/invalid_date.yml +50 -0
  41. data/spec/fixtures/iex/historical_prices/invalid_range.yml +47 -0
  42. data/spec/fixtures/iex/historical_prices/msft.yml +79 -0
  43. data/spec/fixtures/iex/historical_prices/msft_5d.yml +61 -0
  44. data/spec/fixtures/iex/historical_prices/msft_date_and_chart_by_day.yml +57 -0
  45. data/spec/fixtures/iex/historical_prices/msft_specific_date_trimmed.yml +445 -0
  46. data/spec/fixtures/iex/income/msft.yml +54 -51
  47. data/spec/fixtures/iex/key_stat/individual.yml +60 -0
  48. data/spec/fixtures/iex/key_stat/invalid_stat.yml +60 -0
  49. data/spec/fixtures/iex/key_stat/invalid_symbol.yml +50 -0
  50. data/spec/fixtures/iex/ref-data/exchange_symbols.yml +1926 -0
  51. data/spec/iex/endpoints/advanced_stats_spec.rb +56 -0
  52. data/spec/iex/endpoints/balance_sheet_spec.rb +80 -0
  53. data/spec/iex/endpoints/cash_flow_spec.rb +59 -0
  54. data/spec/iex/endpoints/fx_spec.rb +48 -0
  55. data/spec/iex/endpoints/historical_prices_spec.rb +206 -0
  56. data/spec/iex/endpoints/income_spec.rb +31 -29
  57. data/spec/iex/endpoints/key_stat_spec.rb +43 -0
  58. data/spec/iex/endpoints/news_spec.rb +3 -0
  59. data/spec/iex/endpoints/ref_data_spec.rb +44 -9
  60. data/spec/iex/resources/resource_spec.rb +36 -0
  61. metadata +68 -8
@@ -9,8 +9,10 @@ describe IEX::Api::Client do
9
9
 
10
10
  it 'converts ISIN to IEX Cloud symbols' do
11
11
  expect(subject.count).to eq(2)
12
- expect(subject.first).to eq('exchange' => 'NAS', 'iex_id' => 'IEX_4D48333344362D52', 'region' => 'US', 'symbol' => 'AAPL')
13
- expect(subject.last).to eq('exchange' => 'ETR', 'iex_id' => 'IEX_464D46474C312D52', 'region' => 'DE', 'symbol' => 'APC-GY')
12
+ expect(subject.first).to eq('exchange' => 'NAS', 'iex_id' => 'IEX_4D48333344362D52', 'region' => 'US',
13
+ 'symbol' => 'AAPL')
14
+ expect(subject.last).to eq('exchange' => 'ETR', 'iex_id' => 'IEX_464D46474C312D52', 'region' => 'DE',
15
+ 'symbol' => 'APC-GY')
14
16
  end
15
17
  end
16
18
 
@@ -19,8 +21,10 @@ describe IEX::Api::Client do
19
21
 
20
22
  it 'converts ISIN to IEX Cloud symbols' do
21
23
  expect(subject.count).to eq(2)
22
- expect(subject.first).to eq('exchange' => 'NAS', 'iex_id' => 'IEX_4D48333344362D52', 'region' => 'US', 'symbol' => 'AAPL')
23
- expect(subject.last).to eq('exchange' => 'ETR', 'iex_id' => 'IEX_464D46474C312D52', 'region' => 'DE', 'symbol' => 'APC-GY')
24
+ expect(subject.first).to eq('exchange' => 'NAS', 'iex_id' => 'IEX_4D48333344362D52', 'region' => 'US',
25
+ 'symbol' => 'AAPL')
26
+ expect(subject.last).to eq('exchange' => 'ETR', 'iex_id' => 'IEX_464D46474C312D52', 'region' => 'DE',
27
+ 'symbol' => 'APC-GY')
24
28
  end
25
29
  end
26
30
 
@@ -30,12 +34,17 @@ describe IEX::Api::Client do
30
34
  it 'converts ISINs to IEX Cloud symbols mapped by ISIN' do
31
35
  expect(subject.keys).to contain_exactly('US0378331005', 'US5949181045')
32
36
 
33
- expect(subject['US0378331005'].first).to eq('exchange' => 'NAS', 'iex_id' => 'IEX_4D48333344362D52', 'region' => 'US', 'symbol' => 'AAPL')
34
- expect(subject['US0378331005'].last).to eq('exchange' => 'ETR', 'iex_id' => 'IEX_464D46474C312D52', 'region' => 'DE', 'symbol' => 'APC-GY')
37
+ expect(subject['US0378331005'].first).to eq('exchange' => 'NAS', 'iex_id' => 'IEX_4D48333344362D52',
38
+ 'region' => 'US', 'symbol' => 'AAPL')
39
+ expect(subject['US0378331005'].last).to eq('exchange' => 'ETR', 'iex_id' => 'IEX_464D46474C312D52',
40
+ 'region' => 'DE', 'symbol' => 'APC-GY')
35
41
 
36
- expect(subject['US5949181045'][0]).to eq('exchange' => 'NAS', 'iex_id' => 'IEX_5038523343322D52', 'region' => 'US', 'symbol' => 'MSFT')
37
- expect(subject['US5949181045'][1]).to eq('exchange' => 'ETR', 'iex_id' => 'IEX_4C42583859482D52', 'region' => 'DE', 'symbol' => 'MSF-GY')
38
- expect(subject['US5949181045'][2]).to eq('exchange' => 'BRU', 'iex_id' => 'IEX_5833345950432D52', 'region' => 'BE', 'symbol' => 'MSF-BB')
42
+ expect(subject['US5949181045'][0]).to eq('exchange' => 'NAS', 'iex_id' => 'IEX_5038523343322D52',
43
+ 'region' => 'US', 'symbol' => 'MSFT')
44
+ expect(subject['US5949181045'][1]).to eq('exchange' => 'ETR', 'iex_id' => 'IEX_4C42583859482D52',
45
+ 'region' => 'DE', 'symbol' => 'MSF-GY')
46
+ expect(subject['US5949181045'][2]).to eq('exchange' => 'BRU', 'iex_id' => 'IEX_5833345950432D52',
47
+ 'region' => 'BE', 'symbol' => 'MSF-BB')
39
48
  end
40
49
  end
41
50
 
@@ -73,4 +82,30 @@ describe IEX::Api::Client do
73
82
  end
74
83
  end
75
84
  end
85
+
86
+ describe '#ref_data_symbols_for_exchange', vcr: { cassette_name: 'ref-data/exchange_symbols' } do
87
+ subject { client.ref_data_symbols_for_exchange('TSX') }
88
+
89
+ it 'retrieves all symbols' do
90
+ expect(subject.count).to eq 1869
91
+ end
92
+
93
+ context 'first symbol' do
94
+ subject { client.ref_data_symbols_for_exchange('TSX').first }
95
+ it 'retrieves a symbol data' do
96
+ expect(subject.symbol).to eq 'A-CV'
97
+ expect(subject.exchange).to eq 'TSX'
98
+ expect(subject.name).to eq 'Armor Minerals Inc'
99
+ expect(subject.date).to eq Date.parse('2021-05-14')
100
+ expect(subject.enabled).to eq true
101
+ expect(subject.enabled?).to eq true
102
+ expect(subject.type).to eq 'cs'
103
+ expect(subject.region).to eq 'CA'
104
+ expect(subject.currency).to eq 'CAD'
105
+ expect(subject.iex_id).to eq 'IEX_4656374258322D52'
106
+ expect(subject.figi).to eq 'BBG000V98LH2'
107
+ expect(subject.cik).to eq '0001682145'
108
+ end
109
+ end
110
+ end
76
111
  end
@@ -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)
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.3.0
4
+ version: 1.6.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-11-02 00:00:00.000000000 Z
11
+ date: 2021-10-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -53,19 +53,19 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: money_helper
56
+ name: money
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '6.0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '6.0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -169,12 +169,17 @@ files:
169
169
  - lib/iex/cloud/request.rb
170
170
  - lib/iex/cloud/response.rb
171
171
  - lib/iex/endpoints/advanced_stats.rb
172
+ - lib/iex/endpoints/balance_sheet.rb
173
+ - lib/iex/endpoints/cash_flow.rb
172
174
  - lib/iex/endpoints/chart.rb
173
175
  - lib/iex/endpoints/company.rb
174
176
  - lib/iex/endpoints/crypto.rb
175
177
  - lib/iex/endpoints/dividends.rb
176
178
  - lib/iex/endpoints/earnings.rb
179
+ - lib/iex/endpoints/fx.rb
180
+ - lib/iex/endpoints/historial_prices.rb
177
181
  - lib/iex/endpoints/income.rb
182
+ - lib/iex/endpoints/key_stat.rb
178
183
  - lib/iex/endpoints/key_stats.rb
179
184
  - lib/iex/endpoints/largest_trades.rb
180
185
  - lib/iex/endpoints/logo.rb
@@ -187,16 +192,22 @@ files:
187
192
  - lib/iex/endpoints/stock_market.rb
188
193
  - lib/iex/errors.rb
189
194
  - lib/iex/errors/client_error.rb
195
+ - lib/iex/errors/invalid_symbols_list.rb
190
196
  - lib/iex/errors/permission_denied_error.rb
197
+ - lib/iex/errors/stat_not_found_error.rb
191
198
  - lib/iex/errors/symbol_not_found_error.rb
192
199
  - lib/iex/logger.rb
193
200
  - lib/iex/resources.rb
194
201
  - lib/iex/resources/advanced_stats.rb
202
+ - lib/iex/resources/balance_sheet.rb
203
+ - lib/iex/resources/cash_flow.rb
195
204
  - lib/iex/resources/chart.rb
196
205
  - lib/iex/resources/company.rb
197
206
  - lib/iex/resources/crypto.rb
207
+ - lib/iex/resources/currency_rate.rb
198
208
  - lib/iex/resources/dividends.rb
199
209
  - lib/iex/resources/earnings.rb
210
+ - lib/iex/resources/historical_prices.rb
200
211
  - lib/iex/resources/income.rb
201
212
  - lib/iex/resources/key_stats.rb
202
213
  - lib/iex/resources/largest_trades.rb
@@ -209,8 +220,13 @@ files:
209
220
  - lib/iex/resources/symbol.rb
210
221
  - lib/iex/resources/symbols.rb
211
222
  - lib/iex/version.rb
223
+ - script/console
212
224
  - spec/fixtures/iex/advanced_stats/invalid.yml
213
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
214
230
  - spec/fixtures/iex/chart/1d.yml
215
231
  - spec/fixtures/iex/chart/20190306.yml
216
232
  - spec/fixtures/iex/chart/bad_option.yml
@@ -229,9 +245,23 @@ files:
229
245
  - spec/fixtures/iex/dividends/msft_invalid_range.yml
230
246
  - spec/fixtures/iex/earnings/invalid.yml
231
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
232
259
  - spec/fixtures/iex/income/invalid.yml
233
260
  - spec/fixtures/iex/income/msft.yml
234
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
235
265
  - spec/fixtures/iex/key_stats/invalid.yml
236
266
  - spec/fixtures/iex/key_stats/msft.yml
237
267
  - spec/fixtures/iex/largest-trades/aapl.yml
@@ -246,6 +276,7 @@ files:
246
276
  - spec/fixtures/iex/price/msft.yml
247
277
  - spec/fixtures/iex/quote/invalid.yml
248
278
  - spec/fixtures/iex/quote/msft.yml
279
+ - spec/fixtures/iex/ref-data/exchange_symbols.yml
249
280
  - spec/fixtures/iex/ref-data/isin.yml
250
281
  - spec/fixtures/iex/ref-data/isin_mapped.yml
251
282
  - spec/fixtures/iex/ref-data/symbols.yml
@@ -257,12 +288,17 @@ files:
257
288
  - spec/iex/config/client_spec.rb
258
289
  - spec/iex/config/logger_spec.rb
259
290
  - spec/iex/endpoints/advanced_stats_spec.rb
291
+ - spec/iex/endpoints/balance_sheet_spec.rb
292
+ - spec/iex/endpoints/cash_flow_spec.rb
260
293
  - spec/iex/endpoints/chart_spec.rb
261
294
  - spec/iex/endpoints/company_spec.rb
262
295
  - spec/iex/endpoints/crypto_spec.rb
263
296
  - spec/iex/endpoints/dividends_spec.rb
264
297
  - spec/iex/endpoints/earnings_spec.rb
298
+ - spec/iex/endpoints/fx_spec.rb
299
+ - spec/iex/endpoints/historical_prices_spec.rb
265
300
  - spec/iex/endpoints/income_spec.rb
301
+ - spec/iex/endpoints/key_stat_spec.rb
266
302
  - spec/iex/endpoints/key_stats_spec.rb
267
303
  - spec/iex/endpoints/largest_trades_spec.rb
268
304
  - spec/iex/endpoints/logo_spec.rb
@@ -297,13 +333,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
297
333
  - !ruby/object:Gem::Version
298
334
  version: 1.3.6
299
335
  requirements: []
300
- rubygems_version: 3.1.4
336
+ rubygems_version: 3.1.6
301
337
  signing_key:
302
338
  specification_version: 4
303
339
  summary: IEX Finance API Ruby client with support for retrieving stock quotes.
304
340
  test_files:
305
341
  - spec/fixtures/iex/advanced_stats/invalid.yml
306
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
307
347
  - spec/fixtures/iex/chart/1d.yml
308
348
  - spec/fixtures/iex/chart/20190306.yml
309
349
  - spec/fixtures/iex/chart/bad_option.yml
@@ -322,9 +362,23 @@ test_files:
322
362
  - spec/fixtures/iex/dividends/msft_invalid_range.yml
323
363
  - spec/fixtures/iex/earnings/invalid.yml
324
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
325
376
  - spec/fixtures/iex/income/invalid.yml
326
377
  - spec/fixtures/iex/income/msft.yml
327
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
328
382
  - spec/fixtures/iex/key_stats/invalid.yml
329
383
  - spec/fixtures/iex/key_stats/msft.yml
330
384
  - spec/fixtures/iex/largest-trades/aapl.yml
@@ -339,6 +393,7 @@ test_files:
339
393
  - spec/fixtures/iex/price/msft.yml
340
394
  - spec/fixtures/iex/quote/invalid.yml
341
395
  - spec/fixtures/iex/quote/msft.yml
396
+ - spec/fixtures/iex/ref-data/exchange_symbols.yml
342
397
  - spec/fixtures/iex/ref-data/isin.yml
343
398
  - spec/fixtures/iex/ref-data/isin_mapped.yml
344
399
  - spec/fixtures/iex/ref-data/symbols.yml
@@ -350,12 +405,17 @@ test_files:
350
405
  - spec/iex/config/client_spec.rb
351
406
  - spec/iex/config/logger_spec.rb
352
407
  - spec/iex/endpoints/advanced_stats_spec.rb
408
+ - spec/iex/endpoints/balance_sheet_spec.rb
409
+ - spec/iex/endpoints/cash_flow_spec.rb
353
410
  - spec/iex/endpoints/chart_spec.rb
354
411
  - spec/iex/endpoints/company_spec.rb
355
412
  - spec/iex/endpoints/crypto_spec.rb
356
413
  - spec/iex/endpoints/dividends_spec.rb
357
414
  - spec/iex/endpoints/earnings_spec.rb
415
+ - spec/iex/endpoints/fx_spec.rb
416
+ - spec/iex/endpoints/historical_prices_spec.rb
358
417
  - spec/iex/endpoints/income_spec.rb
418
+ - spec/iex/endpoints/key_stat_spec.rb
359
419
  - spec/iex/endpoints/key_stats_spec.rb
360
420
  - spec/iex/endpoints/largest_trades_spec.rb
361
421
  - spec/iex/endpoints/logo_spec.rb