feedtools_ram_cache 1.0.2 → 1.1
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 +16 -0
- data/feedtools_ram_cache.gemspec +4 -4
- data/lib/feed_tools_ram_cache.rb +41 -2
- data/test/offline_test.rb +27 -0
- metadata +3 -2
data/CHANGELOG
CHANGED
data/README.textile
CHANGED
@@ -43,6 +43,22 @@ clean slate for testing.
|
|
43
43
|
|
44
44
|
bc. FeedTools::RamFeedCache.clear
|
45
45
|
|
46
|
+
h3. Offline Testing Mode
|
47
|
+
|
48
|
+
One-line summary: use the following in your unit tests.
|
49
|
+
|
50
|
+
bc. FeedTools::RamFeedCache.offline_mode = true
|
51
|
+
|
52
|
+
The RAM-backed cache can be used for testing as follows. Test data is generated
|
53
|
+
by clearing the cache, opening the feed to be tested, and saving the cache's
|
54
|
+
state (perhaps by serializing to a YAML file). Testing code sets the cache state
|
55
|
+
to the saved state, and opens the feed again.
|
56
|
+
|
57
|
+
This strategy has the following issues: the code to be tested may clear the
|
58
|
+
cache (my code does), and FeedTools will not use the cached data to see if it's
|
59
|
+
stale. While the cache is in offline mode, it ignores clearing requests, and it
|
60
|
+
pretends its items are fresh.
|
61
|
+
|
46
62
|
h2. Naming Convention
|
47
63
|
|
48
64
|
The naming scheme for this gem is confusing, but it is consistent with the
|
data/feedtools_ram_cache.gemspec
CHANGED
@@ -2,22 +2,22 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{feedtools_ram_cache}
|
5
|
-
s.version = "1.
|
5
|
+
s.version = "1.1"
|
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-
|
9
|
+
s.date = %q{2009-10-03}
|
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"]
|
13
|
-
s.files = ["CHANGELOG", "LICENSE", "Manifest", "README.textile", "Rakefile", "lib/feed_tools_ram_cache.rb", "test/cache_test.rb", "test/fixtures/unit.yml", "test/integration_test.rb", "feedtools_ram_cache.gemspec"]
|
13
|
+
s.files = ["CHANGELOG", "LICENSE", "Manifest", "README.textile", "Rakefile", "lib/feed_tools_ram_cache.rb", "test/cache_test.rb", "test/fixtures/unit.yml", "test/integration_test.rb", "feedtools_ram_cache.gemspec", "test/offline_test.rb"]
|
14
14
|
s.homepage = %q{http://github.com/costan/feed_tools_ram_cache}
|
15
15
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Feedtools_ram_cache", "--main", "README.textile"]
|
16
16
|
s.require_paths = ["lib"]
|
17
17
|
s.rubyforge_project = %q{zerglings}
|
18
18
|
s.rubygems_version = %q{1.3.5}
|
19
19
|
s.summary = %q{RAM-based cache for FeedTools.}
|
20
|
-
s.test_files = ["test/cache_test.rb", "test/integration_test.rb"]
|
20
|
+
s.test_files = ["test/cache_test.rb", "test/integration_test.rb", "test/offline_test.rb"]
|
21
21
|
|
22
22
|
if s.respond_to? :specification_version then
|
23
23
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
data/lib/feed_tools_ram_cache.rb
CHANGED
@@ -37,8 +37,7 @@ class RamFeedCache
|
|
37
37
|
|
38
38
|
# Removes all the cache items.
|
39
39
|
def self.clear
|
40
|
-
|
41
|
-
initialize_cache
|
40
|
+
# NOTE: Actual implementation supplied in offline_mode=.
|
42
41
|
end
|
43
42
|
|
44
43
|
# The number of entries in the cache.
|
@@ -81,6 +80,46 @@ class RamFeedCache
|
|
81
80
|
@fields[:id].nil? ? true : false
|
82
81
|
end
|
83
82
|
|
83
|
+
# Enters or exits offline testing mode.
|
84
|
+
#
|
85
|
+
# In offline testing mode, cache clearing requests are ignored, and items
|
86
|
+
# pretend that they are fresh. Warning: this means items won't pretend like
|
87
|
+
# dumb ActiveRecord objects, and may fail unit tests that treat them as such.
|
88
|
+
def self.offline_mode=(offline)
|
89
|
+
if offline # Pretend items are live to stay offline.
|
90
|
+
undef :last_retrieved, :time_to_live
|
91
|
+
def last_retrieved
|
92
|
+
Time.now
|
93
|
+
end
|
94
|
+
def time_to_live
|
95
|
+
86400 # A day since last_retrieved was read, should avoid re-fetching.
|
96
|
+
end
|
97
|
+
|
98
|
+
class <<self
|
99
|
+
undef :clear
|
100
|
+
def clear
|
101
|
+
initialize_cache
|
102
|
+
end
|
103
|
+
end
|
104
|
+
else # Going online is OK, don't lie about the cache state.
|
105
|
+
undef :last_retrieved, :time_to_live
|
106
|
+
def last_retrieved
|
107
|
+
@fields[:last_retrieved]
|
108
|
+
end
|
109
|
+
def time_to_live
|
110
|
+
@fields[:time_to_live]
|
111
|
+
end
|
112
|
+
class <<self
|
113
|
+
undef :clear
|
114
|
+
def clear
|
115
|
+
@by_id, @by_href = nil, nil
|
116
|
+
initialize_cache
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
self.offline_mode = false
|
122
|
+
|
84
123
|
# Called by FeedTools to initialize the cache.
|
85
124
|
def self.initialize_cache
|
86
125
|
# NOTE: the FeedTools documentation says this will be called once. In fact,
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# Author:: Victor Costan
|
2
|
+
# Copyright:: Copyright (C) 2009 Zergling.Net
|
3
|
+
# License:: MIT
|
4
|
+
|
5
|
+
require 'feed_tools_ram_cache'
|
6
|
+
require 'test/unit'
|
7
|
+
|
8
|
+
|
9
|
+
class OfflineTest < Test::Unit::TestCase
|
10
|
+
def setup
|
11
|
+
FeedTools.configurations[:feed_cache] = FeedTools::RamFeedCache
|
12
|
+
fixtures_path = File.join File.dirname(__FILE__), 'fixtures'
|
13
|
+
FeedTools::RamFeedCache.state =
|
14
|
+
YAML.load File.read(File.join(fixtures_path, 'expired_cache.yml'))
|
15
|
+
@url = "http://events.mit.edu/rss/"
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_offline_and_online
|
19
|
+
FeedTools::RamFeedCache.offline_mode = true
|
20
|
+
feed = FeedTools::Feed.open @url
|
21
|
+
assert !feed.live?, "Offline mode resulted in live feed"
|
22
|
+
|
23
|
+
FeedTools::RamFeedCache.offline_mode = false
|
24
|
+
feed = FeedTools::Feed.open @url
|
25
|
+
assert feed.live?, "Online mode read expired feed"
|
26
|
+
end
|
27
|
+
end
|
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.
|
4
|
+
version: "1.1"
|
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-
|
12
|
+
date: 2009-10-03 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -100,3 +100,4 @@ summary: RAM-based cache for FeedTools.
|
|
100
100
|
test_files:
|
101
101
|
- test/cache_test.rb
|
102
102
|
- test/integration_test.rb
|
103
|
+
- test/offline_test.rb
|