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 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
- YahooFinance::CurrentQuote.new(symbol).results
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 = yahoo_historical_quote
52
+ self.results = yahoo_past_quote
30
53
  end
31
54
 
32
55
  private
33
56
 
34
- def yahoo_historical_quote
35
- YahooFinance::PastQuote.new(symbol, date).results
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
@@ -1,3 +1,3 @@
1
1
  module Stocktracker
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -38,7 +38,9 @@ module YahooFinance
38
38
  end
39
39
 
40
40
  def get_current_quote
41
- current_map(yahoo_quote)
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(quote)
58
+ def current_values
57
59
  CSV.parse(yahoo_quote)[0]
58
60
  end
59
61
 
60
- def current_map(quote)
62
+ def current_map
61
63
  map = {}
62
- values = current_values(quote)
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= Date.parse(date)
91
- self.end_date= Date.parse(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(yahoo_quote)
98
+ past_map
99
+ rescue
100
+ nil
97
101
  end
98
102
 
99
- def yahoo_quote
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(quote)
116
- CSV.parse(yahoo_quote)[1]
119
+ def past_values
120
+ CSV.parse(yahoo_past_quote)[1]
117
121
  end
118
122
 
119
- def past_map(quote)
123
+ def past_map
120
124
  map = {}
121
- values = past_values(quote)
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{Returns Yahoo Finance Quotes for stock symbols}
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.3
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-16 00:00:00.000000000Z
12
+ date: 2011-10-17 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &2166372700 !ruby/object:Gem::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: *2166372700
24
+ version_requirements: *2153516340
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &2166372280 !ruby/object:Gem::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: *2166372280
36
- description: Returns Yahoo Finance Quotes for stock symbols
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