iex-ruby-client 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|