stock_quote 3.0.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.

Potentially problematic release.


This version of stock_quote might be problematic. Click here for more details.

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
@@ -0,0 +1,7 @@
1
+ .idea/
2
+ *.gem
3
+ .bundle
4
+ Gemfile.lock
5
+ pkg/*
6
+ spec/support/vcr_cassettes/*.yml
7
+ .DS_Store
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
@@ -0,0 +1,12 @@
1
+ sudo: false
2
+ language: ruby
3
+ bundler_args: ''
4
+ rvm:
5
+ - 2.5.1
6
+ - 2.4.4
7
+ - 2.3.4
8
+ - 2.3.7
9
+ install:
10
+ - gem install bundler --version '~> 2.0.1'
11
+ - bundle install
12
+ script: "rake"
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in stock_check.gemspec
4
+ gemspec
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,9 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task test: :spec
7
+
8
+ task default: :test
9
+
@@ -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
@@ -0,0 +1,4 @@
1
+ # => StockQuote::VERSION
2
+ module StockQuote
3
+ VERSION = '3.0.0'
4
+ end
@@ -0,0 +1,3 @@
1
+ require 'rubygems'
2
+ require 'stock_quote/version'
3
+ require 'stock_quote/stock'
@@ -0,0 +1,7 @@
1
+ require 'stock_quote'
2
+ require 'rubygems'
3
+ require 'bundler/setup'
4
+ require 'support/vcr'
5
+
6
+ RSpec.configure do |config|
7
+ end
@@ -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
@@ -0,0 +1,9 @@
1
+ # encoding: UTF-8
2
+ require 'vcr'
3
+ VCR.configure do |c|
4
+ c.cassette_library_dir = 'spec/support/vcr_cassettes'
5
+ c.hook_into :webmock
6
+ c.ignore_localhost = true
7
+ c.default_cassette_options = { record: :new_episodes }
8
+ c.configure_rspec_metadata!
9
+ end
@@ -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