iex-ruby-client 1.0.1 → 1.1.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.
- checksums.yaml +4 -4
- data/.rubocop.yml +4 -1
- data/CHANGELOG.md +4 -0
- data/README.md +21 -1
- data/iex-ruby-client.gemspec +1 -1
- data/lib/iex/api.rb +1 -0
- data/lib/iex/api/client.rb +1 -0
- data/lib/iex/endpoints/chart.rb +4 -5
- data/lib/iex/endpoints/income.rb +13 -0
- data/lib/iex/resources.rb +1 -0
- data/lib/iex/resources/chart.rb +1 -1
- data/lib/iex/resources/company.rb +1 -0
- data/lib/iex/resources/income.rb +36 -0
- data/lib/iex/resources/key_stats.rb +1 -1
- data/lib/iex/resources/quote.rb +3 -3
- data/lib/iex/resources/resource.rb +1 -1
- data/lib/iex/version.rb +1 -1
- data/spec/fixtures/iex/income/invalid.yml +49 -0
- data/spec/fixtures/iex/income/msft.yml +53 -0
- data/spec/iex/endpoints/company_spec.rb +1 -0
- data/spec/iex/endpoints/income_spec.rb +59 -0
- data/spec/iex/endpoints/key_stats_spec.rb +1 -1
- metadata +11 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2b9626afa318608562e32bba7dc1efa03d11928a
|
4
|
+
data.tar.gz: ed9d9e67df2e48214b7b8fce95169b175f806571
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4df0e3c0b89750c3a5206de7329cb07ebd6de89fe43e55ac9d55649ab2c30d38ebfc3edf696208ffdabb2b3d2c355bbc0ed93034ee3b0e6b955bf29c32307922
|
7
|
+
data.tar.gz: a4603bca3d2106fb42cd24e9bdfe8fadc930e6a7a7954b8d5d82e7747fa03767a0446aedd1548cd00a8eb07d977831313d3a4fc49487ef0ada48b9a142e927bf
|
data/.rubocop.yml
CHANGED
@@ -2,12 +2,15 @@ AllCops:
|
|
2
2
|
Exclude:
|
3
3
|
- vendor/**/*
|
4
4
|
|
5
|
+
Style/FrozenStringLiteralComment:
|
6
|
+
Enabled: false
|
7
|
+
|
5
8
|
Naming/MethodName:
|
6
9
|
Enabled: false
|
7
10
|
|
8
11
|
Naming/FileName:
|
9
12
|
Exclude:
|
10
|
-
-
|
13
|
+
- "lib/iex-ruby-client.rb"
|
11
14
|
|
12
15
|
Style/Documentation:
|
13
16
|
Enabled: false
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
### 1.1.0 (2019/07/08)
|
2
|
+
|
3
|
+
* [#55](https://github.com/dblock/iex-ruby-client/pull/55): Add `income` statement API and add `tags` to the `company` - [@bingxie](https://github.com/bingxie).
|
4
|
+
|
1
5
|
### 1.0.1 (2019/07/08)
|
2
6
|
|
3
7
|
* [#50](https://github.com/dblock/iex-ruby-client/pull/50): Add missing properties for key stats API - [@bingxie](https://github.com/bingxie).
|
data/README.md
CHANGED
@@ -22,6 +22,7 @@ A Ruby client for the [The IEX Cloud API](https://iexcloud.io/docs/api/).
|
|
22
22
|
- [Get Key Stats](#get-key-stats)
|
23
23
|
- [Get Dividends](#get-dividends)
|
24
24
|
- [Get Earnings](#get-earnings)
|
25
|
+
- [Get Income Statement](#get-income-statement)
|
25
26
|
- [Get Sector Performance](#get-sector-performance)
|
26
27
|
- [Get Largest Trades](#get-largest-trades)
|
27
28
|
- [Get a Quote for Crypto Currencies](#get-a-quote-for-crypto-currencies)
|
@@ -216,7 +217,7 @@ key_stats.week_52_high_dollar # "$136.04"
|
|
216
217
|
key_stats.week_52_low # 95.92,
|
217
218
|
key_stats.week_52_low_dollar # "$95.92"
|
218
219
|
key_stats.market_cap # 990869169557
|
219
|
-
key_stats.
|
220
|
+
key_stats.market_cap_dollar # "$990,869,169,557"
|
220
221
|
key_stats.employees # 133074
|
221
222
|
key_stats.day_200_moving_avg # 112.43
|
222
223
|
key_stats.day_50_moving_avg # 121
|
@@ -293,6 +294,25 @@ earnings.year_ago_change_percent_s # '+15.31%'
|
|
293
294
|
|
294
295
|
See [#earnings](https://iexcloud.io/docs/api/#earnings) for detailed documentation or [earnings.rb](lib/iex/resources/earnings.rb) for returned fields.
|
295
296
|
|
297
|
+
### Get Income Statement
|
298
|
+
|
299
|
+
Fetches income statement for a symbol.
|
300
|
+
|
301
|
+
```ruby
|
302
|
+
income = client.income('MSFT')
|
303
|
+
|
304
|
+
income.report_date # '2019-03-31'
|
305
|
+
income.total_revenue # 30_505_000_000
|
306
|
+
income.total_revenue_dollar # '$30,505,000,000'
|
307
|
+
income.cost_of_revenue # 10_170_000_000
|
308
|
+
income.cost_of_revenue_dollar # '$10,170,000,000'
|
309
|
+
income.gross_profit # 20_335_000_000
|
310
|
+
income.gross_profit_dollar # '$20,335,000,000'
|
311
|
+
...
|
312
|
+
```
|
313
|
+
|
314
|
+
See [#income-statement](https://iexcloud.io/docs/api/#income-statement) for detailed documentation or [income.rb](lib/iex/resources/income.rb) for returned fields.
|
315
|
+
|
296
316
|
### Get Sector Performance
|
297
317
|
|
298
318
|
Fetches latest sector's performance.
|
data/iex-ruby-client.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.add_dependency 'money_helper'
|
22
22
|
s.add_development_dependency 'rake', '~> 10'
|
23
23
|
s.add_development_dependency 'rspec'
|
24
|
-
s.add_development_dependency 'rubocop', '0.
|
24
|
+
s.add_development_dependency 'rubocop', '0.72.0'
|
25
25
|
s.add_development_dependency 'vcr'
|
26
26
|
s.add_development_dependency 'webmock'
|
27
27
|
end
|
data/lib/iex/api.rb
CHANGED
@@ -2,6 +2,7 @@ require_relative 'endpoints/chart'
|
|
2
2
|
require_relative 'endpoints/company'
|
3
3
|
require_relative 'endpoints/dividends'
|
4
4
|
require_relative 'endpoints/earnings'
|
5
|
+
require_relative 'endpoints/income'
|
5
6
|
require_relative 'endpoints/largest_trades'
|
6
7
|
require_relative 'endpoints/logo'
|
7
8
|
require_relative 'endpoints/key_stats'
|
data/lib/iex/api/client.rb
CHANGED
data/lib/iex/endpoints/chart.rb
CHANGED
@@ -10,11 +10,10 @@ module IEX
|
|
10
10
|
].compact.join('/')
|
11
11
|
|
12
12
|
params = {}
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
end
|
13
|
+
|
14
|
+
options&.each_pair do |k, v|
|
15
|
+
k = k.to_s.split('_').map(&:capitalize).join.sub(/^[A-Z]/, &:downcase)
|
16
|
+
params[k.to_sym] = v
|
18
17
|
end
|
19
18
|
|
20
19
|
response = get(url, params)
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module IEX
|
2
|
+
module Endpoints
|
3
|
+
module Income
|
4
|
+
def income(symbol, options = {})
|
5
|
+
get("stock/#{symbol}/income", options)['income'].map do |data|
|
6
|
+
IEX::Resources::Income.new(data)
|
7
|
+
end
|
8
|
+
rescue Faraday::ResourceNotFound => e
|
9
|
+
raise IEX::Errors::SymbolNotFoundError.new(symbol, e.response[:body])
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/lib/iex/resources.rb
CHANGED
@@ -4,6 +4,7 @@ require_relative 'resources/chart'
|
|
4
4
|
require_relative 'resources/company'
|
5
5
|
require_relative 'resources/dividends'
|
6
6
|
require_relative 'resources/earnings'
|
7
|
+
require_relative 'resources/income'
|
7
8
|
require_relative 'resources/key_stats'
|
8
9
|
require_relative 'resources/largest_trades'
|
9
10
|
require_relative 'resources/logo'
|
data/lib/iex/resources/chart.rb
CHANGED
@@ -0,0 +1,36 @@
|
|
1
|
+
module IEX
|
2
|
+
module Resources
|
3
|
+
class Income < Resource
|
4
|
+
property 'report_date', from: 'reportDate'
|
5
|
+
property 'total_revenue', from: 'totalRevenue'
|
6
|
+
property 'total_revenue_dollar', from: 'totalRevenue', with: ->(v) { to_dollar(amount: v) }
|
7
|
+
property 'cost_of_revenue', from: 'costOfRevenue'
|
8
|
+
property 'cost_of_revenue_dollar', from: 'costOfRevenue', with: ->(v) { to_dollar(amount: v) }
|
9
|
+
property 'gross_profit', from: 'grossProfit'
|
10
|
+
property 'gross_profit_dollar', from: 'grossProfit', with: ->(v) { to_dollar(amount: v) }
|
11
|
+
property 'research_and_development', from: 'researchAndDevelopment'
|
12
|
+
property 'research_and_development_dollar', from: 'researchAndDevelopment', with: ->(v) { to_dollar(amount: v) }
|
13
|
+
property 'selling_general_and_admin', from: 'sellingGeneralAndAdmin'
|
14
|
+
property 'selling_general_and_admin_dollar', from: 'sellingGeneralAndAdmin', with: ->(v) { to_dollar(amount: v) }
|
15
|
+
property 'operating_expense', from: 'operatingExpense'
|
16
|
+
property 'operating_expense_dollar', from: 'operatingExpense', with: ->(v) { to_dollar(amount: v) }
|
17
|
+
property 'operating_income', from: 'operatingIncome'
|
18
|
+
property 'operating_income_dollar', from: 'operatingIncome', with: ->(v) { to_dollar(amount: v) }
|
19
|
+
property 'other_income_expense_net', from: 'otherIncomeExpenseNet'
|
20
|
+
property 'other_income_expense_net_dollar', from: 'otherIncomeExpenseNet', with: ->(v) { to_dollar(amount: v) }
|
21
|
+
property 'ebit'
|
22
|
+
property 'ebit_dollar', from: 'ebit', with: ->(v) { to_dollar(amount: v) }
|
23
|
+
property 'interest_income', from: 'interestIncome'
|
24
|
+
property 'interest_income_dollar', from: 'interestIncome', with: ->(v) { to_dollar(amount: v) }
|
25
|
+
property 'pretax_income', from: 'pretaxIncome'
|
26
|
+
property 'pretax_income_dollar', from: 'pretaxIncome', with: ->(v) { to_dollar(amount: v) }
|
27
|
+
property 'income_tax', from: 'incomeTax'
|
28
|
+
property 'income_tax_dollar', from: 'incomeTax', with: ->(v) { to_dollar(amount: v) }
|
29
|
+
property 'minority_interest', from: 'minorityInterest'
|
30
|
+
property 'net_income', from: 'netIncome'
|
31
|
+
property 'net_income_dollar', from: 'netIncome', with: ->(v) { to_dollar(amount: v) }
|
32
|
+
property 'net_income_basic', from: 'netIncomeBasic'
|
33
|
+
property 'net_income_basic_dollar', from: 'netIncomeBasic', with: ->(v) { to_dollar(amount: v) }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -3,7 +3,7 @@ module IEX
|
|
3
3
|
class KeyStats < Resource
|
4
4
|
property 'company_name', from: 'companyName'
|
5
5
|
property 'market_cap', from: 'marketcap'
|
6
|
-
property '
|
6
|
+
property 'market_cap_dollar', from: 'marketcap', with: ->(v) { Resource.to_dollar(amount: v) }
|
7
7
|
property 'week_52_high', from: 'week52high'
|
8
8
|
property 'week_52_high_dollar', from: 'week52high', with: ->(v) { Resource.to_dollar(amount: v, ignore_cents: false) }
|
9
9
|
property 'week_52_low', from: 'week52low'
|
data/lib/iex/resources/quote.rb
CHANGED
@@ -16,12 +16,12 @@ module IEX
|
|
16
16
|
property 'latest_source', from: 'latestSource' # the source of latestPrice - IEX real time price, 15 minute delayed price, Close or Previous close
|
17
17
|
property 'latest_time', from: 'latestTime' # human readable time of the latestPrice
|
18
18
|
property 'latest_update', from: 'latestUpdate' # the update time of latestPrice in milliseconds since midnight Jan 1, 1970
|
19
|
-
property 'latest_update_t', from: 'latestUpdate', with: ->(v) { v
|
19
|
+
property 'latest_update_t', from: 'latestUpdate', with: ->(v) { v&.positive? ? Time.at(v / 1000) : nil } # the update time of latestPrice
|
20
20
|
property 'latest_volume', from: 'latestVolume' # the total market volume of the stock
|
21
21
|
property 'iex_realtime_price', from: 'iexRealtimePrice' # last sale price of the stock on IEX
|
22
22
|
property 'iex_realtime_size', from: 'iexRealtimeSize' # last sale size of the stock on IEX
|
23
23
|
property 'iex_last_updated', from: 'iexLastUpdated' # last update time of the data in milliseconds since midnight Jan 1, 1970 UTC or -1 or 0; if the value is -1 or 0, IEX has not quoted the symbol in the trading day
|
24
|
-
property 'iex_last_updated_t', from: 'iexLastUpdated', with: ->(v) { v
|
24
|
+
property 'iex_last_updated_t', from: 'iexLastUpdated', with: ->(v) { v&.positive? ? Time.at(v / 1000) : nil } # last update time of the data
|
25
25
|
property 'delayed_price', from: 'delayedPrice' # 15 minute delayed market price
|
26
26
|
property 'delayed_price_time', from: 'delayedPriceTime' # time of the delayed market price
|
27
27
|
property 'extended_price', from: 'extendedPrice' # ?
|
@@ -32,7 +32,7 @@ module IEX
|
|
32
32
|
property 'change_percent_s', from: 'changePercent', with: lambda { |v|
|
33
33
|
if v
|
34
34
|
[
|
35
|
-
v
|
35
|
+
v.positive? ? '+' : '',
|
36
36
|
format('%.2f', v * 100),
|
37
37
|
'%'
|
38
38
|
].join
|
data/lib/iex/version.rb
CHANGED
@@ -0,0 +1,49 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://cloud.iexapis.com/v1/stock/INVALID/earnings?token=test-iex-api-publishable-token
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ""
|
9
|
+
headers:
|
10
|
+
Accept:
|
11
|
+
- application/json; charset=utf-8
|
12
|
+
User-Agent:
|
13
|
+
- IEX Ruby Client/1.0.1
|
14
|
+
Accept-Encoding:
|
15
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 404
|
19
|
+
message: Not Found
|
20
|
+
headers:
|
21
|
+
Server:
|
22
|
+
- nginx
|
23
|
+
Date:
|
24
|
+
- Mon, 08 Jul 2019 05:44:19 GMT
|
25
|
+
Content-Type:
|
26
|
+
- text/html; charset=utf-8
|
27
|
+
Transfer-Encoding:
|
28
|
+
- chunked
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
Set-Cookie:
|
32
|
+
- ctoken=5eb12a74846a4e03b399e201d6853f6a; Max-Age=43200; Path=/; Expires=Mon,
|
33
|
+
08 Jul 2019 17:44:19 GMT
|
34
|
+
Strict-Transport-Security:
|
35
|
+
- max-age=15768000
|
36
|
+
Access-Control-Allow-Origin:
|
37
|
+
- "*"
|
38
|
+
Access-Control-Allow-Credentials:
|
39
|
+
- "true"
|
40
|
+
Access-Control-Allow-Methods:
|
41
|
+
- GET, OPTIONS
|
42
|
+
Access-Control-Allow-Headers:
|
43
|
+
- Origin, X-Requested-With, Content-Type, Accept
|
44
|
+
body:
|
45
|
+
encoding: ASCII-8BIT
|
46
|
+
string: Unknown symbol
|
47
|
+
http_version:
|
48
|
+
recorded_at: Mon, 08 Jul 2019 05:44:19 GMT
|
49
|
+
recorded_with: VCR 4.0.0
|
@@ -0,0 +1,53 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://cloud.iexapis.com/v1/stock/MSFT/income?token=test-iex-api-publishable-token
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ""
|
9
|
+
headers:
|
10
|
+
Accept:
|
11
|
+
- application/json; charset=utf-8
|
12
|
+
User-Agent:
|
13
|
+
- IEX Ruby Client/1.0.1
|
14
|
+
Accept-Encoding:
|
15
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Server:
|
22
|
+
- nginx
|
23
|
+
Date:
|
24
|
+
- Mon, 08 Jul 2019 04:53:26 GMT
|
25
|
+
Content-Type:
|
26
|
+
- application/json; charset=utf-8
|
27
|
+
Transfer-Encoding:
|
28
|
+
- chunked
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
Set-Cookie:
|
32
|
+
- ctoken=153fb65c56854cf995c8112a5cd5f554; Max-Age=43200; Path=/; Expires=Mon,
|
33
|
+
08 Jul 2019 16:53:26 GMT
|
34
|
+
Iexcloud-Messages-Used:
|
35
|
+
- "1000"
|
36
|
+
X-Content-Type-Options:
|
37
|
+
- nosniff
|
38
|
+
Strict-Transport-Security:
|
39
|
+
- max-age=15768000
|
40
|
+
Access-Control-Allow-Origin:
|
41
|
+
- "*"
|
42
|
+
Access-Control-Allow-Credentials:
|
43
|
+
- "true"
|
44
|
+
Access-Control-Allow-Methods:
|
45
|
+
- GET, OPTIONS
|
46
|
+
Access-Control-Allow-Headers:
|
47
|
+
- Origin, X-Requested-With, Content-Type, Accept
|
48
|
+
body:
|
49
|
+
encoding: ASCII-8BIT
|
50
|
+
string: '{"symbol":"MSFT","income":[{"reportDate":"2019-03-31","totalRevenue":30505000000,"costOfRevenue":10170000000,"grossProfit":20335000000,"researchAndDevelopment":4316000000,"sellingGeneralAndAdmin":5744000000,"operatingExpense":20230000000,"operatingIncome":10275000000,"otherIncomeExpenseNet":211000000,"ebit":10275000000,"interestIncome":671000000,"pretaxIncome":10486000000,"incomeTax":1677000000,"minorityInterest":0,"netIncome":8809000000,"netIncomeBasic":8809000000}]}'
|
51
|
+
http_version:
|
52
|
+
recorded_at: Mon, 08 Jul 2019 04:53:26 GMT
|
53
|
+
recorded_with: VCR 4.0.0
|
@@ -19,6 +19,7 @@ describe IEX::Resources::Company do
|
|
19
19
|
expect(subject.sector).to eq 'Technology Services'
|
20
20
|
expect(subject.employees).to eq 131_000
|
21
21
|
expect(subject.security_name).to eq 'Microsoft Corporation'
|
22
|
+
expect(subject.tags).to eq ['Technology Services', 'Packaged Software']
|
22
23
|
end
|
23
24
|
end
|
24
25
|
context 'invalid symbol', vcr: { cassette_name: 'company/invalid' } do
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe IEX::Resources::Income do
|
6
|
+
include_context 'client'
|
7
|
+
|
8
|
+
context 'known symbol' do
|
9
|
+
context 'with defaults', vcr: { cassette_name: 'income/msft' } do
|
10
|
+
subject do
|
11
|
+
client.income('MSFT')
|
12
|
+
end
|
13
|
+
let(:income) { subject.first }
|
14
|
+
|
15
|
+
it 'retrieves income statement' do
|
16
|
+
expect(subject.size).to eq 1
|
17
|
+
expect(income.report_date).to eq '2019-03-31'
|
18
|
+
expect(income.total_revenue).to eq 30_505_000_000
|
19
|
+
expect(income.total_revenue_dollar).to eq '$30,505,000,000'
|
20
|
+
expect(income.cost_of_revenue).to eq 10_170_000_000
|
21
|
+
expect(income.cost_of_revenue_dollar).to eq '$10,170,000,000'
|
22
|
+
expect(income.gross_profit).to eq 20_335_000_000
|
23
|
+
expect(income.gross_profit_dollar).to eq '$20,335,000,000'
|
24
|
+
expect(income.research_and_development).to eq 4_316_000_000
|
25
|
+
expect(income.research_and_development_dollar).to eq '$4,316,000,000'
|
26
|
+
expect(income.selling_general_and_admin).to eq 5_744_000_000
|
27
|
+
expect(income.selling_general_and_admin_dollar).to eq '$5,744,000,000'
|
28
|
+
expect(income.operating_expense).to eq 20_230_000_000
|
29
|
+
expect(income.operating_expense_dollar).to eq '$20,230,000,000'
|
30
|
+
expect(income.operating_income).to eq 10_275_000_000
|
31
|
+
expect(income.operating_income_dollar).to eq '$10,275,000,000'
|
32
|
+
expect(income.other_income_expense_net).to eq 211_000_000
|
33
|
+
expect(income.other_income_expense_net_dollar).to eq '$211,000,000'
|
34
|
+
expect(income.ebit_dollar).to eq '$10,275,000,000'
|
35
|
+
expect(income.ebit).to eq 10_275_000_000
|
36
|
+
expect(income.interest_income).to eq 671_000_000
|
37
|
+
expect(income.interest_income_dollar).to eq '$671,000,000'
|
38
|
+
expect(income.pretax_income).to eq 10_486_000_000
|
39
|
+
expect(income.pretax_income_dollar).to eq '$10,486,000,000'
|
40
|
+
expect(income.income_tax).to eq 1_677_000_000
|
41
|
+
expect(income.income_tax_dollar).to eq '$1,677,000,000'
|
42
|
+
expect(income.minority_interest).to eq 0
|
43
|
+
expect(income.net_income).to eq 8_809_000_000
|
44
|
+
expect(income.net_income_dollar).to eq '$8,809,000,000'
|
45
|
+
expect(income.net_income_basic).to eq 8_809_000_000
|
46
|
+
expect(income.net_income_basic_dollar).to eq '$8,809,000,000'
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'invalid symbol', vcr: { cassette_name: 'income/invalid' } do
|
52
|
+
subject do
|
53
|
+
client.earnings('INVALID')
|
54
|
+
end
|
55
|
+
it 'fails with SymbolNotFoundError' do
|
56
|
+
expect { subject }.to raise_error IEX::Errors::SymbolNotFoundError, 'Symbol INVALID Not Found'
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -10,7 +10,7 @@ describe IEX::Resources::KeyStats do
|
|
10
10
|
it 'retrieves a keyStats' do
|
11
11
|
expect(subject.company_name).to eq 'Microsoft Corp.'
|
12
12
|
expect(subject.market_cap).to eq 990_869_169_557
|
13
|
-
expect(subject.
|
13
|
+
expect(subject.market_cap_dollar).to eq '$990,869,169,557'
|
14
14
|
expect(subject.employees).to eq 133_074
|
15
15
|
end
|
16
16
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iex-ruby-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Doubrovkine
|
@@ -100,14 +100,14 @@ dependencies:
|
|
100
100
|
requirements:
|
101
101
|
- - '='
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: 0.
|
103
|
+
version: 0.72.0
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - '='
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: 0.
|
110
|
+
version: 0.72.0
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: vcr
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -170,6 +170,7 @@ files:
|
|
170
170
|
- lib/iex/endpoints/crypto.rb
|
171
171
|
- lib/iex/endpoints/dividends.rb
|
172
172
|
- lib/iex/endpoints/earnings.rb
|
173
|
+
- lib/iex/endpoints/income.rb
|
173
174
|
- lib/iex/endpoints/key_stats.rb
|
174
175
|
- lib/iex/endpoints/largest_trades.rb
|
175
176
|
- lib/iex/endpoints/logo.rb
|
@@ -189,6 +190,7 @@ files:
|
|
189
190
|
- lib/iex/resources/crypto.rb
|
190
191
|
- lib/iex/resources/dividends.rb
|
191
192
|
- lib/iex/resources/earnings.rb
|
193
|
+
- lib/iex/resources/income.rb
|
192
194
|
- lib/iex/resources/key_stats.rb
|
193
195
|
- lib/iex/resources/largest_trades.rb
|
194
196
|
- lib/iex/resources/logo.rb
|
@@ -216,6 +218,8 @@ files:
|
|
216
218
|
- spec/fixtures/iex/dividends/msft_invalid_range.yml
|
217
219
|
- spec/fixtures/iex/earnings/invalid.yml
|
218
220
|
- spec/fixtures/iex/earnings/msft.yml
|
221
|
+
- spec/fixtures/iex/income/invalid.yml
|
222
|
+
- spec/fixtures/iex/income/msft.yml
|
219
223
|
- spec/fixtures/iex/key_stats/invalid.yml
|
220
224
|
- spec/fixtures/iex/key_stats/msft.yml
|
221
225
|
- spec/fixtures/iex/largest-trades/aapl.yml
|
@@ -239,6 +243,7 @@ files:
|
|
239
243
|
- spec/iex/endpoints/crypto_spec.rb
|
240
244
|
- spec/iex/endpoints/dividends_spec.rb
|
241
245
|
- spec/iex/endpoints/earnings_spec.rb
|
246
|
+
- spec/iex/endpoints/income_spec.rb
|
242
247
|
- spec/iex/endpoints/key_stats_spec.rb
|
243
248
|
- spec/iex/endpoints/largest_trades_spec.rb
|
244
249
|
- spec/iex/endpoints/logo_spec.rb
|
@@ -295,6 +300,8 @@ test_files:
|
|
295
300
|
- spec/fixtures/iex/dividends/msft_invalid_range.yml
|
296
301
|
- spec/fixtures/iex/earnings/invalid.yml
|
297
302
|
- spec/fixtures/iex/earnings/msft.yml
|
303
|
+
- spec/fixtures/iex/income/invalid.yml
|
304
|
+
- spec/fixtures/iex/income/msft.yml
|
298
305
|
- spec/fixtures/iex/key_stats/invalid.yml
|
299
306
|
- spec/fixtures/iex/key_stats/msft.yml
|
300
307
|
- spec/fixtures/iex/largest-trades/aapl.yml
|
@@ -318,6 +325,7 @@ test_files:
|
|
318
325
|
- spec/iex/endpoints/crypto_spec.rb
|
319
326
|
- spec/iex/endpoints/dividends_spec.rb
|
320
327
|
- spec/iex/endpoints/earnings_spec.rb
|
328
|
+
- spec/iex/endpoints/income_spec.rb
|
321
329
|
- spec/iex/endpoints/key_stats_spec.rb
|
322
330
|
- spec/iex/endpoints/largest_trades_spec.rb
|
323
331
|
- spec/iex/endpoints/logo_spec.rb
|