ticker_fetcher 0.2.0 → 0.3.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.
- data/lib/ticker_fetcher.rb +38 -14
- data/test/helper.rb +1 -4
- data/test/test_ticker_fetcher.rb +71 -33
- data/ticker_fetcher.gemspec +2 -2
- metadata +6 -6
data/lib/ticker_fetcher.rb
CHANGED
@@ -7,17 +7,17 @@ class TickerFetcher
|
|
7
7
|
Name = 1
|
8
8
|
LastSale = 2
|
9
9
|
MarketCap = 3
|
10
|
+
IPOYear = 4
|
10
11
|
Sector = 5
|
11
12
|
Industry = 6
|
12
|
-
attr_reader :exchanges
|
13
|
+
attr_reader :exchanges, :exchange_urls
|
13
14
|
|
14
|
-
# Passing
|
15
|
-
# is to retrieve all.
|
15
|
+
# Passing an exchange name will retrieve only that exchange. Default is to retrieve all.
|
16
16
|
def initialize
|
17
17
|
@exchanges = {}
|
18
18
|
@exchange_urls = {
|
19
|
-
'NASD' => 'http://www.nasdaq.com/screening/companies-by-industry.aspx?exchange=NASDAQ&render=download',
|
20
19
|
'AMEX' => 'http://www.nasdaq.com/screening/companies-by-industry.aspx?exchange=AMEX&render=download',
|
20
|
+
'NASD' => 'http://www.nasdaq.com/screening/companies-by-industry.aspx?exchange=NASDAQ&render=download',
|
21
21
|
'NYSE' => 'http://www.nasdaq.com/screening/companies-by-industry.aspx?exchange=NYSE&render=download'
|
22
22
|
}
|
23
23
|
end
|
@@ -42,15 +42,39 @@ class TickerFetcher
|
|
42
42
|
private
|
43
43
|
|
44
44
|
def parse_csv(data)
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
45
|
+
CSV.parse(data, :headers => true).inject([]) do |tickers, row|
|
46
|
+
tickers << [ticker(row), name(row), last_sale(row), market_cap(row), ipo_year(row), sector(row), industry(row)]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def name(row)
|
51
|
+
row[Name]
|
52
|
+
end
|
53
|
+
|
54
|
+
def ticker(row)
|
55
|
+
ticker = row[Symbol].strip.gsub('"', '')
|
56
|
+
unless(ticker.nil? || ticker.empty?)
|
57
|
+
ticker = ticker =~ /\W/ ? ticker.gsub('/', '.').gsub('^', '-') : ticker
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def last_sale(row)
|
62
|
+
row[LastSale]
|
63
|
+
end
|
64
|
+
|
65
|
+
def market_cap(row)
|
66
|
+
row[MarketCap]
|
67
|
+
end
|
68
|
+
|
69
|
+
def ipo_year(row)
|
70
|
+
row[IPOYear]
|
71
|
+
end
|
72
|
+
|
73
|
+
def sector(row)
|
74
|
+
row[Sector]
|
75
|
+
end
|
76
|
+
|
77
|
+
def industry(row)
|
78
|
+
row[Industry]
|
55
79
|
end
|
56
80
|
end
|
data/test/helper.rb
CHANGED
@@ -1,10 +1,7 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'test/unit'
|
3
|
-
require '
|
3
|
+
require 'fakeweb'
|
4
4
|
|
5
5
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
6
6
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
7
7
|
require 'ticker_fetcher'
|
8
|
-
|
9
|
-
class Test::Unit::TestCase
|
10
|
-
end
|
data/test/test_ticker_fetcher.rb
CHANGED
@@ -2,38 +2,76 @@ require 'helper'
|
|
2
2
|
|
3
3
|
class TestTickerFetcher < Test::Unit::TestCase
|
4
4
|
def setup
|
5
|
-
@
|
6
|
-
@
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
@
|
17
|
-
|
18
|
-
assert_nil(@
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
@
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
5
|
+
@tf = TickerFetcher.new
|
6
|
+
@tf.exchange_urls.each do |exchange, url|
|
7
|
+
FakeWeb.register_uri(
|
8
|
+
:get,
|
9
|
+
url,
|
10
|
+
:body => File.open("test/#{exchange.downcase}_test_data.csv").read)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_retrieve_with_one_exchange_returns_a_ticker_fetcher_with_one_exchange
|
15
|
+
@tf.retrieve('NYSE')
|
16
|
+
assert_not_nil(@tf.exchanges['NYSE'])
|
17
|
+
assert_nil(@tf.exchanges['NASD'])
|
18
|
+
assert_nil(@tf.exchanges['AMEX'])
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_retrieve_with_two_exchanges_returns_a_ticker_fetcher_with_two_exchanges
|
22
|
+
@tf.retrieve('NYSE')
|
23
|
+
@tf.retrieve('NASD')
|
24
|
+
assert_not_nil(@tf.exchanges['NYSE'])
|
25
|
+
assert_not_nil(@tf.exchanges['NASD'])
|
26
|
+
assert_nil(@tf.exchanges['AMEX'])
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_retrieve_with_all_exchanges_returns_a_ticker_fetcher_with_all_exchanges
|
30
|
+
@tf.retrieve
|
31
|
+
@tf.exchanges.keys.each do |exchange|
|
32
|
+
assert_not_nil(@tf.exchanges[exchange])
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_retrieve_with_one_exchange_returns_a_ticker_fetcher_with_correct_tickers
|
37
|
+
@tf.retrieve('NYSE')
|
38
|
+
assert_equal('SC', @tf.exchanges['NYSE'].first[TickerFetcher::Symbol])
|
39
|
+
assert_equal('ZGEN', @tf.exchanges['NYSE'].last[TickerFetcher::Symbol])
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_retrieve_with_one_exchange_returns_a_ticker_fetcher_with_correct_company_names
|
43
|
+
@tf.retrieve('NYSE')
|
44
|
+
assert_equal('StupidCompany, Inc.', @tf.exchanges['NYSE'].first[TickerFetcher::Name])
|
45
|
+
assert_equal('ZymoGenetics, Inc.', @tf.exchanges['NYSE'].last[TickerFetcher::Name])
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_retrieve_with_one_exchange_returns_a_ticker_fetcher_with_correct_last_sale_price
|
49
|
+
@tf.retrieve('NYSE')
|
50
|
+
assert_equal('2.71', @tf.exchanges['NYSE'].first[TickerFetcher::LastSale])
|
51
|
+
assert_equal('25', @tf.exchanges['NYSE'].last[TickerFetcher::LastSale])
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_retrieve_with_one_exchange_returns_a_ticker_fetcher_with_correct_market_cap
|
55
|
+
@tf.retrieve('NYSE')
|
56
|
+
assert_equal('72858350', @tf.exchanges['NYSE'].first[TickerFetcher::MarketCap])
|
57
|
+
assert_equal('85473000', @tf.exchanges['NYSE'].last[TickerFetcher::MarketCap])
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_retrieve_with_one_exchange_returns_a_ticker_fetcher_with_correct_ipo_year
|
61
|
+
@tf.retrieve('NYSE')
|
62
|
+
assert_equal('1999', @tf.exchanges['NYSE'].first[TickerFetcher::IPOYear])
|
63
|
+
assert_equal('2015', @tf.exchanges['NYSE'].last[TickerFetcher::IPOYear])
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_retrieve_with_one_exchange_returns_a_ticker_fetcher_with_correct_sector
|
67
|
+
@tf.retrieve('NYSE')
|
68
|
+
assert_equal('Consumer Services', @tf.exchanges['NYSE'].first[TickerFetcher::Sector])
|
69
|
+
assert_equal('Technology', @tf.exchanges['NYSE'].last[TickerFetcher::Sector])
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_retrieve_with_one_exchange_returns_a_ticker_fetcher_with_correct_industry
|
73
|
+
@tf.retrieve('NYSE')
|
74
|
+
assert_equal('Other Specialty Stores', @tf.exchanges['NYSE'].first[TickerFetcher::Industry])
|
75
|
+
assert_equal('Semiconductors', @tf.exchanges['NYSE'].last[TickerFetcher::Industry])
|
38
76
|
end
|
39
77
|
end
|
data/ticker_fetcher.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "ticker_fetcher"
|
5
|
-
s.version = "0.
|
5
|
+
s.version = "0.3.0"
|
6
6
|
s.authors = ["Matt White"]
|
7
7
|
s.email = %q{mattw922@gmail.com}
|
8
8
|
s.homepage = %q{http://github.com/whitethunder/ticker_fetcher}
|
@@ -12,6 +12,6 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.test_files = `git ls-files -- {test}/*`.split("\n")
|
13
13
|
s.require_paths = ["lib"]
|
14
14
|
|
15
|
-
s.add_development_dependency(%q
|
15
|
+
s.add_development_dependency(%q{fakeweb}, [">= 1.3.0"])
|
16
16
|
end
|
17
17
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ticker_fetcher
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,19 +9,19 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-08-
|
12
|
+
date: 2011-08-09 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
16
|
-
requirement: &
|
15
|
+
name: fakeweb
|
16
|
+
requirement: &71675170 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 1.3.0
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *71675170
|
25
25
|
description: Retrieves tickers, and names for all securities listed on the 3 major
|
26
26
|
US exchanges (NYSE, NASDAQ, AMEX).
|
27
27
|
email: mattw922@gmail.com
|