stock_quote 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of stock_quote might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/.gitignore +7 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +12 -0
- data/Gemfile +4 -0
- data/LICENSE +19 -0
- data/README.md +141 -0
- data/Rakefile +9 -0
- data/lib/stock_quote/stock.rb +96 -0
- data/lib/stock_quote/version.rb +4 -0
- data/lib/stock_quote.rb +3 -0
- data/spec/spec_helper.rb +7 -0
- data/spec/stock_quote_spec.rb +112 -0
- data/spec/support/vcr.rb +9 -0
- data/stock_quote.gemspec +31 -0
- metadata +163 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 80504aa14b14bf1c7832caad563a19dbe37889a5
|
4
|
+
data.tar.gz: 745f0d4376c8637a7815c32e5accb56f3441d510
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9d9916c18f79ef4408e8a0d21d5dc7d149d5b582327e8ff74726a1674b09aa99b01c927f46c4a7caf97d81c2f9928709af2b722e2a2a7027e4234fd62352c6da
|
7
|
+
data.tar.gz: 107a5b882967bdce511131bbaa15b2283850dd672791871bd0abba964862293c2a4fdb6561fd266eb89024e61587f6e37005cb287017fa9c206e8991afd8f37d
|
data/.gitignore
ADDED
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
StockQuote
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.3.1
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Copyright (c) 2017 Ty Rauber
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
5
|
+
in the Software without restriction, including without limitation the rights
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
11
|
+
all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,141 @@
|
|
1
|
+
# stock_quote
|
2
|
+
|
3
|
+
Real-time, stock data and historical pricing. Data provided by [IEXCLOUD.IO](https://iexcloud.io/). An [API KEY](https://iexcloud.io/cloud-login#/register/) is now required.
|
4
|
+
|
5
|
+
# Update
|
6
|
+
|
7
|
+
On June 1, 2019, IEX Group removed all non-IEX data from the IEX Trading API, and migrated all relevant endpoints to IEX Cloud. A free plan is available with a valid API Key. The only change in StockQuote usage is initialization with an API KEY is now required (`StockQuote::Stock.new(api_key: 'YOUR_API_KEY'`).
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
To install the 'stock_quote' ruby gem:
|
12
|
+
|
13
|
+
`gem install stock_quote`
|
14
|
+
|
15
|
+
## Gem Configuration
|
16
|
+
|
17
|
+
To use the gem in your Rails Application, include it in your Gemfile:
|
18
|
+
|
19
|
+
`gem "stock_quote"`, '~> 3.0.0'
|
20
|
+
|
21
|
+
|
22
|
+
## Initialization
|
23
|
+
|
24
|
+
To globally initialize StockQuote with a valid API_KEY:
|
25
|
+
|
26
|
+
`StockQuote::Stock.new(api_key: YOUR_API_KEY)`
|
27
|
+
|
28
|
+
You can also supply api_key as an attribute in any StockQuote::Stock method.
|
29
|
+
|
30
|
+
### StockQuote::Stock.quote(symbol)
|
31
|
+
|
32
|
+
Quote is the primary method, returning a StockQuote::Stock instance, including the following attributes (new in v2.0.0).
|
33
|
+
|
34
|
+
`symbol, company_name, primary_exchange, sector, calculation_price, open, open_time, close, close_time, high, low, latest_price, latest_source, latest_time, latest_update, latest_volume, iex_realtime_price, iex_realtime_size, iex_last_updated, delayed_price, delayed_price_time, previous_close, change, change_percent, iex_market_percent, iex_volume, avg_total_volume, iex_bid_price, iex_bid_size, iex_ask_price, iex_ask_size, market_cap, pe_ratio, week52_high, week52_low, ytd_change, chart`
|
35
|
+
|
36
|
+
You can get a current quote with the following syntax:
|
37
|
+
|
38
|
+
`stock = StockQuote::Stock.quote("symbol")`
|
39
|
+
|
40
|
+
Where symbol equals the company stock symbol you want a quote for. For example, "aapl" for Apple, Inc.
|
41
|
+
|
42
|
+
You may search for multiple stocks by separating symbols with a comma (or array). For example:
|
43
|
+
|
44
|
+
`stocks = StockQuote::Stock.quote("aapl,tsla")`
|
45
|
+
|
46
|
+
These queries will return a Stock object or an array of Stock objects which you may iterate through.
|
47
|
+
|
48
|
+
Note: You can receive a raw json hash response with the following syntax:
|
49
|
+
|
50
|
+
`stocks = StockQuote::Stock.raw_quote("aapl,tsla")`
|
51
|
+
|
52
|
+
The raw_ method is available on all supported methods.
|
53
|
+
|
54
|
+
### Other Methods
|
55
|
+
|
56
|
+
The IEX API is quite extensive and well documented.
|
57
|
+
|
58
|
+
V3.0.0 of stock_quote mirrors the IEXCLOUD.IO API:
|
59
|
+
|
60
|
+
* [book](https://iexcloud.io/docs/api/#book)
|
61
|
+
* [chart](https://iexcloud.io/docs/api/#historical-prices)
|
62
|
+
* [company](https://iexcloud.io/docs/api/#company)
|
63
|
+
* [delayed_quote](https://iexcloud.io/docs/api/#delayed-quote)
|
64
|
+
* [dividends](https://iexcloud.io/docs/api/#dividends)
|
65
|
+
* [earnings](https://iexcloud.io/docs/api/#earnings)
|
66
|
+
* [financials](https://iexcloud.io/docs/api/#financials)
|
67
|
+
* [stats](https://iexcloud.io/docs/api/#key-stats)
|
68
|
+
* [logo](https://iexcloud.io/docs/api/#logo)
|
69
|
+
* [news](https://iexcloud.io/docs/api/#news)
|
70
|
+
* [ohlc](https://iexcloud.io/docs/api/#ohlc)
|
71
|
+
* [peers](https://iexcloud.io/docs/api/#peers)
|
72
|
+
* [previous](https://iexcloud.io/docs/api/#previous)
|
73
|
+
* [price](https://iexcloud.io/docs/api/#price)
|
74
|
+
* [quote](https://iexcloud.io/docs/api/#quote)
|
75
|
+
* [relevant](https://iexcloud.io/docs/api/#relevant)
|
76
|
+
* [splits](https://iexcloud.io/docs/api/#splits)
|
77
|
+
* [volume_by_venue](https://iexcloud.io/docs/api/#volume-by-venue)
|
78
|
+
|
79
|
+
All these methods are available on StockQuote::Stock.
|
80
|
+
|
81
|
+
For example:
|
82
|
+
|
83
|
+
```StockQuote::Stock.company('aapl')```
|
84
|
+
|
85
|
+
Retrieves company information.
|
86
|
+
|
87
|
+
For example:
|
88
|
+
|
89
|
+
```StockQuote::Stock.dividends('aapl')```
|
90
|
+
|
91
|
+
Retrieves dividend information.
|
92
|
+
|
93
|
+
Raw json hash responses are available for any of the methods by pre-fixing the method name with "raw__".
|
94
|
+
|
95
|
+
For example:
|
96
|
+
|
97
|
+
```StockQuote::Stock.raw_dividends('aapl')```
|
98
|
+
|
99
|
+
Retrieves raw dividend information.
|
100
|
+
|
101
|
+
### [batch](https://iextrading.com/developer/docs/#batch-requests)
|
102
|
+
|
103
|
+
Batch allows you to batch requests. All methods in stock_quote use batch under-the-hood.
|
104
|
+
|
105
|
+
Batch follows the syntax:
|
106
|
+
|
107
|
+
```StockQuote::Stock.batch(type, symbol, range)```
|
108
|
+
|
109
|
+
Where type can be multiple of the above methods and symbol can be an array of company symbols.
|
110
|
+
|
111
|
+
Range can be:
|
112
|
+
|
113
|
+
`5y, 2y, 1y, ytd, 6m, 3m, 1m, 1d`
|
114
|
+
|
115
|
+
And are applied to chart method.
|
116
|
+
|
117
|
+
## Special thanks to
|
118
|
+
|
119
|
+
IEX for making this api publicly available.
|
120
|
+
|
121
|
+
## License
|
122
|
+
|
123
|
+
Copyright (c) 2019 Ty Rauber
|
124
|
+
|
125
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
126
|
+
of this software and associated documentation files (the "Software"), to deal
|
127
|
+
in the Software without restriction, including without limitation the rights
|
128
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
129
|
+
copies of the Software, and to permit persons to whom the Software is
|
130
|
+
furnished to do so, subject to the following conditions:
|
131
|
+
|
132
|
+
The above copyright notice and this permission notice shall be included in
|
133
|
+
all copies or substantial portions of the Software.
|
134
|
+
|
135
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
136
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
137
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
138
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
139
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
140
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
141
|
+
THE SOFTWARE.
|
data/Rakefile
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rest-client'
|
3
|
+
require 'json'
|
4
|
+
require 'csv'
|
5
|
+
|
6
|
+
module StockQuote
|
7
|
+
|
8
|
+
# => StockQuote::Stock
|
9
|
+
# Queries IEX for current and historical pricing.
|
10
|
+
|
11
|
+
class Stock
|
12
|
+
|
13
|
+
VERSION = "v1"
|
14
|
+
URL = "https://cloud.iexapis.com/#{VERSION}/stock/"
|
15
|
+
ATTRIBUTION = "Data provided for free by IEX (https://iexcloud.io)."
|
16
|
+
RANGES = ['5y','2y','1y','ytd','6m','3m','1m','1d']
|
17
|
+
TYPES = ['book', 'chart', 'company', 'delayed_quote', 'dividends', 'earnings', 'financials', 'splits', 'stats','logo', 'news', 'ohlc', 'peers', 'previous', 'quote', 'relevant', 'volume_by_venue']
|
18
|
+
|
19
|
+
class << self
|
20
|
+
attr_accessor :api_key
|
21
|
+
def create_method(name)
|
22
|
+
self.class.instance_eval do
|
23
|
+
define_method(name) {|symbol, range=nil| batch(name, symbol, range) }
|
24
|
+
define_method("raw_#{name}") {|symbol, range=nil| batch(name, symbol, range, 'json') }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
attr_accessor :response_code, :attribution
|
30
|
+
|
31
|
+
protected
|
32
|
+
|
33
|
+
TYPES.each do |k|
|
34
|
+
create_method(k)
|
35
|
+
end
|
36
|
+
|
37
|
+
def initialize(data={})
|
38
|
+
self.class.api_key = data.delete(:api_key) if !!(data[:api_key])
|
39
|
+
data.each {|k,v|
|
40
|
+
self.class.__send__(:attr_accessor, Util.underscore(k).to_sym)
|
41
|
+
self.instance_variable_set("@#{Util.underscore(k)}".to_sym, v)
|
42
|
+
}
|
43
|
+
@attribution = ATTRIBUTION
|
44
|
+
@response_code = !!([{}, nil, ''].include?(data)) ? 500 : 200
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.batch_url(types, symbols, range)
|
48
|
+
symbols = symbols.is_a?(Array) ? symbols : symbols.split(",")
|
49
|
+
types = types.is_a?(Array) ? types : types.split(",")
|
50
|
+
if !(['dividends', 'splits'] & types).empty?
|
51
|
+
raise "#{types.join(",")} requires a Range: #{RANGES.join(", ")}" unless RANGES.include?(range)
|
52
|
+
range = RANGES.include?(range) ? range : nil
|
53
|
+
end
|
54
|
+
arr = [['token', self.api_key],['symbols', symbols.join(',')], ['types', types.map{|t| t.gsub("_", "-")}.join(',')]]
|
55
|
+
arr.push(['range', range]) if !!(range)
|
56
|
+
return "#{URL}market/batch?#{URI.encode_www_form(arr)}"
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.batch(type, symbol, range=nil,fmt=false)
|
60
|
+
raise "Type and symbol required" unless type && symbol
|
61
|
+
url = batch_url(type, symbol, range)
|
62
|
+
return request(url, fmt)
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.request(url, fmt, results=[])
|
66
|
+
RestClient::Request.execute(:url => url, :method => :get, :verify_ssl => false) do |response|
|
67
|
+
raise response.body unless response.code == 200
|
68
|
+
json = JSON.parse(response)
|
69
|
+
return json if fmt=='json'
|
70
|
+
results = json.map do |symbol, types|
|
71
|
+
result = {}
|
72
|
+
types.map do |type, res|
|
73
|
+
if res.is_a?(Array)
|
74
|
+
result[type.gsub("-", "_")] = res
|
75
|
+
else
|
76
|
+
res.map{|k,v| result[k] = v }
|
77
|
+
end
|
78
|
+
result['symbol'] ||= symbol
|
79
|
+
end
|
80
|
+
Stock.new(result)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
return results.length > 1 ? results : results.shift
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
class Util
|
88
|
+
def self.underscore(str)
|
89
|
+
str.gsub(/::/, '/').
|
90
|
+
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
91
|
+
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
92
|
+
tr("-", "_").
|
93
|
+
downcase
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
data/lib/stock_quote.rb
ADDED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
require 'stock_quote'
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe StockQuote::Stock do
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
StockQuote::Stock.new(api_key: ENV['API_KEY'])
|
8
|
+
end
|
9
|
+
|
10
|
+
StockQuote::Stock::TYPES.each do |key|
|
11
|
+
describe key, vcr: { cassette_name: key} do
|
12
|
+
let(:range){
|
13
|
+
['dividends', 'splits'].include?(key) ? StockQuote::Stock::RANGES.shuffle.shift : nil
|
14
|
+
}
|
15
|
+
it "should be instance of Stock" do
|
16
|
+
@stock = StockQuote::Stock.send(key, 'aapl', range)
|
17
|
+
expectation(@stock)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should be raw json hash" do
|
21
|
+
@stock = StockQuote::Stock.send("raw_#{key}", 'aapl', range)
|
22
|
+
expectation(@stock, 'json')
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '#query' do
|
28
|
+
describe 'single action' do
|
29
|
+
describe 'single symbol string', vcr: { cassette_name: "aapl"} do
|
30
|
+
|
31
|
+
it "should be instance of Stock" do
|
32
|
+
@stock = StockQuote::Stock.batch('quote','aapl')
|
33
|
+
expectation(@stock)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should be json" do
|
37
|
+
@stock = StockQuote::Stock.batch('quote','aapl',nil, 'json')
|
38
|
+
expectation(@stock, 'json')
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe 'multiple symbol array', vcr: { cassette_name: "aapl,tsla"} do
|
43
|
+
|
44
|
+
it "should be instance of Stock" do
|
45
|
+
@stock = StockQuote::Stock.batch('quote',['aapl', 'tsla'])
|
46
|
+
expectation(@stock)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should be json" do
|
50
|
+
@stock = StockQuote::Stock.batch('quote',['aapl', 'tsla'], nil, 'json')
|
51
|
+
expectation(@stock, 'json')
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe 'multiple symbol string', vcr: { cassette_name: "aapl,tsla"} do
|
56
|
+
|
57
|
+
it "should be instance of Stock" do
|
58
|
+
@stock = StockQuote::Stock.batch('quote','aapl,tsla')
|
59
|
+
expectation(@stock)
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should be instance of Stock" do
|
63
|
+
@stock = StockQuote::Stock.batch('quote','aapl,tsla', nil, 'json')
|
64
|
+
expectation(@stock, 'json')
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
describe 'multiple action' do
|
69
|
+
describe 'multiple symbol array', vcr: { cassette_name: "aapl,tsla"} do
|
70
|
+
|
71
|
+
it "should be instance of Stock" do
|
72
|
+
@stock = StockQuote::Stock.batch(['quote','chart'],['aapl', 'tsla'])
|
73
|
+
expectation(@stock)
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should be json" do
|
77
|
+
@stock = StockQuote::Stock.batch(['quote','chart'],['aapl', 'tsla'], nil, 'json')
|
78
|
+
expectation(@stock, 'json')
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe 'multiple symbol string', vcr: { cassette_name: "aapl,tsla"} do
|
83
|
+
|
84
|
+
it "should be instance of Stock" do
|
85
|
+
@stock = StockQuote::Stock.batch('quote,chart','aapl,tsla')
|
86
|
+
expectation(@stock)
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should be instance of Stock" do
|
90
|
+
@stock = StockQuote::Stock.batch('quote,chart','aapl,tsla', nil, 'json')
|
91
|
+
expectation(@stock, 'json')
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
protected
|
98
|
+
|
99
|
+
def expectation(stock, fmt=nil)
|
100
|
+
if stock.is_a?(Array)
|
101
|
+
stock.each{|s| expectation(s, fmt) }
|
102
|
+
elsif fmt=='json'
|
103
|
+
expect(stock).to be_an_instance_of(Hash)
|
104
|
+
else
|
105
|
+
expect(stock).to be_an_instance_of(StockQuote::Stock)
|
106
|
+
expect(stock).to respond_to(:symbol)
|
107
|
+
expect(stock).to respond_to(:response_code)
|
108
|
+
expect(stock).to respond_to(:attribution)
|
109
|
+
expect(stock.attribution).to be(StockQuote::Stock::ATTRIBUTION)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
data/spec/support/vcr.rb
ADDED
data/stock_quote.gemspec
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$LOAD_PATH.push File.expand_path('../lib', __FILE__)
|
3
|
+
require 'stock_quote/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = 'stock_quote'
|
7
|
+
s.version = StockQuote::VERSION
|
8
|
+
s.authors = ['Ty Rauber']
|
9
|
+
s.email = ['tyrauber@mac.com']
|
10
|
+
s.homepage = 'https://github.com/tyrauber/stock_quote'
|
11
|
+
s.summary = 'A ruby gem that retrieves real-time stock quotes from IEX.'
|
12
|
+
s.description = 'Retrieve book, chart, company, delayed quote, dividends, earnings, effective spread, financials, stats, lists, logo, news, OHLC, open/close, peers, previous, price, quote, relevant, splits, timeseries, volume by venue and batch requests through IEX (iextrading.com/developer)'
|
13
|
+
s.rubyforge_project = 'stock_quote'
|
14
|
+
s.license = 'MIT'
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
19
|
+
s.require_paths = ['lib']
|
20
|
+
|
21
|
+
# specify any dependencies here; for example:
|
22
|
+
|
23
|
+
s.add_development_dependency 'bundler', '~> 2.0.1'
|
24
|
+
s.add_development_dependency 'rake'
|
25
|
+
s.add_development_dependency 'rspec', '~> 3.8.0'
|
26
|
+
s.add_development_dependency 'vcr', '~> 4.0.0'
|
27
|
+
s.add_development_dependency 'webmock', '~> 3.4.2'
|
28
|
+
s.add_runtime_dependency 'rest-client', '~> 2.0.2'
|
29
|
+
s.add_runtime_dependency 'json'
|
30
|
+
|
31
|
+
end
|
metadata
ADDED
@@ -0,0 +1,163 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: stock_quote
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 3.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ty Rauber
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-06-20 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.0.1
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.0.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 3.8.0
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 3.8.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: vcr
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 4.0.0
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 4.0.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: webmock
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 3.4.2
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 3.4.2
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rest-client
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 2.0.2
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 2.0.2
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: json
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
description: Retrieve book, chart, company, delayed quote, dividends, earnings, effective
|
112
|
+
spread, financials, stats, lists, logo, news, OHLC, open/close, peers, previous,
|
113
|
+
price, quote, relevant, splits, timeseries, volume by venue and batch requests through
|
114
|
+
IEX (iextrading.com/developer)
|
115
|
+
email:
|
116
|
+
- tyrauber@mac.com
|
117
|
+
executables: []
|
118
|
+
extensions: []
|
119
|
+
extra_rdoc_files: []
|
120
|
+
files:
|
121
|
+
- ".gitignore"
|
122
|
+
- ".ruby-gemset"
|
123
|
+
- ".ruby-version"
|
124
|
+
- ".travis.yml"
|
125
|
+
- Gemfile
|
126
|
+
- LICENSE
|
127
|
+
- README.md
|
128
|
+
- Rakefile
|
129
|
+
- lib/stock_quote.rb
|
130
|
+
- lib/stock_quote/stock.rb
|
131
|
+
- lib/stock_quote/version.rb
|
132
|
+
- spec/spec_helper.rb
|
133
|
+
- spec/stock_quote_spec.rb
|
134
|
+
- spec/support/vcr.rb
|
135
|
+
- stock_quote.gemspec
|
136
|
+
homepage: https://github.com/tyrauber/stock_quote
|
137
|
+
licenses:
|
138
|
+
- MIT
|
139
|
+
metadata: {}
|
140
|
+
post_install_message:
|
141
|
+
rdoc_options: []
|
142
|
+
require_paths:
|
143
|
+
- lib
|
144
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - ">="
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '0'
|
149
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - ">="
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
154
|
+
requirements: []
|
155
|
+
rubyforge_project: stock_quote
|
156
|
+
rubygems_version: 2.6.14
|
157
|
+
signing_key:
|
158
|
+
specification_version: 4
|
159
|
+
summary: A ruby gem that retrieves real-time stock quotes from IEX.
|
160
|
+
test_files:
|
161
|
+
- spec/spec_helper.rb
|
162
|
+
- spec/stock_quote_spec.rb
|
163
|
+
- spec/support/vcr.rb
|