stocktracker 0.0.3 → 0.0.4
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/stocktracker.rb +40 -4
- data/lib/stocktracker/version.rb +1 -1
- data/lib/stocktracker/yahoofinance.rb +16 -12
- data/stocktracker.gemspec +3 -2
- metadata +20 -8
data/lib/stocktracker.rb
CHANGED
@@ -2,9 +2,17 @@ require "stocktracker/version"
|
|
2
2
|
require "stocktracker/yahoofinance"
|
3
3
|
|
4
4
|
module StockTracker
|
5
|
+
|
6
|
+
def self.cache
|
7
|
+
@cache ||= Redis.new
|
8
|
+
end
|
9
|
+
|
5
10
|
class CurrentQuote
|
6
11
|
include YahooFinance
|
7
12
|
|
13
|
+
def cache
|
14
|
+
StockTracker.cache
|
15
|
+
end
|
8
16
|
|
9
17
|
attr_accessor :symbol, :results
|
10
18
|
def initialize(symbol)
|
@@ -15,25 +23,53 @@ module StockTracker
|
|
15
23
|
private
|
16
24
|
|
17
25
|
def yahoo_quote
|
18
|
-
|
26
|
+
if cache.exists(cache_key)
|
27
|
+
Marshal.load(cache.get(cache_key))
|
28
|
+
else
|
29
|
+
results = YahooFinance::CurrentQuote.new(symbol).results
|
30
|
+
cache.set(cache_key, Marshal.dump(results))
|
31
|
+
cache.expire(cache_key, 600)
|
32
|
+
results
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def cache_key
|
37
|
+
"StockTracker:current:#{symbol}"
|
19
38
|
end
|
20
39
|
end
|
21
40
|
|
22
41
|
class PastQuote
|
23
42
|
include YahooFinance
|
24
43
|
|
44
|
+
def cache
|
45
|
+
StockTracker.cache
|
46
|
+
end
|
47
|
+
|
25
48
|
attr_accessor :symbol, :date, :results
|
26
49
|
def initialize(symbol, date)
|
27
50
|
self.symbol = symbol
|
28
51
|
self.date = date
|
29
|
-
self.results =
|
52
|
+
self.results = yahoo_past_quote
|
30
53
|
end
|
31
54
|
|
32
55
|
private
|
33
56
|
|
34
|
-
|
35
|
-
|
57
|
+
|
58
|
+
def yahoo_past_quote
|
59
|
+
if cache.exists(cache_key)
|
60
|
+
Marshal.load(cache.get(cache_key))
|
61
|
+
else
|
62
|
+
results = YahooFinance::PastQuote.new(symbol, date).results
|
63
|
+
cache.set(cache_key, Marshal.dump(results))
|
64
|
+
cache.expire(cache_key, 600)
|
65
|
+
results
|
66
|
+
end
|
36
67
|
end
|
37
68
|
|
69
|
+
def cache_key
|
70
|
+
"StockTracker:past:#{symbol}:#{date.to_s}"
|
71
|
+
end
|
72
|
+
|
73
|
+
|
38
74
|
end
|
39
75
|
end
|
data/lib/stocktracker/version.rb
CHANGED
@@ -38,7 +38,9 @@ module YahooFinance
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def get_current_quote
|
41
|
-
current_map
|
41
|
+
current_map
|
42
|
+
rescue
|
43
|
+
nil
|
42
44
|
end
|
43
45
|
|
44
46
|
def yahoo_quote
|
@@ -53,13 +55,13 @@ module YahooFinance
|
|
53
55
|
CURRENT_FORMAT.keys.join
|
54
56
|
end
|
55
57
|
|
56
|
-
def current_values
|
58
|
+
def current_values
|
57
59
|
CSV.parse(yahoo_quote)[0]
|
58
60
|
end
|
59
61
|
|
60
|
-
def current_map
|
62
|
+
def current_map
|
61
63
|
map = {}
|
62
|
-
values = current_values
|
64
|
+
values = current_values
|
63
65
|
CURRENT_FORMAT.each_with_index do |v,i|
|
64
66
|
if v[1].is_a?(Array)
|
65
67
|
map[v[1][0]] = values[i].send(v[1][1])
|
@@ -87,16 +89,18 @@ module YahooFinance
|
|
87
89
|
|
88
90
|
def initialize(symbol, date)
|
89
91
|
self.symbol= symbol
|
90
|
-
self.start_date=
|
91
|
-
self.end_date=
|
92
|
+
self.start_date= date
|
93
|
+
self.end_date= date
|
92
94
|
self.results= get_past_quote
|
93
95
|
end
|
94
96
|
|
95
97
|
def get_past_quote
|
96
|
-
past_map
|
98
|
+
past_map
|
99
|
+
rescue
|
100
|
+
nil
|
97
101
|
end
|
98
102
|
|
99
|
-
def
|
103
|
+
def yahoo_past_quote
|
100
104
|
open(yahoo_past_url).read
|
101
105
|
end
|
102
106
|
|
@@ -112,13 +116,13 @@ module YahooFinance
|
|
112
116
|
end
|
113
117
|
|
114
118
|
|
115
|
-
def past_values
|
116
|
-
CSV.parse(
|
119
|
+
def past_values
|
120
|
+
CSV.parse(yahoo_past_quote)[1]
|
117
121
|
end
|
118
122
|
|
119
|
-
def past_map
|
123
|
+
def past_map
|
120
124
|
map = {}
|
121
|
-
values = past_values
|
125
|
+
values = past_values
|
122
126
|
PAST_FORMAT.each_with_index do |v,i|
|
123
127
|
if v.is_a?(Array)
|
124
128
|
map[v[0]] = values[i].send(v[1])
|
data/stocktracker.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.authors = ["Aaron Worsham"]
|
9
9
|
s.email = ["aaronworsham@gmail.com"]
|
10
10
|
s.homepage = "https://github.com/aaronworsham/stocktracker"
|
11
|
-
s.summary = %q{Returns Yahoo Finance Quotes for stock symbols}
|
12
|
-
s.description = %q{
|
11
|
+
s.summary = %q{Returns Yahoo Finance Quotes for stock symbols.}
|
12
|
+
s.description = %q{Queries Yahoo Finance for Quotes from current and past. Uses Redis to cache results for period of time}
|
13
13
|
|
14
14
|
s.rubyforge_project = "stocktracker"
|
15
15
|
|
@@ -21,4 +21,5 @@ Gem::Specification.new do |s|
|
|
21
21
|
# specify any dependencies here; for example:
|
22
22
|
s.add_development_dependency 'rake'
|
23
23
|
s.add_development_dependency 'rspec'
|
24
|
+
s.add_runtime_dependency 'redis'
|
24
25
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stocktracker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-10-
|
12
|
+
date: 2011-10-17 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement: &
|
16
|
+
requirement: &2153516340 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2153516340
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &2153515680 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,8 +32,20 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
36
|
-
|
35
|
+
version_requirements: *2153515680
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: redis
|
38
|
+
requirement: &2153515040 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *2153515040
|
47
|
+
description: Queries Yahoo Finance for Quotes from current and past. Uses Redis to
|
48
|
+
cache results for period of time
|
37
49
|
email:
|
38
50
|
- aaronworsham@gmail.com
|
39
51
|
executables: []
|
@@ -73,7 +85,7 @@ rubyforge_project: stocktracker
|
|
73
85
|
rubygems_version: 1.8.10
|
74
86
|
signing_key:
|
75
87
|
specification_version: 3
|
76
|
-
summary: Returns Yahoo Finance Quotes for stock symbols
|
88
|
+
summary: Returns Yahoo Finance Quotes for stock symbols.
|
77
89
|
test_files:
|
78
90
|
- spec/spec_helper.rb
|
79
91
|
- spec/stocktracker_spec.rb
|