iex-ruby-client 1.4.1 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +5 -0
- data/README.md +35 -13
- data/RELEASING.md +1 -1
- data/lib/iex/api.rb +2 -0
- data/lib/iex/api/client.rb +2 -0
- data/lib/iex/endpoints/fx.rb +13 -0
- data/lib/iex/endpoints/key_stat.rb +14 -0
- data/lib/iex/errors.rb +3 -1
- data/lib/iex/errors/invalid_symbols_list.rb +14 -0
- data/lib/iex/errors/stat_not_found_error.rb +13 -0
- data/lib/iex/resources.rb +1 -0
- data/lib/iex/resources/currency_rate.rb +9 -0
- data/lib/iex/version.rb +1 -1
- data/script/console +9 -0
- data/spec/fixtures/iex/fx/invalid.yml +83 -0
- data/spec/fixtures/iex/fx/latest.yml +85 -0
- data/spec/fixtures/iex/fx/latest_one_symbol.yml +85 -0
- data/spec/fixtures/iex/key_stat/individual.yml +60 -0
- data/spec/fixtures/iex/key_stat/invalid_stat.yml +60 -0
- data/spec/fixtures/iex/key_stat/invalid_symbol.yml +50 -0
- data/spec/iex/endpoints/fx_spec.rb +48 -0
- data/spec/iex/endpoints/key_stat_spec.rb +43 -0
- metadata +29 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ab2cf9c9b5a300629e51b810e4f556ba5d3113a226faa0b2a9293be2939cdb24
|
4
|
+
data.tar.gz: cbab6366388a36eddac8a9e55c4eb4e9e5254cd883f0fe135bdb63d7e359f137
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a08d8c90fdc3a1ac756321711a76d2b65f01d8c5935b160125fcb41751452da65588d5b29ab1f3f000026171c61ceafdb9ce270af62c342c701512e83a706e0
|
7
|
+
data.tar.gz: b6cbac7f892c7e1ce514cb5906180d60d73b66b5a80edb777eb7ac754fad309b9ce8745b08e8ce1c5f4cc27c109f84b558025f70bc53b754c1ef2e0ac4ccd3e4
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
### 1.5.0 (2021/08/15)
|
2
|
+
* [#105](https://github.com/dblock/iex-ruby-client/pull/105): Added support for fetching latest foreign exchange rates - [@mathu97](https://github.com/mathu97).
|
3
|
+
* [#106](https://github.com/dblock/iex-ruby-client/pull/106): Added support for fetching a single key stat with `key_stat(symbol, stat)` endpoint - [@agrberg](https://github.com/agrberg).
|
4
|
+
* [#107](https://github.com/dblock/iex-ruby-client/pull/107): Added `./script/console` for ease of local development - [@agrberg](https://github.com/agrberg).
|
5
|
+
|
1
6
|
### 1.4.1 (2021/05/15)
|
2
7
|
* [#103](https://github.com/dblock/iex-ruby-client/pull/103): Added support for fetching symbols for an exchange - [@mathu97](https://github.com/mathu97).
|
3
8
|
* [#99](https://github.com/dblock/iex-ruby-client/pull/99): Added `image` and `paywalled` to news - [@reddavis](https://github.com/reddavis).
|
data/README.md
CHANGED
@@ -33,6 +33,7 @@ A Ruby client for the [The IEX Cloud API](https://iexcloud.io/docs/api/).
|
|
33
33
|
- [ISIN Mapping](#isin-mapping)
|
34
34
|
- [Get Symbols](#get-symbols)
|
35
35
|
- [Get Symbols for an Exchange](#get-symbols-for-an-exchange)
|
36
|
+
- [Get Latest Foreign Exchange Rates](#get-latest-foreign-exchange-rates)
|
36
37
|
- [Get List](#get-list)
|
37
38
|
- [Other Requests](#other-requests)
|
38
39
|
- [Configuration](#configuration)
|
@@ -157,23 +158,23 @@ NOTE: If you use the `date` value for the `range` parameter:
|
|
157
158
|
This is a complicated endpoint as there is a lot of granularity over the time period of data returned. See below for a variety of ways to request data, NOTE: this is _NOT_ as exhaustive list.
|
158
159
|
|
159
160
|
```ruby
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
161
|
+
historical_prices = client.historical_prices('MSFT') # One month of data
|
162
|
+
historical_prices = client.historical_prices('MSFT', {range: 'max'}) # All data up to 15 years
|
163
|
+
historical_prices = client.historical_prices('MSFT', {range: 'ytd'}) # Year to date data
|
164
|
+
historical_prices = client.historical_prices('MSFT', {range: '5y'}) # 5 years of data
|
165
|
+
historical_prices = client.historical_prices('MSFT', {range: '6m'}) # 6 months of data
|
166
|
+
historical_prices = client.historical_prices('MSFT', {range: '5d'}) # 5 days of data
|
167
|
+
historical_prices = client.historical_prices('MSFT', {range: 'date', date: '20200930', chartByDay: 'true'}) # One day of data
|
168
|
+
historical_prices = client.historical_prices('MSFT', {range: 'date', date: Date.parse('2020-09-30'), chartByDay: 'true'}) # One day of data
|
168
169
|
...
|
169
170
|
```
|
170
171
|
|
171
172
|
Once you have the data over the preferred time period, you can access the following fields
|
172
173
|
|
173
174
|
```ruby
|
174
|
-
|
175
|
+
historical_prices = client.historical_prices('MSFT') # One month of data
|
175
176
|
|
176
|
-
|
177
|
+
historical_price = historical_prices.first
|
177
178
|
historical_price.date # 2020-10-07
|
178
179
|
historical_price.open #207.06
|
179
180
|
historical_price.open_dollar # '$207.06'
|
@@ -322,6 +323,12 @@ key_stats.pe_ratio # 29.47
|
|
322
323
|
key_stats.beta # 1.4135449089973444
|
323
324
|
```
|
324
325
|
|
326
|
+
You can also fetch a single stat for a symbol. **Note** that IEX uses `lowerCamelCase` for the names of the stats.
|
327
|
+
|
328
|
+
```ruby
|
329
|
+
client.key_stat('VTI', 'dividendYield') # 0.01271760965303361
|
330
|
+
```
|
331
|
+
|
325
332
|
See [#key-stats](https://iexcloud.io/docs/api/#key-stats) for detailed documentation or [key_stats.rb](lib/iex/resources/key_stats.rb) for returned fields.
|
326
333
|
|
327
334
|
### Get Advanced Stats
|
@@ -555,7 +562,7 @@ See [#ISIN Mapping](https://iexcloud.io/docs/api/#isin-mapping) for detailed doc
|
|
555
562
|
|
556
563
|
### Get Symbols
|
557
564
|
|
558
|
-
Returns an array of symbols
|
565
|
+
Returns an array of symbols.
|
559
566
|
|
560
567
|
```ruby
|
561
568
|
symbols = client.ref_data_symbols()
|
@@ -571,7 +578,7 @@ See [#symbols](https://iexcloud.io/docs/api/#symbols) for detailed documentation
|
|
571
578
|
|
572
579
|
### Get Symbols for an Exchange
|
573
580
|
|
574
|
-
Returns an array of symbols for a given exchange
|
581
|
+
Returns an array of symbols for a given exchange.
|
575
582
|
|
576
583
|
```ruby
|
577
584
|
symbols = client.ref_data_symbols_for_exchange('TSX')
|
@@ -583,7 +590,22 @@ symbol.region # CA
|
|
583
590
|
symbol.symbol # A-CV
|
584
591
|
```
|
585
592
|
|
586
|
-
See [#international-symbols](https://iexcloud.io/docs/api/#international-symbols).
|
593
|
+
See [#international-symbols](https://iexcloud.io/docs/api/#international-symbols) for returned fields.
|
594
|
+
|
595
|
+
### Get Latest Foreign Exchange Rates
|
596
|
+
|
597
|
+
Returns an array of foreign exchange rates for a given list of symbols.
|
598
|
+
|
599
|
+
```ruby
|
600
|
+
rates = client.fx_latest(['USDCAD', 'USDGBP', 'USDJPY'])
|
601
|
+
|
602
|
+
rate = rates.first
|
603
|
+
rate.symbol # USDCAD
|
604
|
+
rate.rate # 1.25674
|
605
|
+
rate.timestamp # <Date: 2021-07-23 ((2459419j,0s,0n),+0s,2299161j)>
|
606
|
+
```
|
607
|
+
|
608
|
+
See [#latest-currency-rates](https://iexcloud.io/docs/api/#latest-currency-rates) for returned fields.
|
587
609
|
|
588
610
|
### Get List
|
589
611
|
|
data/RELEASING.md
CHANGED
@@ -11,7 +11,7 @@ bundle install
|
|
11
11
|
rake
|
12
12
|
```
|
13
13
|
|
14
|
-
Check that the last build succeeded in [Travis CI](https://travis-ci.
|
14
|
+
Check that the last build succeeded in [Travis CI](https://travis-ci.com/github/dblock/iex-ruby-client) for all supported platforms.
|
15
15
|
|
16
16
|
Change "Next" in [CHANGELOG.md](CHANGELOG.md) to the current date.
|
17
17
|
|
data/lib/iex/api.rb
CHANGED
@@ -5,10 +5,12 @@ require_relative 'endpoints/chart'
|
|
5
5
|
require_relative 'endpoints/company'
|
6
6
|
require_relative 'endpoints/dividends'
|
7
7
|
require_relative 'endpoints/earnings'
|
8
|
+
require_relative 'endpoints/fx'
|
8
9
|
require_relative 'endpoints/historial_prices'
|
9
10
|
require_relative 'endpoints/income'
|
10
11
|
require_relative 'endpoints/largest_trades'
|
11
12
|
require_relative 'endpoints/logo'
|
13
|
+
require_relative 'endpoints/key_stat'
|
12
14
|
require_relative 'endpoints/key_stats'
|
13
15
|
require_relative 'endpoints/news'
|
14
16
|
require_relative 'endpoints/ohlc'
|
data/lib/iex/api/client.rb
CHANGED
@@ -12,8 +12,10 @@ module IEX
|
|
12
12
|
include Endpoints::Crypto
|
13
13
|
include Endpoints::Dividends
|
14
14
|
include Endpoints::Earnings
|
15
|
+
include Endpoints::FX
|
15
16
|
include Endpoints::HistoricalPrices
|
16
17
|
include Endpoints::Income
|
18
|
+
include Endpoints::KeyStat
|
17
19
|
include Endpoints::KeyStats
|
18
20
|
include Endpoints::LargestTrades
|
19
21
|
include Endpoints::Logo
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module IEX
|
2
|
+
module Endpoints
|
3
|
+
module FX
|
4
|
+
def fx_latest(symbols, options = {})
|
5
|
+
symbols = Array(symbols)
|
6
|
+
response = get('fx/latest', { token: publishable_token, symbols: symbols.join(',') }.merge(options))
|
7
|
+
response.map { |row| IEX::Resources::CurrencyRate.new(row) }
|
8
|
+
rescue Faraday::ResourceNotFound => e
|
9
|
+
raise IEX::Errors::InvalidSymbolsList.new(symbols, e.response[:body])
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module IEX
|
2
|
+
module Endpoints
|
3
|
+
module KeyStat
|
4
|
+
def key_stat(symbol, stat, options = {})
|
5
|
+
result = get("stock/#{symbol}/stats/#{stat}", { token: publishable_token }.merge(options))
|
6
|
+
raise IEX::Errors::StatNotFoundError.new(stat, result) if result.is_a?(Hash)
|
7
|
+
|
8
|
+
result
|
9
|
+
rescue Faraday::ResourceNotFound => e
|
10
|
+
raise IEX::Errors::SymbolNotFoundError.new(symbol, e.response[:body])
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/iex/errors.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
-
require_relative 'errors/symbol_not_found_error'
|
2
1
|
require_relative 'errors/client_error'
|
2
|
+
require_relative 'errors/invalid_symbols_list'
|
3
3
|
require_relative 'errors/permission_denied_error'
|
4
|
+
require_relative 'errors/stat_not_found_error'
|
5
|
+
require_relative 'errors/symbol_not_found_error'
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module IEX
|
2
|
+
module Errors
|
3
|
+
class InvalidSymbolsList < StandardError
|
4
|
+
attr_reader :symbols
|
5
|
+
attr_reader :response
|
6
|
+
|
7
|
+
def initialize(symbols, response)
|
8
|
+
@response = response
|
9
|
+
@symbols = symbols
|
10
|
+
super "Invalid symbol list: #{symbols.join(',')}"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/iex/resources.rb
CHANGED
@@ -4,6 +4,7 @@ require_relative 'resources/advanced_stats'
|
|
4
4
|
require_relative 'resources/balance_sheet'
|
5
5
|
require_relative 'resources/cash_flow'
|
6
6
|
require_relative 'resources/chart'
|
7
|
+
require_relative 'resources/currency_rate'
|
7
8
|
require_relative 'resources/company'
|
8
9
|
require_relative 'resources/dividends'
|
9
10
|
require_relative 'resources/earnings'
|
data/lib/iex/version.rb
CHANGED
data/script/console
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://cloud.iexapis.com/v1/fx/latest?symbols=INVALID&token=test-iex-api-publishable-token
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ""
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.15.4
|
12
|
+
Accept-Encoding:
|
13
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
|
+
Accept:
|
15
|
+
- "*/*"
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 404
|
19
|
+
message: Not Found
|
20
|
+
headers:
|
21
|
+
Server:
|
22
|
+
- nginx
|
23
|
+
Date:
|
24
|
+
- Fri, 05 Apr 2019 02:59:49 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=333d7c703c954832b14c34cb8cca7b3a; Max-Age=43200; Path=/; Expires=Fri,
|
33
|
+
05 Apr 2019 14:59:49 GMT
|
34
|
+
Content-Security-Policy:
|
35
|
+
- "default-src 'self'; child-src 'none'; object-src 'self'; style-src
|
36
|
+
'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self'
|
37
|
+
https://js.intercomcdn.com/fonts/ https://fonts.gstatic.com; frame-src 'self'
|
38
|
+
https://portal.productboard.com/ https://js.stripe.com/; img-src 'self'
|
39
|
+
data: https://*.intercomcdn.com/ https://static.intercomassets.com/ https://www.google-analytics.com
|
40
|
+
https://downloads.intercomcdn.com/; connect-src 'self' https://auth.iexcloud.io
|
41
|
+
https://api.iexcloud.io https://api.iexcloud.io https://cloud.iexapis.com
|
42
|
+
wss://iexcloud.io wss://tops.iexcloud.io wss://api.iexcloud.io wss://iexcloud.io
|
43
|
+
https://api-iam.intercom.io/messenger/ https://nexus-websocket-a.intercom.io/
|
44
|
+
https://nexus-websocket-b.intercom.io/ wss://nexus-websocket-a.intercom.io/
|
45
|
+
wss://nexus-websocket-b.intercom.io/ https://www.google-analytics.com; script-src
|
46
|
+
'self' 'unsafe-inline' 'unsafe-eval' https://www.google.com/recaptcha/api.js
|
47
|
+
https://www.google-analytics.com https://js.stripe.com/v3/ https://widget.intercom.io/widget/lhos563b
|
48
|
+
https://js.intercomcdn.com/ https://www.googletagmanager.com;"
|
49
|
+
X-Content-Security-Policy:
|
50
|
+
- "default-src 'self'; child-src 'none'; object-src 'self'; style-src
|
51
|
+
'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self'
|
52
|
+
https://js.intercomcdn.com/fonts/ https://fonts.gstatic.com; frame-src 'self'
|
53
|
+
https://portal.productboard.com/ https://js.stripe.com/; img-src 'self'
|
54
|
+
data: https://*.intercomcdn.com/ https://static.intercomassets.com/ https://www.google-analytics.com
|
55
|
+
https://downloads.intercomcdn.com/; connect-src 'self' https://auth.iexcloud.io
|
56
|
+
https://api.iexcloud.io https://api.iexcloud.io https://cloud.iexapis.com
|
57
|
+
wss://iexcloud.io wss://tops.iexcloud.io wss://api.iexcloud.io wss://iexcloud.io
|
58
|
+
https://api-iam.intercom.io/messenger/ https://nexus-websocket-a.intercom.io/
|
59
|
+
https://nexus-websocket-b.intercom.io/ wss://nexus-websocket-a.intercom.io/
|
60
|
+
wss://nexus-websocket-b.intercom.io/ https://www.google-analytics.com; script-src
|
61
|
+
'self' 'unsafe-inline' 'unsafe-eval' https://www.google.com/recaptcha/api.js
|
62
|
+
https://www.google-analytics.com https://js.stripe.com/v3/ https://widget.intercom.io/widget/lhos563b
|
63
|
+
https://js.intercomcdn.com/ https://www.googletagmanager.com;"
|
64
|
+
Frame-Options:
|
65
|
+
- SAMEORIGIN
|
66
|
+
X-Frame-Options:
|
67
|
+
- SAMEORIGIN
|
68
|
+
Strict-Transport-Security:
|
69
|
+
- max-age=15768000
|
70
|
+
Access-Control-Allow-Origin:
|
71
|
+
- "*"
|
72
|
+
Access-Control-Allow-Credentials:
|
73
|
+
- "true"
|
74
|
+
Access-Control-Allow-Methods:
|
75
|
+
- GET, OPTIONS
|
76
|
+
Access-Control-Allow-Headers:
|
77
|
+
- Origin, X-Requested-With, Content-Type, Accept
|
78
|
+
body:
|
79
|
+
encoding: ASCII-8BIT
|
80
|
+
string: Unknown symbol
|
81
|
+
http_version:
|
82
|
+
recorded_at: Fri, 05 Apr 2019 02:59:49 GMT
|
83
|
+
recorded_with: VCR 4.0.0
|
@@ -0,0 +1,85 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://cloud.iexapis.com/v1/fx/latest?symbols=USDCAD,USDGBP,USDJPY&token=test-iex-api-publishable-token
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ""
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.15.4
|
12
|
+
Accept-Encoding:
|
13
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
|
+
Accept:
|
15
|
+
- "*/*"
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Server:
|
22
|
+
- nginx
|
23
|
+
Date:
|
24
|
+
- Fri, 05 Apr 2019 02:59:48 GMT
|
25
|
+
Content-Type:
|
26
|
+
- application/json; charset=utf-8
|
27
|
+
Content-Length:
|
28
|
+
- "6"
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
Set-Cookie:
|
32
|
+
- ctoken=3859f7adf5e24bb0ac6a2283b1d2c588; Max-Age=43200; Path=/; Expires=Fri,
|
33
|
+
05 Apr 2019 14:59:48 GMT
|
34
|
+
Content-Security-Policy:
|
35
|
+
- "default-src 'self'; child-src 'none'; object-src 'self'; style-src
|
36
|
+
'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self'
|
37
|
+
https://js.intercomcdn.com/fonts/ https://fonts.gstatic.com; frame-src 'self'
|
38
|
+
https://portal.productboard.com/ https://js.stripe.com/; img-src 'self'
|
39
|
+
data: https://*.intercomcdn.com/ https://static.intercomassets.com/ https://www.google-analytics.com
|
40
|
+
https://downloads.intercomcdn.com/; connect-src 'self' https://auth.iexcloud.io
|
41
|
+
https://api.iexcloud.io https://api.iexcloud.io https://cloud.iexapis.com
|
42
|
+
wss://iexcloud.io wss://tops.iexcloud.io wss://api.iexcloud.io wss://iexcloud.io
|
43
|
+
https://api-iam.intercom.io/messenger/ https://nexus-websocket-a.intercom.io/
|
44
|
+
https://nexus-websocket-b.intercom.io/ wss://nexus-websocket-a.intercom.io/
|
45
|
+
wss://nexus-websocket-b.intercom.io/ https://www.google-analytics.com; script-src
|
46
|
+
'self' 'unsafe-inline' 'unsafe-eval' https://www.google.com/recaptcha/api.js
|
47
|
+
https://www.google-analytics.com https://js.stripe.com/v3/ https://widget.intercom.io/widget/lhos563b
|
48
|
+
https://js.intercomcdn.com/ https://www.googletagmanager.com;"
|
49
|
+
X-Content-Security-Policy:
|
50
|
+
- "default-src 'self'; child-src 'none'; object-src 'self'; style-src
|
51
|
+
'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self'
|
52
|
+
https://js.intercomcdn.com/fonts/ https://fonts.gstatic.com; frame-src 'self'
|
53
|
+
https://portal.productboard.com/ https://js.stripe.com/; img-src 'self'
|
54
|
+
data: https://*.intercomcdn.com/ https://static.intercomassets.com/ https://www.google-analytics.com
|
55
|
+
https://downloads.intercomcdn.com/; connect-src 'self' https://auth.iexcloud.io
|
56
|
+
https://api.iexcloud.io https://api.iexcloud.io https://cloud.iexapis.com
|
57
|
+
wss://iexcloud.io wss://tops.iexcloud.io wss://api.iexcloud.io wss://iexcloud.io
|
58
|
+
https://api-iam.intercom.io/messenger/ https://nexus-websocket-a.intercom.io/
|
59
|
+
https://nexus-websocket-b.intercom.io/ wss://nexus-websocket-a.intercom.io/
|
60
|
+
wss://nexus-websocket-b.intercom.io/ https://www.google-analytics.com; script-src
|
61
|
+
'self' 'unsafe-inline' 'unsafe-eval' https://www.google.com/recaptcha/api.js
|
62
|
+
https://www.google-analytics.com https://js.stripe.com/v3/ https://widget.intercom.io/widget/lhos563b
|
63
|
+
https://js.intercomcdn.com/ https://www.googletagmanager.com;"
|
64
|
+
Frame-Options:
|
65
|
+
- SAMEORIGIN
|
66
|
+
X-Frame-Options:
|
67
|
+
- SAMEORIGIN
|
68
|
+
X-Content-Type-Options:
|
69
|
+
- nosniff
|
70
|
+
Strict-Transport-Security:
|
71
|
+
- max-age=15768000
|
72
|
+
Access-Control-Allow-Origin:
|
73
|
+
- "*"
|
74
|
+
Access-Control-Allow-Credentials:
|
75
|
+
- "true"
|
76
|
+
Access-Control-Allow-Methods:
|
77
|
+
- GET, OPTIONS
|
78
|
+
Access-Control-Allow-Headers:
|
79
|
+
- Origin, X-Requested-With, Content-Type, Accept
|
80
|
+
body:
|
81
|
+
encoding: ASCII-8BIT
|
82
|
+
string: '[{"symbol":"USDCAD","rate":1.25674,"timestamp":1627045829863,"isDerived":false},{"symbol":"USDGBP","rate":0.7262111386264443,"timestamp":1627045780863,"isDerived":false},{"symbol":"USDJPY","rate":110.426,"timestamp":1627045825365,"isDerived":false}]'
|
83
|
+
http_version:
|
84
|
+
recorded_at: Fri, 05 Apr 2019 02:59:48 GMT
|
85
|
+
recorded_with: VCR 4.0.0
|
@@ -0,0 +1,85 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://cloud.iexapis.com/v1/fx/latest?symbols=USDCAD&token=test-iex-api-publishable-token
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ""
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.15.4
|
12
|
+
Accept-Encoding:
|
13
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
|
+
Accept:
|
15
|
+
- "*/*"
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Server:
|
22
|
+
- nginx
|
23
|
+
Date:
|
24
|
+
- Fri, 05 Apr 2019 02:59:48 GMT
|
25
|
+
Content-Type:
|
26
|
+
- application/json; charset=utf-8
|
27
|
+
Content-Length:
|
28
|
+
- "6"
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
Set-Cookie:
|
32
|
+
- ctoken=3859f7adf5e24bb0ac6a2283b1d2c588; Max-Age=43200; Path=/; Expires=Fri,
|
33
|
+
05 Apr 2019 14:59:48 GMT
|
34
|
+
Content-Security-Policy:
|
35
|
+
- "default-src 'self'; child-src 'none'; object-src 'self'; style-src
|
36
|
+
'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self'
|
37
|
+
https://js.intercomcdn.com/fonts/ https://fonts.gstatic.com; frame-src 'self'
|
38
|
+
https://portal.productboard.com/ https://js.stripe.com/; img-src 'self'
|
39
|
+
data: https://*.intercomcdn.com/ https://static.intercomassets.com/ https://www.google-analytics.com
|
40
|
+
https://downloads.intercomcdn.com/; connect-src 'self' https://auth.iexcloud.io
|
41
|
+
https://api.iexcloud.io https://api.iexcloud.io https://cloud.iexapis.com
|
42
|
+
wss://iexcloud.io wss://tops.iexcloud.io wss://api.iexcloud.io wss://iexcloud.io
|
43
|
+
https://api-iam.intercom.io/messenger/ https://nexus-websocket-a.intercom.io/
|
44
|
+
https://nexus-websocket-b.intercom.io/ wss://nexus-websocket-a.intercom.io/
|
45
|
+
wss://nexus-websocket-b.intercom.io/ https://www.google-analytics.com; script-src
|
46
|
+
'self' 'unsafe-inline' 'unsafe-eval' https://www.google.com/recaptcha/api.js
|
47
|
+
https://www.google-analytics.com https://js.stripe.com/v3/ https://widget.intercom.io/widget/lhos563b
|
48
|
+
https://js.intercomcdn.com/ https://www.googletagmanager.com;"
|
49
|
+
X-Content-Security-Policy:
|
50
|
+
- "default-src 'self'; child-src 'none'; object-src 'self'; style-src
|
51
|
+
'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self'
|
52
|
+
https://js.intercomcdn.com/fonts/ https://fonts.gstatic.com; frame-src 'self'
|
53
|
+
https://portal.productboard.com/ https://js.stripe.com/; img-src 'self'
|
54
|
+
data: https://*.intercomcdn.com/ https://static.intercomassets.com/ https://www.google-analytics.com
|
55
|
+
https://downloads.intercomcdn.com/; connect-src 'self' https://auth.iexcloud.io
|
56
|
+
https://api.iexcloud.io https://api.iexcloud.io https://cloud.iexapis.com
|
57
|
+
wss://iexcloud.io wss://tops.iexcloud.io wss://api.iexcloud.io wss://iexcloud.io
|
58
|
+
https://api-iam.intercom.io/messenger/ https://nexus-websocket-a.intercom.io/
|
59
|
+
https://nexus-websocket-b.intercom.io/ wss://nexus-websocket-a.intercom.io/
|
60
|
+
wss://nexus-websocket-b.intercom.io/ https://www.google-analytics.com; script-src
|
61
|
+
'self' 'unsafe-inline' 'unsafe-eval' https://www.google.com/recaptcha/api.js
|
62
|
+
https://www.google-analytics.com https://js.stripe.com/v3/ https://widget.intercom.io/widget/lhos563b
|
63
|
+
https://js.intercomcdn.com/ https://www.googletagmanager.com;"
|
64
|
+
Frame-Options:
|
65
|
+
- SAMEORIGIN
|
66
|
+
X-Frame-Options:
|
67
|
+
- SAMEORIGIN
|
68
|
+
X-Content-Type-Options:
|
69
|
+
- nosniff
|
70
|
+
Strict-Transport-Security:
|
71
|
+
- max-age=15768000
|
72
|
+
Access-Control-Allow-Origin:
|
73
|
+
- "*"
|
74
|
+
Access-Control-Allow-Credentials:
|
75
|
+
- "true"
|
76
|
+
Access-Control-Allow-Methods:
|
77
|
+
- GET, OPTIONS
|
78
|
+
Access-Control-Allow-Headers:
|
79
|
+
- Origin, X-Requested-With, Content-Type, Accept
|
80
|
+
body:
|
81
|
+
encoding: ASCII-8BIT
|
82
|
+
string: '[{"symbol":"USDCAD","rate":1.25674,"timestamp":1627045829863}]'
|
83
|
+
http_version:
|
84
|
+
recorded_at: Fri, 05 Apr 2019 02:59:48 GMT
|
85
|
+
recorded_with: VCR 4.0.0
|
@@ -0,0 +1,60 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://cloud.iexapis.com/v1/stock/VTI/stats/ttmDividendRate?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
|
+
Content-Type:
|
13
|
+
- application/json; charset=utf-8
|
14
|
+
User-Agent:
|
15
|
+
- IEX Ruby Client/1.4.2
|
16
|
+
Accept-Encoding:
|
17
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 200
|
21
|
+
message: OK
|
22
|
+
headers:
|
23
|
+
Server:
|
24
|
+
- nginx
|
25
|
+
Date:
|
26
|
+
- Thu, 12 Aug 2021 20:04:24 GMT
|
27
|
+
Content-Type:
|
28
|
+
- application/json; charset=utf-8
|
29
|
+
Content-Length:
|
30
|
+
- '18'
|
31
|
+
Connection:
|
32
|
+
- keep-alive
|
33
|
+
Set-Cookie:
|
34
|
+
- ctoken=8df9fdfb440744638edd9bfdc8e0d27b; Max-Age=43200; Path=/; Expires=Fri,
|
35
|
+
13 Aug 2021 08:04:24 GMT
|
36
|
+
Iexcloud-Messages-Used:
|
37
|
+
- '2'
|
38
|
+
Iexcloud-Credits-Used:
|
39
|
+
- '2'
|
40
|
+
Iexcloud-Premium-Messages-Used:
|
41
|
+
- '0'
|
42
|
+
Iexcloud-Premium-Credits-Used:
|
43
|
+
- '0'
|
44
|
+
X-Content-Type-Options:
|
45
|
+
- nosniff
|
46
|
+
Strict-Transport-Security:
|
47
|
+
- max-age=15768000
|
48
|
+
Access-Control-Allow-Origin:
|
49
|
+
- "*"
|
50
|
+
Access-Control-Allow-Credentials:
|
51
|
+
- 'true'
|
52
|
+
Access-Control-Allow-Methods:
|
53
|
+
- GET, OPTIONS
|
54
|
+
Access-Control-Allow-Headers:
|
55
|
+
- Origin, X-Requested-With, Content-Type, Accept, Request-Source
|
56
|
+
body:
|
57
|
+
encoding: UTF-8
|
58
|
+
string: '2.7887693754001748'
|
59
|
+
recorded_at: Thu, 12 Aug 2021 20:04:24 GMT
|
60
|
+
recorded_with: VCR 6.0.0
|
@@ -0,0 +1,60 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://cloud.iexapis.com/v1/stock/VTI/stats/INVALID?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
|
+
Content-Type:
|
13
|
+
- application/json; charset=utf-8
|
14
|
+
User-Agent:
|
15
|
+
- IEX Ruby Client/1.4.2
|
16
|
+
Accept-Encoding:
|
17
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 200
|
21
|
+
message: OK
|
22
|
+
headers:
|
23
|
+
Server:
|
24
|
+
- nginx
|
25
|
+
Date:
|
26
|
+
- Fri, 13 Aug 2021 17:45:21 GMT
|
27
|
+
Content-Type:
|
28
|
+
- application/json; charset=utf-8
|
29
|
+
Transfer-Encoding:
|
30
|
+
- chunked
|
31
|
+
Connection:
|
32
|
+
- keep-alive
|
33
|
+
Set-Cookie:
|
34
|
+
- ctoken=f9f32af4b36f4a1bac8e9b2ff9018275; Max-Age=43200; Path=/; Expires=Sat,
|
35
|
+
14 Aug 2021 05:45:21 GMT
|
36
|
+
Iexcloud-Messages-Used:
|
37
|
+
- '6'
|
38
|
+
Iexcloud-Credits-Used:
|
39
|
+
- '6'
|
40
|
+
Iexcloud-Premium-Messages-Used:
|
41
|
+
- '0'
|
42
|
+
Iexcloud-Premium-Credits-Used:
|
43
|
+
- '0'
|
44
|
+
X-Content-Type-Options:
|
45
|
+
- nosniff
|
46
|
+
Strict-Transport-Security:
|
47
|
+
- max-age=15768000
|
48
|
+
Access-Control-Allow-Origin:
|
49
|
+
- "*"
|
50
|
+
Access-Control-Allow-Credentials:
|
51
|
+
- 'true'
|
52
|
+
Access-Control-Allow-Methods:
|
53
|
+
- GET, OPTIONS
|
54
|
+
Access-Control-Allow-Headers:
|
55
|
+
- Origin, X-Requested-With, Content-Type, Accept, Request-Source
|
56
|
+
body:
|
57
|
+
encoding: ASCII-8BIT
|
58
|
+
string: '{"companyName":"Vanguard Group, Inc.","marketcap":260737447690,"week52high":230.02,"week52low":160.5,"week52highSplitAdjustOnly":230.02,"week52lowSplitAdjustOnly":162.85,"week52change":0.3645993202513256,"sharesOutstanding":1133542508,"float":0,"avg10Volume":2888645,"avg30Volume":3320395,"day200MovingAvg":213.89,"day50MovingAvg":225.73,"employees":0,"ttmEPS":0,"ttmDividendRate":2.788769375400175,"dividendYield":0.012124029977394032,"nextDividendDate":"","exDividendDate":"2021-06-24","nextEarningsDate":"","peRatio":0,"beta":1.0132372909433216,"maxChangePercent":3.578068183401369,"year5ChangePercent":1.249480952953752,"year2ChangePercent":0.6180018710916342,"year1ChangePercent":0.3635630717574918,"ytdChangePercent":0.1893429658290111,"month6ChangePercent":0.1156861042707178,"month3ChangePercent":0.10073637646122013,"month1ChangePercent":0.015496004591408763,"day30ChangePercent":0.021176470588235352,"day5ChangePercent":0.006255741720985197}'
|
59
|
+
recorded_at: Fri, 13 Aug 2021 17:45:21 GMT
|
60
|
+
recorded_with: VCR 6.0.0
|
@@ -0,0 +1,50 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://cloud.iexapis.com/v1/stock/INVALID/stats/ttmDividendRate?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
|
+
Content-Type:
|
13
|
+
- application/json; charset=utf-8
|
14
|
+
User-Agent:
|
15
|
+
- IEX Ruby Client/1.4.2
|
16
|
+
Accept-Encoding:
|
17
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 404
|
21
|
+
message: Not Found
|
22
|
+
headers:
|
23
|
+
Server:
|
24
|
+
- nginx
|
25
|
+
Date:
|
26
|
+
- Fri, 13 Aug 2021 17:45:20 GMT
|
27
|
+
Content-Type:
|
28
|
+
- text/html; charset=utf-8
|
29
|
+
Transfer-Encoding:
|
30
|
+
- chunked
|
31
|
+
Connection:
|
32
|
+
- keep-alive
|
33
|
+
Set-Cookie:
|
34
|
+
- ctoken=8e6f76d57e134a4ca1be468312f5f33c; Max-Age=43200; Path=/; Expires=Sat,
|
35
|
+
14 Aug 2021 05:45:20 GMT
|
36
|
+
Strict-Transport-Security:
|
37
|
+
- max-age=15768000
|
38
|
+
Access-Control-Allow-Origin:
|
39
|
+
- "*"
|
40
|
+
Access-Control-Allow-Credentials:
|
41
|
+
- 'true'
|
42
|
+
Access-Control-Allow-Methods:
|
43
|
+
- GET, OPTIONS
|
44
|
+
Access-Control-Allow-Headers:
|
45
|
+
- Origin, X-Requested-With, Content-Type, Accept, Request-Source
|
46
|
+
body:
|
47
|
+
encoding: ASCII-8BIT
|
48
|
+
string: Unknown symbol
|
49
|
+
recorded_at: Fri, 13 Aug 2021 17:45:20 GMT
|
50
|
+
recorded_with: VCR 6.0.0
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe IEX::Endpoints::FX do
|
4
|
+
include_context 'client'
|
5
|
+
|
6
|
+
context 'known symbol', vcr: { cassette_name: 'fx/latest_one_symbol' } do
|
7
|
+
subject do
|
8
|
+
client.fx_latest('USDCAD')
|
9
|
+
end
|
10
|
+
it 'retrieves a list of CurrencyRates' do
|
11
|
+
expect(subject.length).to eq 1
|
12
|
+
|
13
|
+
expect(subject[0].symbol).to eq 'USDCAD'
|
14
|
+
expect(subject[0].rate).to eq 1.25674
|
15
|
+
expect(subject[0].timestamp).to eq Date.strptime('1627045829.863', '%s')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'known symbols', vcr: { cassette_name: 'fx/latest' } do
|
20
|
+
subject do
|
21
|
+
client.fx_latest(%w[USDCAD USDGBP USDJPY])
|
22
|
+
end
|
23
|
+
it 'retrieves a list of CurrencyRates' do
|
24
|
+
expect(subject.length).to eq 3
|
25
|
+
|
26
|
+
expect(subject[0].symbol).to eq 'USDCAD'
|
27
|
+
expect(subject[0].rate).to eq 1.25674
|
28
|
+
expect(subject[0].timestamp).to eq Date.strptime('1627045829.863', '%s')
|
29
|
+
|
30
|
+
expect(subject[1].symbol).to eq 'USDGBP'
|
31
|
+
expect(subject[1].rate).to eq 0.7262111386264443
|
32
|
+
expect(subject[1].timestamp).to eq Date.strptime('1627045780.863', '%s')
|
33
|
+
|
34
|
+
expect(subject[2].symbol).to eq 'USDJPY'
|
35
|
+
expect(subject[2].rate).to eq 110.426
|
36
|
+
expect(subject[2].timestamp).to eq Date.strptime('1627045825.365', '%s')
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'invalid symbol', vcr: { cassette_name: 'fx/invalid' } do
|
41
|
+
subject do
|
42
|
+
client.fx_latest(%w[INVALID])
|
43
|
+
end
|
44
|
+
it 'fails with InvalidSymbolsList' do
|
45
|
+
expect { subject }.to raise_error IEX::Errors::InvalidSymbolsList, 'Invalid symbol list: INVALID'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe IEX::Endpoints::KeyStat do
|
4
|
+
include_context 'client'
|
5
|
+
|
6
|
+
let(:stat) { 'ttmDividendRate' }
|
7
|
+
let(:symbol) { 'VTI' }
|
8
|
+
|
9
|
+
context 'when asking for a single stat', vcr: { cassette_name: 'key_stat/individual' } do
|
10
|
+
subject { client.key_stat(symbol, stat) }
|
11
|
+
|
12
|
+
it 'returns that stat in the type provided by the API' do
|
13
|
+
expect(subject).to be_within(0.0001).of(2.7887)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'invalid symbol', vcr: { cassette_name: 'key_stat/invalid_symbol' } do
|
18
|
+
subject { client.key_stat('INVALID', stat) }
|
19
|
+
|
20
|
+
it 'fails with SymbolNotFoundError' do
|
21
|
+
expect { subject }.to raise_error IEX::Errors::SymbolNotFoundError, 'Symbol INVALID Not Found'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'invalid stat', vcr: { cassette_name: 'key_stat/invalid_stat' } do
|
26
|
+
subject { client.key_stat(symbol, 'INVALID') }
|
27
|
+
|
28
|
+
it 'fails with StatNotFoundError' do
|
29
|
+
expect { subject }.to raise_error IEX::Errors::StatNotFoundError, 'Stat INVALID Not Found'
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'keeps the API response so it can be used if caught' do
|
33
|
+
response = begin
|
34
|
+
subject
|
35
|
+
rescue IEX::Errors::StatNotFoundError => e
|
36
|
+
e.response
|
37
|
+
end
|
38
|
+
|
39
|
+
expect(response).to be_a(Hash)
|
40
|
+
expect(response).to have_key(stat)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
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.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Doubrovkine
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-08-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -136,7 +136,7 @@ dependencies:
|
|
136
136
|
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
|
-
description:
|
139
|
+
description:
|
140
140
|
email: dblock@dblock.org
|
141
141
|
executables: []
|
142
142
|
extensions: []
|
@@ -176,8 +176,10 @@ files:
|
|
176
176
|
- lib/iex/endpoints/crypto.rb
|
177
177
|
- lib/iex/endpoints/dividends.rb
|
178
178
|
- lib/iex/endpoints/earnings.rb
|
179
|
+
- lib/iex/endpoints/fx.rb
|
179
180
|
- lib/iex/endpoints/historial_prices.rb
|
180
181
|
- lib/iex/endpoints/income.rb
|
182
|
+
- lib/iex/endpoints/key_stat.rb
|
181
183
|
- lib/iex/endpoints/key_stats.rb
|
182
184
|
- lib/iex/endpoints/largest_trades.rb
|
183
185
|
- lib/iex/endpoints/logo.rb
|
@@ -190,7 +192,9 @@ files:
|
|
190
192
|
- lib/iex/endpoints/stock_market.rb
|
191
193
|
- lib/iex/errors.rb
|
192
194
|
- lib/iex/errors/client_error.rb
|
195
|
+
- lib/iex/errors/invalid_symbols_list.rb
|
193
196
|
- lib/iex/errors/permission_denied_error.rb
|
197
|
+
- lib/iex/errors/stat_not_found_error.rb
|
194
198
|
- lib/iex/errors/symbol_not_found_error.rb
|
195
199
|
- lib/iex/logger.rb
|
196
200
|
- lib/iex/resources.rb
|
@@ -200,6 +204,7 @@ files:
|
|
200
204
|
- lib/iex/resources/chart.rb
|
201
205
|
- lib/iex/resources/company.rb
|
202
206
|
- lib/iex/resources/crypto.rb
|
207
|
+
- lib/iex/resources/currency_rate.rb
|
203
208
|
- lib/iex/resources/dividends.rb
|
204
209
|
- lib/iex/resources/earnings.rb
|
205
210
|
- lib/iex/resources/historical_prices.rb
|
@@ -215,6 +220,7 @@ files:
|
|
215
220
|
- lib/iex/resources/symbol.rb
|
216
221
|
- lib/iex/resources/symbols.rb
|
217
222
|
- lib/iex/version.rb
|
223
|
+
- script/console
|
218
224
|
- spec/fixtures/iex/advanced_stats/invalid.yml
|
219
225
|
- spec/fixtures/iex/advanced_stats/msft.yml
|
220
226
|
- spec/fixtures/iex/balance_sheet/invalid.yml
|
@@ -239,6 +245,9 @@ files:
|
|
239
245
|
- spec/fixtures/iex/dividends/msft_invalid_range.yml
|
240
246
|
- spec/fixtures/iex/earnings/invalid.yml
|
241
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
|
242
251
|
- spec/fixtures/iex/historical_prices/abcd.yml
|
243
252
|
- spec/fixtures/iex/historical_prices/invalid.yml
|
244
253
|
- spec/fixtures/iex/historical_prices/invalid_date.yml
|
@@ -250,6 +259,9 @@ files:
|
|
250
259
|
- spec/fixtures/iex/income/invalid.yml
|
251
260
|
- spec/fixtures/iex/income/msft.yml
|
252
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
|
253
265
|
- spec/fixtures/iex/key_stats/invalid.yml
|
254
266
|
- spec/fixtures/iex/key_stats/msft.yml
|
255
267
|
- spec/fixtures/iex/largest-trades/aapl.yml
|
@@ -283,8 +295,10 @@ files:
|
|
283
295
|
- spec/iex/endpoints/crypto_spec.rb
|
284
296
|
- spec/iex/endpoints/dividends_spec.rb
|
285
297
|
- spec/iex/endpoints/earnings_spec.rb
|
298
|
+
- spec/iex/endpoints/fx_spec.rb
|
286
299
|
- spec/iex/endpoints/historical_prices_spec.rb
|
287
300
|
- spec/iex/endpoints/income_spec.rb
|
301
|
+
- spec/iex/endpoints/key_stat_spec.rb
|
288
302
|
- spec/iex/endpoints/key_stats_spec.rb
|
289
303
|
- spec/iex/endpoints/largest_trades_spec.rb
|
290
304
|
- spec/iex/endpoints/logo_spec.rb
|
@@ -304,7 +318,7 @@ homepage: http://github.com/dblock/iex-ruby-client
|
|
304
318
|
licenses:
|
305
319
|
- MIT
|
306
320
|
metadata: {}
|
307
|
-
post_install_message:
|
321
|
+
post_install_message:
|
308
322
|
rdoc_options: []
|
309
323
|
require_paths:
|
310
324
|
- lib
|
@@ -319,8 +333,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
319
333
|
- !ruby/object:Gem::Version
|
320
334
|
version: 1.3.6
|
321
335
|
requirements: []
|
322
|
-
rubygems_version: 3.1.
|
323
|
-
signing_key:
|
336
|
+
rubygems_version: 3.1.6
|
337
|
+
signing_key:
|
324
338
|
specification_version: 4
|
325
339
|
summary: IEX Finance API Ruby client with support for retrieving stock quotes.
|
326
340
|
test_files:
|
@@ -348,6 +362,9 @@ test_files:
|
|
348
362
|
- spec/fixtures/iex/dividends/msft_invalid_range.yml
|
349
363
|
- spec/fixtures/iex/earnings/invalid.yml
|
350
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
|
351
368
|
- spec/fixtures/iex/historical_prices/abcd.yml
|
352
369
|
- spec/fixtures/iex/historical_prices/invalid.yml
|
353
370
|
- spec/fixtures/iex/historical_prices/invalid_date.yml
|
@@ -359,6 +376,9 @@ test_files:
|
|
359
376
|
- spec/fixtures/iex/income/invalid.yml
|
360
377
|
- spec/fixtures/iex/income/msft.yml
|
361
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
|
362
382
|
- spec/fixtures/iex/key_stats/invalid.yml
|
363
383
|
- spec/fixtures/iex/key_stats/msft.yml
|
364
384
|
- spec/fixtures/iex/largest-trades/aapl.yml
|
@@ -392,8 +412,10 @@ test_files:
|
|
392
412
|
- spec/iex/endpoints/crypto_spec.rb
|
393
413
|
- spec/iex/endpoints/dividends_spec.rb
|
394
414
|
- spec/iex/endpoints/earnings_spec.rb
|
415
|
+
- spec/iex/endpoints/fx_spec.rb
|
395
416
|
- spec/iex/endpoints/historical_prices_spec.rb
|
396
417
|
- spec/iex/endpoints/income_spec.rb
|
418
|
+
- spec/iex/endpoints/key_stat_spec.rb
|
397
419
|
- spec/iex/endpoints/key_stats_spec.rb
|
398
420
|
- spec/iex/endpoints/largest_trades_spec.rb
|
399
421
|
- spec/iex/endpoints/logo_spec.rb
|