Skip to content

Commit 757193a

Browse files
author
Matt Swanson
committed
switch to using feedzirra to handle new_entries logic. tweak overflow styles. fix missing feed titles in import
1 parent 64dd32d commit 757193a

File tree

9 files changed

+35
-19
lines changed

9 files changed

+35
-19
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ A work-in-progress, self-hosted, anti-social RSS reader.
22

33
It looks something like this at the moment:
44

5-
![](http://i.imgur.com/CmiINVG.png)
5+
![](https://raw.github.com/swanson/stringer/screenshots/feed.png)

app/commands/feeds/import_from_opml.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@
22
require_relative "../../utils/opml_parser"
33

44
class ImportFromOpml
5-
ONE_HOUR = 60 * 60
5+
ONE_DAY = 24 * 60 * 60
66

77
def self.import(opml_contents, should_overwrite = false)
88
feeds = OpmlParser.new.parse_feeds(opml_contents)
99

1010
Feed.delete_all if should_overwrite
1111

1212
feeds.each do |feed|
13-
Feed.create(name: feed[:title],
13+
Feed.create(name: feed[:name],
1414
url: feed[:url],
15-
last_fetched: Time.now - ONE_HOUR)
15+
last_fetched: Time.now - ONE_DAY)
1616
end
1717
end
1818
end

app/models/feed.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
class Feed < ActiveRecord::Base
2-
has_many :stories
2+
has_many :stories, order: "published desc"
33
end

app/models/story.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ def headline
88
end
99

1010
def lead
11-
Loofah.fragment(self.body).text[0,25]
11+
Loofah.fragment(self.body).text[0,100]
1212
end
1313

1414
def source

app/public/css/styles.css

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ li.story.open .story-preview {
105105
height: 30px;
106106
line-height: 30px;
107107
cursor: pointer;
108+
overflow: hidden;
109+
text-overflow: ellipsis;
108110
}
109111

110112
.story-preview div {

app/tasks/fetch_feed.rb

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,36 @@ def initialize(feed, feed_parser = Feedzirra::Feed)
1111

1212
def fetch
1313
begin
14-
result = @parser.fetch_and_parse(@feed.url)
14+
updated_feed = rebuild_feed
1515

16-
unless result.last_modified < @feed.last_fetched
17-
result.entries.each do |entry|
18-
StoryRepository.add(entry, @feed) if is_new?(entry)
19-
end
20-
21-
FeedRepository.update_last_fetched(@feed, result.last_modified)
16+
updated_feed.new_entries.each do |entry|
17+
StoryRepository.add(entry, @feed) if is_new?(entry)
2218
end
23-
rescue
19+
20+
FeedRepository.update_last_fetched(@feed, updated_feed.last_modified)
21+
rescue Exception => ex
2422
puts "Something went wrong when parsing #{@feed.url}"
2523
end
2624

27-
result
25+
updated_feed
2826
end
2927

3028
private
29+
def rebuild_feed
30+
new_feed = Feedzirra::Parser::RSS.new
31+
new_feed.feed_url = @feed.url
32+
new_feed.last_modified = @feed.last_fetched
33+
34+
unless @feed.stories.empty?
35+
last_entry = Feedzirra::Parser::RSSEntry.new
36+
last_entry.url = @feed.stories.first.permalink
37+
38+
new_feed.entries << last_entry
39+
end
40+
41+
@parser.update(new_feed)
42+
end
43+
3144
def is_new?(entry)
3245
entry.published > @feed.last_fetched
3346
end

screenshots/feed.png

188 KB
Loading

spec/factories/feed_factory.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ def self.build(params = {})
55
FakeFeed.new(
66
name: params[:name] || Faker::Name.name + " on Software",
77
url: params[:url] || Faker::Internet.url,
8-
last_fetched: params[:last_fetched] || Time.now)
8+
last_fetched: params[:last_fetched] || Time.now,
9+
stories: params[:stories] || [])
910
end
1011
end

spec/tasks/fetch_feed_spec.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
context "when no new posts have been added" do
1919
it "should not add any new posts" do
2020
fake_feed = stub(last_modified: Time.new(2012, 12, 31))
21-
parser = stub(fetch_and_parse: fake_feed)
21+
parser = stub(update: fake_feed)
2222

2323
StoryRepository.should_not_receive(:add)
2424

@@ -31,8 +31,8 @@
3131
let(:new_story){ stub(published: now + 1) }
3232
let(:old_story) { stub(published: Time.new(2009, 4, 20)) }
3333

34-
let(:fake_feed) { stub(last_modified: now, entries: [new_story, old_story]) }
35-
let(:fake_parser) { stub(fetch_and_parse: fake_feed) }
34+
let(:fake_feed) { stub(last_modified: now, entries: [new_story, old_story], new_entries: [new_story]) }
35+
let(:fake_parser) { stub(update: fake_feed) }
3636

3737
it "should only add posts that are new" do
3838
StoryRepository.should_receive(:add).with(new_story, daring_fireball)

0 commit comments

Comments
 (0)