iex-ruby-client 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: efe580506738cb0051bdf88c9394e1648b0266a7
4
- data.tar.gz: 3e24aa4081f8d58ddf429b7c88405fe82184e6b7
3
+ metadata.gz: 46bb34f95ce06a28bda7ef497524779e523005d8
4
+ data.tar.gz: d6d45b4e0f9053a97275a76183c6da980c397119
5
5
  SHA512:
6
- metadata.gz: '0708198339a430a907ba930429c84cb8ac6c0af610fc4610a12d86b8811fcfdfff4103a26f568f3e611e558f88c78f4bfd1b878d9b7d1d95061e71577e338ff2'
7
- data.tar.gz: 407fd1c3d226efad5bd9b63599dd555c2ffff97bfe092b826ef2aff0571c556c9212ce1bfdef27dfbe2a4949d1384aca0a7d120440b065b955e0ec21824f17ec
6
+ metadata.gz: 07c3d56637a21ef86dbd196e319f8ffd38ebf890ba8c9eefda6ef21e57a4f1b1fd10a3e10f1620899ee7e08fc6bd895fa828fdf0d98754e0dcbdd7f311979a7c
7
+ data.tar.gz: 0b6be443863b617f4af1a21021ed36ceaf2670bba91cd240a5ca4b003925d6fc385a8cdee2d0f582905dbd40ad4aabdcbd90ee40dd3c5a40d44ca0d516ba3049
@@ -1,6 +1,6 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2018-03-23 11:25:55 -0400 using RuboCop version 0.51.0.
3
+ # on 2018-03-26 16:58:34 -0400 using RuboCop version 0.51.0.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
@@ -9,13 +9,13 @@
9
9
  # Offense count: 1
10
10
  # Configuration parameters: CountComments, ExcludedMethods.
11
11
  Metrics/BlockLength:
12
- Max: 27
12
+ Max: 33
13
13
 
14
- # Offense count: 2
14
+ # Offense count: 32
15
15
  # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
16
16
  # URISchemes: http, https
17
17
  Metrics/LineLength:
18
- Max: 107
18
+ Max: 221
19
19
 
20
20
  # Offense count: 1
21
21
  # Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts, AllowedAcronyms.
@@ -24,11 +24,19 @@ Naming/FileName:
24
24
  Exclude:
25
25
  - 'lib/iex-ruby-client.rb'
26
26
 
27
- # Offense count: 3
27
+ # Offense count: 1
28
+ Style/AsciiComments:
29
+ Exclude:
30
+ - 'lib/iex/resources/quote.rb'
31
+
32
+ # Offense count: 6
28
33
  Style/Documentation:
29
34
  Exclude:
30
35
  - 'spec/**/*'
31
36
  - 'test/**/*'
37
+ - 'lib/iex/api.rb'
38
+ - 'lib/iex/api/company.rb'
32
39
  - 'lib/iex/api/quote.rb'
33
40
  - 'lib/iex/errors/symbol_not_found_error.rb'
34
- - 'lib/iex/quote.rb'
41
+ - 'lib/iex/resources/company.rb'
42
+ - 'lib/iex/resources/quote.rb'
@@ -1,3 +1,9 @@
1
+ ### 0.2.0 (2018/03/26)
2
+
3
+ * Moved `IEX::Quote` into `IEX::Resources::Quote` - [@dblock](https://github.com/dblock).
4
+ * Added `IEX::Resources::Company#get` returning company information - [@dblock](https://github.com/dblock).
5
+ * Added `IEX::Resources::Quote#latest_update_t` and `IEX::Resources::Quote#iex_last_updated_t` in `Time` format - [@dblock](https://github.com/dblock).
6
+
1
7
  ### 0.1.0 (2018/03/23)
2
8
 
3
9
  * Initial public release - [@dblock](https://github.com/dblock).
data/README.md CHANGED
@@ -23,7 +23,7 @@ Run `bundle install`.
23
23
  Fetches a single stock quote.
24
24
 
25
25
  ```ruby
26
- quote = IEX::Quote.get('MSFT')
26
+ quote = IEX::Resources::Quote.get('MSFT')
27
27
 
28
28
  quote.latest_price # 90.165
29
29
  quote.change # 0.375
@@ -31,7 +31,24 @@ quote.change_percent # 0.00418
31
31
  quote.change_percent_s # '+0.42%'
32
32
  ```
33
33
 
34
- See [#quote](https://iextrading.com/developer/docs/#quote) for detailed documentation or [quote.rb](lib/iex/quote.rb) for returned fields.
34
+ See [#quote](https://iextrading.com/developer/docs/#quote) for detailed documentation or [quote.rb](lib/iex/resources/quote.rb) for returned fields.
35
+
36
+ ### Get Company Information
37
+
38
+ Fetches company information for a symbol.
39
+
40
+ ```ruby
41
+ company = IEX::Resources::Company.get('MSFT')
42
+
43
+ company.ceo # 'Satya Nadella'
44
+ company.company_name # 'Microsoft Corporation'
45
+ ```
46
+
47
+ See [#company](https://iextrading.com/developer/docs/#company) for detailed documentation or [company.rb](lib/iex/resources/company.rb) for returned fields.
48
+
49
+ ## Errors
50
+
51
+ ### SymbolNotFound
35
52
 
36
53
  If a symbol cannot be found an [IEX::Errors::SymbolNotFound](lib/iex/errors/symbol_not_found_error.rb) exception is raised.
37
54
 
@@ -45,4 +62,4 @@ Copyright (c) 2018, [Daniel Doubrovkine](https://twitter.com/dblockdotorg) and [
45
62
 
46
63
  This project is licensed under the [MIT License](LICENSE.md).
47
64
 
48
- Data provided for free by [IEX](https://iextrading.com/developer), see [terms](https://iextrading.com/api-exhibit-a).
65
+ Data provided for free by [IEX](https://iextrading.com/developer), see [terms](https://iextrading.com/api-terms).
@@ -2,8 +2,8 @@ require 'faraday'
2
2
  require 'faraday_middleware'
3
3
  require 'faraday_middleware/response_middleware'
4
4
  require 'hashie'
5
+
5
6
  require_relative 'iex/version'
6
7
  require_relative 'iex/errors'
7
8
  require_relative 'iex/api'
8
- require_relative 'iex/resource'
9
- require_relative 'iex/quote'
9
+ require_relative 'iex/resources'
@@ -1 +1,21 @@
1
+ module IEX
2
+ module Api
3
+ ROOT_URI = 'https://api.iextrading.com/1.0/stock'.freeze
4
+
5
+ def self.default_connection(path)
6
+ Faraday.new(
7
+ url: "#{ROOT_URI}/#{path}",
8
+ request: {
9
+ params_encoder: Faraday::FlatParamsEncoder
10
+ }
11
+ ) do |c|
12
+ c.use ::FaradayMiddleware::ParseJson
13
+ c.use Faraday::Response::RaiseError
14
+ c.use Faraday::Adapter::NetHttp
15
+ end
16
+ end
17
+ end
18
+ end
19
+
1
20
  require_relative 'api/quote'
21
+ require_relative 'api/company'
@@ -0,0 +1,17 @@
1
+ module IEX
2
+ module Api
3
+ module Company
4
+ def self.get(params)
5
+ params = params.dup
6
+ symbol = params.delete(:q)
7
+ connection(symbol).get do |c|
8
+ c.params.merge!(params)
9
+ end.body
10
+ end
11
+
12
+ def self.connection(symbol)
13
+ IEX::Api.default_connection "#{symbol}/company"
14
+ end
15
+ end
16
+ end
17
+ end
@@ -10,16 +10,7 @@ module IEX
10
10
  end
11
11
 
12
12
  def self.connection(symbol)
13
- Faraday.new(
14
- url: "https://api.iextrading.com/1.0/stock/#{symbol}/quote",
15
- request: {
16
- params_encoder: Faraday::FlatParamsEncoder
17
- }
18
- ) do |c|
19
- c.use ::FaradayMiddleware::ParseJson
20
- c.use Faraday::Response::RaiseError
21
- c.use Faraday::Adapter::NetHttp
22
- end
13
+ IEX::Api.default_connection "#{symbol}/quote"
23
14
  end
24
15
  end
25
16
  end
@@ -0,0 +1,3 @@
1
+ require_relative 'resources/resource'
2
+ require_relative 'resources/quote'
3
+ require_relative 'resources/company'
@@ -0,0 +1,21 @@
1
+ module IEX
2
+ module Resources
3
+ class Company < Resource
4
+ property 'symbol' # stock ticker
5
+ property 'company_name', from: 'companyName' # company name
6
+ property 'exchange' # primary listings exchange
7
+ property 'industry'
8
+ property 'website'
9
+ property 'description'
10
+ property 'ceo', from: 'CEO'
11
+ property 'issue_type', from: 'issueType' # common issue type of the stock
12
+ property 'sector'
13
+
14
+ def self.get(symbol)
15
+ new IEX::Api::Company.get(q: symbol)
16
+ rescue Faraday::ResourceNotFound => e
17
+ raise IEX::Errors::SymbolNotFoundError.new(symbol, e.response[:body])
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,57 @@
1
+ module IEX
2
+ module Resources
3
+ class Quote < Resource
4
+ property 'symbol' # stock ticker
5
+ property 'company_name', from: 'companyName' # company name
6
+ property 'primary_exchange', from: 'primaryExchange' # primary listings exchange
7
+ property 'sector' # sector of the stock
8
+ property 'calculation_price', from: 'calculationPrice' # source of the latest price - tops, sip, previousclose or close
9
+ property 'open' # official open price
10
+ property 'open_time', from: 'openTime' # official listing exchange time for the open
11
+ property 'close' # official close price
12
+ property 'close_time', from: 'closeTime' # official listing exchange time for the close
13
+ property 'high' # market-wide highest price from the SIP, 15 minute delayed
14
+ property 'low' # market-wide lowest price from the SIP, 15 minute delayed
15
+ property 'latest_price', from: 'latestPrice' # latest price being the IEX real time price, the 15 minute delayed market price, or the previous close price
16
+ property 'latest_source', from: 'latestSource' # the source of latestPrice - IEX real time price, 15 minute delayed price, Close or Previous close
17
+ property 'latest_time', from: 'latestTime' # human readable time of the latestPrice
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) { Time.at(v / 1000) } # the update time of latestPrice
20
+ property 'latest_volume', from: 'latestVolume' # the total market volume of the stock
21
+ property 'iex_realtime_price', from: 'iexRealtimePrice' # last sale price of the stock on IEX
22
+ property 'iex_realtime_size', from: 'iexRealtimeSize' # last sale size of the stock on IEX
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 > 0 ? Time.at(v / 1000) : nil } # last update time of the data
25
+ property 'delayed_price', from: 'delayedPrice' # 15 minute delayed market price
26
+ property 'delayed_price_time', from: 'delayedPriceTime' # time of the delayed market price
27
+ property 'previous_close', from: 'previousClose' # adjusted close price of the last trading day of the stock
28
+ property 'change' # change in value, calculated using calculation_price from previous_close
29
+ property 'change_percent', from: 'changePercent' # change in percent, calculated using calculation_price from previous_close
30
+ property 'change_percent_s', from: 'changePercent', with: lambda { |v|
31
+ [
32
+ v > 0 ? '+' : '',
33
+ format('%.2f', v * 100),
34
+ '%'
35
+ ].join
36
+ } # change in percent as a String with a leading + or - sign
37
+ property 'iex_market_percent', from: 'iexMarketPercent' # IEX’s percentage of the market in the stock
38
+ property 'iex_volume', from: 'iexVolume' # shares traded in the stock on IEX
39
+ property 'avg_total_volume', from: 'avgTotalVolume' # 30 day average volume on all markets
40
+ property 'iex_bid_price', from: 'iexBidPrice' # best bid price on IEX
41
+ property 'iex_bid_size', from: 'iexBidSize' # amount of shares on the bid on IEX
42
+ property 'iex_ask_price', from: 'iexAskPrice' # the best ask price on IEX
43
+ property 'iex_ask_size', from: 'iexAskSize' # amount of shares on the ask on IEX
44
+ property 'market_cap', from: 'marketCap' # market cap, calculated in real time using calculation_price
45
+ property 'pe_ratio', from: 'peRatio' # PE ratio, calculated in real time using calculation_price
46
+ property 'week_52_high', from: 'week52High' # adjusted 52 week high
47
+ property 'week_52_low', from: 'week52Low' # adjusted 52 week low
48
+ property 'ytd_change', from: 'ytdChange' # price change percentage from start of year to previous close
49
+
50
+ def self.get(symbol)
51
+ new IEX::Api::Quote.get(q: symbol)
52
+ rescue Faraday::ResourceNotFound => e
53
+ raise IEX::Errors::SymbolNotFoundError.new(symbol, e.response[:body])
54
+ end
55
+ end
56
+ end
57
+ end
@@ -1,3 +1,3 @@
1
1
  module IEX
2
- VERSION = '0.1.0'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
@@ -0,0 +1,61 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.iextrading.com/1.0/stock/INVALID/company
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.14.0
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
+ - Mon, 26 Mar 2018 20:47:50 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=0397c9aa99f94e3bb4c858ac83fbdd2b; Domain=.iextrading.com; Path=/; Expires=Tue,
33
+ 27 Mar 2018 08:47:50 GMT; Secure
34
+ Content-Security-Policy:
35
+ - default-src 'self'; child-src 'none'; object-src 'none'; style-src 'self'
36
+ 'unsafe-inline'; font-src data:; connect-src 'self' https://auth.iextrading.com
37
+ wss://iextrading.com wss://tops.iextrading.com; script-src 'self';
38
+ X-Content-Security-Policy:
39
+ - default-src 'self'; child-src 'none'; object-src 'none'; style-src 'self'
40
+ 'unsafe-inline'; font-src data:; connect-src 'self' https://auth.iextrading.com
41
+ wss://iextrading.com wss://tops.iextrading.com; script-src 'self';
42
+ Frame-Options:
43
+ - deny
44
+ X-Frame-Options:
45
+ - deny
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
56
+ body:
57
+ encoding: ASCII-8BIT
58
+ string: Unknown symbol
59
+ http_version:
60
+ recorded_at: Mon, 26 Mar 2018 20:47:50 GMT
61
+ recorded_with: VCR 4.0.0
@@ -0,0 +1,68 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.iextrading.com/1.0/stock/MSFT/company
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.14.0
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
+ - Mon, 26 Mar 2018 20:47:50 GMT
25
+ Content-Type:
26
+ - application/json; charset=utf-8
27
+ Content-Length:
28
+ - '490'
29
+ Connection:
30
+ - keep-alive
31
+ Set-Cookie:
32
+ - ctoken=a59dd70ac7f44bb1a19cebd4d5204e8d; Domain=.iextrading.com; Path=/; Expires=Tue,
33
+ 27 Mar 2018 08:47:50 GMT; Secure
34
+ Content-Security-Policy:
35
+ - default-src 'self'; child-src 'none'; object-src 'none'; style-src 'self'
36
+ 'unsafe-inline'; font-src data:; connect-src 'self' https://auth.iextrading.com
37
+ wss://iextrading.com wss://tops.iextrading.com; script-src 'self';
38
+ X-Content-Security-Policy:
39
+ - default-src 'self'; child-src 'none'; object-src 'none'; style-src 'self'
40
+ 'unsafe-inline'; font-src data:; connect-src 'self' https://auth.iextrading.com
41
+ wss://iextrading.com wss://tops.iextrading.com; script-src 'self';
42
+ Frame-Options:
43
+ - deny
44
+ X-Frame-Options:
45
+ - deny
46
+ X-Content-Type-Options:
47
+ - nosniff
48
+ Strict-Transport-Security:
49
+ - max-age=15768000
50
+ Access-Control-Allow-Origin:
51
+ - "*"
52
+ Access-Control-Allow-Credentials:
53
+ - 'true'
54
+ Access-Control-Allow-Methods:
55
+ - GET, OPTIONS
56
+ Access-Control-Allow-Headers:
57
+ - Origin, X-Requested-With, Content-Type, Accept
58
+ body:
59
+ encoding: UTF-8
60
+ string: '{"symbol":"MSFT","companyName":"Microsoft Corporation","exchange":"Nasdaq
61
+ Global Select","industry":"Application Software","website":"http://www.microsoft.com","description":"Microsoft
62
+ Corp is a technology company. It develop, license, and support a wide range
63
+ of software products and services. Its business is organized into three segments:
64
+ Productivity and Business Processes, Intelligent Cloud, and More Personal
65
+ Computing.","CEO":"Satya Nadella","issueType":"cs","sector":"Technology"}'
66
+ http_version:
67
+ recorded_at: Mon, 26 Mar 2018 20:47:50 GMT
68
+ recorded_with: VCR 4.0.0
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe IEX::Resources::Company do
4
+ context 'known symbol', vcr: { cassette_name: 'company/msft' } do
5
+ subject do
6
+ IEX::Resources::Company.get('MSFT')
7
+ end
8
+ it 'retrieves company information' do
9
+ expect(subject.symbol).to eq 'MSFT'
10
+ expect(subject.ceo).to eq 'Satya Nadella'
11
+ expect(subject.company_name).to eq 'Microsoft Corporation'
12
+ expect(subject.description).to include 'Microsoft Corp is a technology company.'
13
+ expect(subject.exchange).to eq 'Nasdaq Global Select'
14
+ expect(subject.industry).to eq 'Application Software'
15
+ expect(subject.issue_type).to eq 'cs'
16
+ expect(subject.website).to eq 'http://www.microsoft.com'
17
+ expect(subject.sector).to eq 'Technology'
18
+ end
19
+ end
20
+ context 'invalid symbol', vcr: { cassette_name: 'company/invalid' } do
21
+ subject do
22
+ IEX::Resources::Company.get('INVALID')
23
+ end
24
+ it 'fails with SymbolNotFoundError' do
25
+ expect { subject }.to raise_error IEX::Errors::SymbolNotFoundError, 'Symbol INVALID Not Found'
26
+ end
27
+ end
28
+ end
@@ -1,9 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe IEX::Quote do
4
- context 'known symbol', vcr: { cassette_name: 'msft' } do
3
+ describe IEX::Resources::Quote do
4
+ context 'known symbol', vcr: { cassette_name: 'quote/msft' } do
5
5
  subject do
6
- IEX::Quote.get('MSFT')
6
+ IEX::Resources::Quote.get('MSFT')
7
7
  end
8
8
  it 'retrieves a quote' do
9
9
  expect(subject.symbol).to eq 'MSFT'
@@ -19,10 +19,16 @@ describe IEX::Quote do
19
19
  expect(subject.change_percent).to eq 0.00418
20
20
  expect(subject.change_percent_s).to eq '+0.42%'
21
21
  end
22
+ it 'coerces times' do
23
+ expect(subject.latest_update).to eq 1_521_818_145_007
24
+ expect(subject.latest_update_t).to eq Time.at(1_521_818_145)
25
+ expect(subject.iex_last_updated).to eq 1_521_818_145_007
26
+ expect(subject.iex_last_updated_t).to eq Time.at(1_521_818_145)
27
+ end
22
28
  end
23
- context 'invalid symbol', vcr: { cassette_name: 'invalid' } do
29
+ context 'invalid symbol', vcr: { cassette_name: 'quote/invalid' } do
24
30
  subject do
25
- IEX::Quote.get('INVALID')
31
+ IEX::Resources::Quote.get('INVALID')
26
32
  end
27
33
  it 'fails with SymbolNotFoundError' do
28
34
  expect { subject }.to raise_error IEX::Errors::SymbolNotFoundError, 'Symbol INVALID Not Found'
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: 0.1.0
4
+ version: 0.2.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: 2018-03-23 00:00:00.000000000 Z
11
+ date: 2018-03-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -143,15 +143,21 @@ files:
143
143
  - iex-ruby-client.gemspec
144
144
  - lib/iex-ruby-client.rb
145
145
  - lib/iex/api.rb
146
+ - lib/iex/api/company.rb
146
147
  - lib/iex/api/quote.rb
147
148
  - lib/iex/errors.rb
148
149
  - lib/iex/errors/symbol_not_found_error.rb
149
- - lib/iex/quote.rb
150
- - lib/iex/resource.rb
150
+ - lib/iex/resources.rb
151
+ - lib/iex/resources/company.rb
152
+ - lib/iex/resources/quote.rb
153
+ - lib/iex/resources/resource.rb
151
154
  - lib/iex/version.rb
152
- - spec/fixtures/iex/invalid.yml
153
- - spec/fixtures/iex/msft.yml
154
- - spec/iex/quote_spec.rb
155
+ - spec/fixtures/iex/company/invalid.yml
156
+ - spec/fixtures/iex/company/msft.yml
157
+ - spec/fixtures/iex/quote/invalid.yml
158
+ - spec/fixtures/iex/quote/msft.yml
159
+ - spec/iex/resources/company_spec.rb
160
+ - spec/iex/resources/quote_spec.rb
155
161
  - spec/iex/version_spec.rb
156
162
  - spec/spec_helper.rb
157
163
  - spec/support/vcr.rb
@@ -175,14 +181,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
175
181
  version: 1.3.6
176
182
  requirements: []
177
183
  rubyforge_project:
178
- rubygems_version: 2.6.12
184
+ rubygems_version: 2.6.13
179
185
  signing_key:
180
186
  specification_version: 4
181
187
  summary: IEX Finance API Ruby client with support for retrieving stock quotes.
182
188
  test_files:
183
- - spec/fixtures/iex/invalid.yml
184
- - spec/fixtures/iex/msft.yml
185
- - spec/iex/quote_spec.rb
189
+ - spec/fixtures/iex/company/invalid.yml
190
+ - spec/fixtures/iex/company/msft.yml
191
+ - spec/fixtures/iex/quote/invalid.yml
192
+ - spec/fixtures/iex/quote/msft.yml
193
+ - spec/iex/resources/company_spec.rb
194
+ - spec/iex/resources/quote_spec.rb
186
195
  - spec/iex/version_spec.rb
187
196
  - spec/spec_helper.rb
188
197
  - spec/support/vcr.rb
@@ -1,54 +0,0 @@
1
- module IEX
2
- class Quote < Resource
3
- property 'symbol'
4
- property 'company_name', from: 'companyName'
5
- property 'primary_exchange', from: 'primaryExchange'
6
- property 'sector'
7
- property 'calculation_price', from: 'calculationPrice'
8
- property 'open'
9
- property 'open_time', from: 'openTime'
10
- property 'close'
11
- property 'close_time', from: 'closeTime'
12
- property 'high'
13
- property 'low'
14
- property 'latest_price', from: 'latestPrice'
15
- property 'latest_source', from: 'latestSource'
16
- property 'latest_time', from: 'latestTime'
17
- property 'latest_update', from: 'latestUpdate'
18
- property 'latest_volume', from: 'latestVolume'
19
- property 'iex_realtime_price', from: 'iexRealtimePrice'
20
- property 'iex_realtime_size', from: 'iexRealtimeSize'
21
- property 'iex_last_updated', from: 'iexLastUpdated'
22
- property 'delayed_price', from: 'delayedPrice'
23
- property 'delayed_price_time', from: 'delayedPriceTime'
24
- property 'previous_close', from: 'previousClose'
25
- property 'change'
26
- property 'change_percent', from: 'changePercent'
27
- property 'iex_market_percent', from: 'iexMarketPercent'
28
- property 'iex_volume', from: 'iexVolume'
29
- property 'avg_total_volume', from: 'avgTotalVolume'
30
- property 'iex_bid_price', from: 'iexBidPrice'
31
- property 'iex_bid_size', from: 'iexBidSize'
32
- property 'iex_ask_price', from: 'iexAskPrice'
33
- property 'iex_ask_size', from: 'iexAskSize'
34
- property 'market_cap', from: 'marketCap'
35
- property 'pe_ratio', from: 'peRatio'
36
- property 'week_52_high', from: 'week52High'
37
- property 'week_52_low', from: 'week52Low'
38
- property 'ytd_change', from: 'ytdChange'
39
-
40
- def change_percent_s
41
- [
42
- change_percent > 0 ? '+' : '',
43
- format('%.2f', change_percent * 100),
44
- '%'
45
- ].join
46
- end
47
-
48
- def self.get(symbol)
49
- new IEX::Api::Quote.get(q: symbol)
50
- rescue Faraday::ResourceNotFound => e
51
- raise IEX::Errors::SymbolNotFoundError.new(symbol, e.response[:body])
52
- end
53
- end
54
- end