feed_cache 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/feed_cache.rb +8 -2
- data/lib/feed_cache/version.rb +1 -1
- data/spec/feed_cache_spec.rb +32 -1
- data/spec/fixtures/no_entry_feed.xml +11 -0
- metadata +6 -4
data/lib/feed_cache.rb
CHANGED
@@ -2,6 +2,8 @@ module FeedCache
|
|
2
2
|
DEFAULT_ENTRIES_LIMIT = 10
|
3
3
|
DEFAULT_EXPIRES_IN = 900
|
4
4
|
|
5
|
+
class MissingEntries < StandardError; end
|
6
|
+
|
5
7
|
class << self
|
6
8
|
attr_accessor :cache
|
7
9
|
attr_writer :default_entries_limit, :default_expires_in
|
@@ -28,8 +30,12 @@ module FeedCache
|
|
28
30
|
|
29
31
|
def self.entries_for(url, options = {})
|
30
32
|
limit = options.delete(:limit) || default_entries_limit
|
31
|
-
|
32
|
-
|
33
|
+
begin
|
34
|
+
feed = fetch(url, options)
|
35
|
+
(feed ? feed.entries : []).take(limit)
|
36
|
+
rescue TypeError
|
37
|
+
raise FeedCache::MissingEntries
|
38
|
+
end
|
33
39
|
end
|
34
40
|
end
|
35
41
|
|
data/lib/feed_cache/version.rb
CHANGED
data/spec/feed_cache_spec.rb
CHANGED
@@ -9,14 +9,29 @@ describe FeedCache do
|
|
9
9
|
let(:blog_feed) { YAML.load_file(File.join File.dirname(__FILE__), "./fixtures/blog_feed.yaml") }
|
10
10
|
let(:cache) { ActiveSupport::Cache::MemoryStore.new }
|
11
11
|
|
12
|
-
|
12
|
+
def stub_feedzirra
|
13
13
|
Feedzirra::Feed.stub(:fetch_and_parse).with(blog_url).and_return(blog_feed)
|
14
|
+
end
|
15
|
+
|
16
|
+
def unstub_feedzirra
|
17
|
+
begin
|
18
|
+
Feedzirra::Feed.unstub(:fetch_and_parse)
|
19
|
+
rescue RSpec::Mocks::MockExpectationError => e
|
20
|
+
$stderr.puts e.message
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
before do
|
14
25
|
FeedCache.configure do |fc|
|
15
26
|
fc.cache = cache
|
16
27
|
end
|
17
28
|
end
|
18
29
|
|
30
|
+
after { unstub_feedzirra }
|
31
|
+
|
19
32
|
describe "fetching a feed" do
|
33
|
+
before { stub_feedzirra }
|
34
|
+
|
20
35
|
context "for a valid feed grab" do
|
21
36
|
it "returns the feed with entries" do
|
22
37
|
feed = FeedCache.fetch(blog_url)
|
@@ -39,6 +54,8 @@ describe FeedCache do
|
|
39
54
|
end
|
40
55
|
|
41
56
|
describe "getting just the entries for a feed" do
|
57
|
+
before { stub_feedzirra }
|
58
|
+
|
42
59
|
context "for a valid feed grab" do
|
43
60
|
it "returns the entries array" do
|
44
61
|
FeedCache.entries_for(blog_url).length.should == 10
|
@@ -60,5 +77,19 @@ describe FeedCache do
|
|
60
77
|
FeedCache.entries_for(blog_url).should == []
|
61
78
|
end
|
62
79
|
end
|
80
|
+
|
81
|
+
# There's a bug where TypeError is raised, but I can't replicated it
|
82
|
+
# by using FakeWeb, so I want to cover it with an explicit raise for now
|
83
|
+
context "for a feed that raises TypeError when fetching entries" do
|
84
|
+
let(:no_entry_feed_url) { "http://example.com/no_entry_feed.xml" }
|
85
|
+
let(:no_entry_feed) { File.read(File.join(File.dirname(__FILE__), "./fixtures/no_entry_feed.xml")) }
|
86
|
+
|
87
|
+
it "raises FeedCache::MissingEntries" do
|
88
|
+
Feedzirra::Feed.stub(:fetch_and_parse).and_raise(TypeError)
|
89
|
+
lambda {
|
90
|
+
FeedCache.entries_for(no_entry_feed_url)
|
91
|
+
}.should raise_error(FeedCache::MissingEntries)
|
92
|
+
end
|
93
|
+
end
|
63
94
|
end
|
64
95
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
|
3
|
+
<channel>
|
4
|
+
<title>Recent posts | Kajabi Support</title>
|
5
|
+
<description>posts</description>
|
6
|
+
<link>http://support.kajabi.com/posts</link>
|
7
|
+
<language>en-us</language>
|
8
|
+
<ttl>60</ttl>
|
9
|
+
<atom:link href="support.kajabi.com/categories/3610-knowledge-base/posts.rss" rel="self" type="application/rss+xml"/>
|
10
|
+
</channel>
|
11
|
+
</rss>
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: feed_cache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
- 0
|
9
8
|
- 1
|
10
|
-
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Brendon Murphy
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2012-04-04 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -84,6 +84,7 @@ files:
|
|
84
84
|
- lib/feed_cache/version.rb
|
85
85
|
- spec/feed_cache_spec.rb
|
86
86
|
- spec/fixtures/blog_feed.yaml
|
87
|
+
- spec/fixtures/no_entry_feed.xml
|
87
88
|
- spec/spec_helper.rb
|
88
89
|
has_rdoc: true
|
89
90
|
homepage: ""
|
@@ -122,4 +123,5 @@ summary: A thin wrapper over Feedzirra with injected caching
|
|
122
123
|
test_files:
|
123
124
|
- spec/feed_cache_spec.rb
|
124
125
|
- spec/fixtures/blog_feed.yaml
|
126
|
+
- spec/fixtures/no_entry_feed.xml
|
125
127
|
- spec/spec_helper.rb
|