forked from hotsh/rstat.us
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Change FindsOrCreatesFeeds to a FeedService object
- Loading branch information
1 parent
ffbb21d
commit ff0d242
Showing
7 changed files
with
98 additions
and
99 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
require_relative '../../lib/converts_subscriber_to_feed_data' | ||
|
||
class FeedService | ||
def initialize(target_feed) | ||
@target_feed = target_feed | ||
end | ||
|
||
def find_or_create! | ||
find_feed_by_id || | ||
find_feed_by_remote_url || | ||
create_feed_from_feed_data | ||
end | ||
|
||
private | ||
|
||
def find_feed_by_id | ||
Feed.first(:id => @target_feed) | ||
end | ||
|
||
def find_feed_by_remote_url | ||
feed_data = get_feed_data_for_target | ||
Feed.first(:remote_url => feed_data.url) | ||
end | ||
|
||
def create_feed_from_feed_data | ||
feed_data = get_feed_data_for_target | ||
Feed.create_and_populate!(feed_data) | ||
end | ||
|
||
def get_feed_data_for_target | ||
ConvertsSubscriberToFeedData.new(@target_feed).get_feed_data! | ||
end | ||
end |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
require_relative '../test_helper' | ||
|
||
require 'mocha' | ||
|
||
describe FeedService do | ||
include TestHelper | ||
|
||
describe "#find_or_create!" do | ||
let(:service) { FeedService.new(target_feed) } | ||
let(:existing_feed) { mock } | ||
let(:new_feed) { mock } | ||
|
||
subject { service.find_or_create! } | ||
|
||
describe "when the feed can be found by ID" do | ||
# the BSON ID of user '[email protected]' (follow me!) | ||
let(:target_feed) { "505cc1beb4f2cd000200022c" } | ||
|
||
before do | ||
service.stubs(:find_feed_by_id).returns(existing_feed) | ||
end | ||
|
||
it "the feed is returned" do | ||
service.find_or_create!.must_equal existing_feed | ||
subject | ||
end | ||
end | ||
|
||
describe "when the feed can by found by remote URL" do | ||
# the remote URL of user '[email protected]' (follow me!) | ||
let(:target_feed) { "https://rstat.us/feeds/505cc1beb4f2cd000200022c.atom" } | ||
|
||
before do | ||
service.stubs(:find_feed_by_id).returns nil | ||
service.stubs(:find_feed_by_remote_url).returns(existing_feed) | ||
end | ||
|
||
it "the feed is returned" do | ||
service.find_or_create!.must_equal existing_feed | ||
subject | ||
end | ||
end | ||
|
||
describe "when the feed doesn't exist" do | ||
let(:target_feed) { "[email protected]" } # (follow me!) | ||
|
||
before do | ||
service.stubs(:find_feed_by_id).returns nil | ||
service.stubs(:find_feed_by_remote_url).returns nil | ||
service.stubs(:create_feed_from_feed_data).returns(new_feed) | ||
end | ||
|
||
it "must be created instead" do | ||
service.find_or_create!.must_equal new_feed | ||
subject | ||
end | ||
end | ||
|
||
end | ||
end |