feedtools_ram_cache 1.0.1 → 1.0.2
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/CHANGELOG +2 -0
- data/README.textile +5 -2
- data/feedtools_ram_cache.gemspec +2 -2
- data/lib/feed_tools_ram_cache.rb +10 -0
- data/test/cache_test.rb +10 -5
- data/test/integration_test.rb +13 -3
- metadata +2 -2
data/CHANGELOG
CHANGED
data/README.textile
CHANGED
@@ -18,8 +18,11 @@ h2. Usage
|
|
18
18
|
The gem does not interfere with the FeedTools API. To enable RAM-based caching,
|
19
19
|
require the gem and configure FeedTools to use it:
|
20
20
|
|
21
|
-
bc.
|
22
|
-
|
21
|
+
bc. # Configure FeedTools to use the RAM-backed cache.
|
22
|
+
require 'feed_tools_ram_cache'
|
23
|
+
FeedTools.configurations[:feed_cache] = FeedTools::RamFeedCache
|
24
|
+
|
25
|
+
In Rails, the code above can be placed in an initializer.
|
23
26
|
|
24
27
|
h3. Serializing the Cache State
|
25
28
|
|
data/feedtools_ram_cache.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{feedtools_ram_cache}
|
5
|
-
s.version = "1.0.
|
5
|
+
s.version = "1.0.2"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Victor Costan"]
|
9
|
-
s.date = %q{2009-09-
|
9
|
+
s.date = %q{2009-09-21}
|
10
10
|
s.description = %q{RAM-based cache for FeedTools.}
|
11
11
|
s.email = %q{victor@zergling.net}
|
12
12
|
s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README.textile", "lib/feed_tools_ram_cache.rb"]
|
data/lib/feed_tools_ram_cache.rb
CHANGED
@@ -40,6 +40,11 @@ class RamFeedCache
|
|
40
40
|
@by_id, @by_href = nil, nil
|
41
41
|
initialize_cache
|
42
42
|
end
|
43
|
+
|
44
|
+
# The number of entries in the cache.
|
45
|
+
def self.length
|
46
|
+
@by_id.length
|
47
|
+
end
|
43
48
|
|
44
49
|
# Fields required by FeedTools.
|
45
50
|
#
|
@@ -71,6 +76,11 @@ class RamFeedCache
|
|
71
76
|
true
|
72
77
|
end
|
73
78
|
|
79
|
+
# Called by FeedTools.
|
80
|
+
def new_record?
|
81
|
+
@fields[:id].nil? ? true : false
|
82
|
+
end
|
83
|
+
|
74
84
|
# Called by FeedTools to initialize the cache.
|
75
85
|
def self.initialize_cache
|
76
86
|
# NOTE: the FeedTools documentation says this will be called once. In fact,
|
data/test/cache_test.rb
CHANGED
@@ -50,6 +50,11 @@ class CacheTest < Test::Unit::TestCase
|
|
50
50
|
_check_state item
|
51
51
|
end
|
52
52
|
|
53
|
+
def test_length
|
54
|
+
assert_equal 4, Cache.length, 'Incorrect number of cache entries'
|
55
|
+
end
|
56
|
+
|
57
|
+
|
53
58
|
def test_find_by_id
|
54
59
|
assert_equal nil, Cache.find_by_id(0), 'ID 0 should not exist'
|
55
60
|
assert_equal 'google', Cache.find_by_id(1).href
|
@@ -80,22 +85,21 @@ class CacheTest < Test::Unit::TestCase
|
|
80
85
|
end
|
81
86
|
|
82
87
|
def test_state_storing
|
83
|
-
#File.open('test/fixtures/unit.yml', 'w') do |f|
|
84
|
-
# YAML.dump Cache.state, f
|
85
|
-
#end
|
86
88
|
assert_equal @golden_state, Cache.state
|
87
89
|
end
|
88
90
|
|
89
91
|
def test_clear
|
90
92
|
Cache.clear
|
91
|
-
assert_equal
|
93
|
+
assert_equal 0, Cache.length, 'Cache not cleared -- found entries'
|
94
|
+
assert_equal nil, Cache.find_by_id(1), 'Cache not cleared - found ID 1'
|
92
95
|
assert_equal nil, Cache.find_by_href('google'),
|
93
|
-
'Cache not
|
96
|
+
'Cache not cleared - found HREF google'
|
94
97
|
end
|
95
98
|
|
96
99
|
def test_state_loading
|
97
100
|
Cache.state = [{:id => 1}]
|
98
101
|
|
102
|
+
assert_equal 1, Cache.length, 'Cache state not reset, too many entries'
|
99
103
|
assert_equal nil, Cache.find_by_id(2), 'Cache state not reset - found ID 2'
|
100
104
|
assert_equal nil, Cache.find_by_href('google'),
|
101
105
|
'Cache state not reset - found google'
|
@@ -105,6 +109,7 @@ class CacheTest < Test::Unit::TestCase
|
|
105
109
|
Cache.clear
|
106
110
|
Cache.state = @golden_state
|
107
111
|
|
112
|
+
test_length
|
108
113
|
test_find_by_id
|
109
114
|
test_find_by_href
|
110
115
|
test_equality
|
data/test/integration_test.rb
CHANGED
@@ -11,7 +11,7 @@ require 'open-uri'
|
|
11
11
|
|
12
12
|
class IntegrationTest < Test::Unit::TestCase
|
13
13
|
def setup
|
14
|
-
FeedTools.configurations[:feed_cache] =
|
14
|
+
FeedTools.configurations[:feed_cache] = FeedTools::RamFeedCache
|
15
15
|
FeedTools::RamFeedCache.clear
|
16
16
|
end
|
17
17
|
|
@@ -27,13 +27,23 @@ class IntegrationTest < Test::Unit::TestCase
|
|
27
27
|
|
28
28
|
def _test_cache(uri)
|
29
29
|
feed, cached_feed = nil, nil
|
30
|
-
time = Benchmark.realtime
|
30
|
+
time = Benchmark.realtime do
|
31
|
+
feed = FeedTools::Feed.open(uri)
|
32
|
+
# NOTE: would like to include item instantiation, but it turns out parsing
|
33
|
+
# takes forever and dominates the running time
|
34
|
+
# feed.items.each { |item| item.description }
|
35
|
+
end
|
31
36
|
|
32
37
|
# Make sure the cache's state is YAML-serializable
|
33
38
|
yaml_state = FeedTools::RamFeedCache.state.to_yaml
|
34
39
|
FeedTools::RamFeedCache.state = YAML.load yaml_state
|
35
40
|
|
36
|
-
cached_time = Benchmark.realtime
|
41
|
+
cached_time = Benchmark.realtime do
|
42
|
+
cached_feed = FeedTools::Feed.open uri
|
43
|
+
# NOTE: would like to include item instantiation, but it turns out parsing
|
44
|
+
# takes forever and dominates the running time
|
45
|
+
# cached_feed.items.each { |item| item.description }
|
46
|
+
end
|
37
47
|
|
38
48
|
assert !cached_feed.live?, 'cached_feed is live?'
|
39
49
|
assert_operator cached_time, :< , time / 3,
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: feedtools_ram_cache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Victor Costan
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-09-
|
12
|
+
date: 2009-09-21 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|