iex-ruby-client 1.2.0 → 1.5.0

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