jonleighton-bcms_feeds 1.0.3 → 1.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.
Files changed (3) hide show
  1. data/app/models/feed.rb +4 -2
  2. data/test/unit/feed_test.rb +19 -16
  3. metadata +2 -2
data/app/models/feed.rb CHANGED
@@ -18,15 +18,17 @@ class Feed < ActiveRecord::Base
18
18
  begin
19
19
  self.expires_at = Time.now.utc + TTL
20
20
  write_attribute(:contents, remote_contents)
21
+ save
21
22
  rescue StandardError, Timeout::Error => exception
22
23
  logger.error("Loading feed #{url} failed with #{exception.inspect}")
23
24
  self.expires_at = Time.now.utc + TTL_ON_ERROR
24
- read_attribute(:contents)
25
+ save
25
26
  end
26
27
  else
27
28
  logger.info("Loading feed from cache: #{url}")
28
- read_attribute(:contents)
29
29
  end
30
+
31
+ read_attribute(:contents)
30
32
  end
31
33
 
32
34
  def remote_contents
@@ -2,7 +2,7 @@ require File.dirname(__FILE__) + "/../test_helper"
2
2
 
3
3
  class FeedTest < ActiveSupport::TestCase
4
4
  def setup
5
- @feed = Feed.new(:url => "http://example.com/blog.rss")
5
+ @feed = Feed.create!(:url => "http://example.com/blog.rss")
6
6
  @contents = "<feed>Some feed</feed>"
7
7
 
8
8
  now = Time.now
@@ -12,13 +12,13 @@ class FeedTest < ActiveSupport::TestCase
12
12
  Feed.send(:remove_const, :TIMEOUT)
13
13
  Feed.const_set(:TIMEOUT, 1)
14
14
  end
15
-
16
- def test_remote_contents
15
+
16
+ test "remote_contents should fetch the feed" do
17
17
  @feed.expects(:open).with("http://example.com/blog.rss").returns(stub(:read => @contents))
18
18
  assert_equal @contents, @feed.remote_contents
19
19
  end
20
20
 
21
- def test_remote_contents_timeout
21
+ test "remote_contents should raise a Timeout::Error if fetching the feed takes longer then Feed::TIMEOUT" do
22
22
  def @feed.open(url)
23
23
  sleep(2)
24
24
  stubs(:read => "bla")
@@ -27,32 +27,35 @@ class FeedTest < ActiveSupport::TestCase
27
27
  assert_raise(Timeout::Error) { @feed.remote_contents }
28
28
  end
29
29
 
30
- def test_contents_no_expiry
30
+ test "contents with no expiry should return the remote contents and save it" do
31
31
  @feed.expires_at = nil
32
- @feed.stubs(:remote_contents).returns(@contents)
33
-
34
- assert_equal @contents, @feed.contents
35
- assert_equal @contents, @feed.read_attribute(:contents)
36
- assert_equal Time.now.utc + Feed::TTL, @feed.expires_at
32
+ should_get_remote_contents
37
33
  end
38
34
 
39
- def test_contents_expiry_in_past
35
+ test "contents with an expiry in the past return the remote contents and save it" do
40
36
  @feed.expires_at = Time.now - 1.hour
37
+ should_get_remote_contents
38
+ end
39
+
40
+ def should_get_remote_contents
41
41
  @feed.stubs(:remote_contents).returns(@contents)
42
-
43
42
  assert_equal @contents, @feed.contents
43
+ @feed.reload
44
44
  assert_equal @contents, @feed.read_attribute(:contents)
45
- assert_equal Time.now.utc + Feed::TTL, @feed.expires_at
45
+
46
+ # I think the to_i is necessary because of a lack of precision provided by sqlite3. I think.
47
+ # Anyway, without it the comparison fails.
48
+ assert_equal (Time.now.utc + Feed::TTL).to_i, @feed.expires_at.to_i
46
49
  end
47
50
 
48
- def test_contents_expiry_in_future
51
+ test "contents with the expiry in the future should return the cached contents" do
49
52
  @feed.expires_at = Time.now + 1.hour
50
53
  @feed.write_attribute(:contents, @contents)
51
54
 
52
55
  assert_equal @contents, @feed.contents
53
56
  end
54
57
 
55
- def test_contents_expiry_in_past_with_error_getting_remote_contents
58
+ test "TTL of cached contents should be extended if there is an error fetching the remote contents" do
56
59
  [StandardError, Timeout::Error].each do |exception|
57
60
  @feed.expires_at = Time.now - 1.hour
58
61
  @feed.stubs(:remote_contents).raises(exception)
@@ -63,7 +66,7 @@ class FeedTest < ActiveSupport::TestCase
63
66
  end
64
67
  end
65
68
 
66
- def test_parsed_contents
69
+ test "parsed_contents should return the contents parsed by SimpleRSS" do
67
70
  @feed.stubs(:contents).returns(@contents)
68
71
  SimpleRSS.stubs(:parse).with(@contents).returns(parsed_contents = stub)
69
72
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jonleighton-bcms_feeds
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Leighton
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-08-14 00:00:00 -07:00
12
+ date: 2009-08-15 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency