stocktracker 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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