iex-ruby-client 1.3.0 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
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