Skip to content

Commit

Permalink
implemented the pending feed specs to determine feed types for Atom, …
Browse files Browse the repository at this point in the history
…AtomFeedBurner, and RDF. Created Atom, FeedBurner, and RDF classes and wrote will_parse? specs for them.
  • Loading branch information
pauldix committed Jan 24, 2009
1 parent 36e6219 commit 6230b19
Show file tree
Hide file tree
Showing 11 changed files with 116 additions and 7 deletions.
11 changes: 9 additions & 2 deletions feedzirra.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,17 @@ Gem::Specification.new do |s|
s.email = %q{paul@pauldix.net}
s.files = [
"lib/feedzirra.rb",
"lib/feedzirra/feed.rb"
"lib/feedzirra/feed.rb",
"lib/feedzirra/atom.rb",
"lib/feedzirra/atom_feed_burner.rb",
"lib/feedzirra/rdf.rb",
"README.textile", "Rakefile",
"spec/spec.opts",
"spec/spec_helper.rb"]
"spec/spec_helper.rb",
"spec/feedzirra/feed_spec.rb",
"spec/feedzirra/atom_spec.rb",
"spec/feedzirra/atom_feed_burner_spec.rb",
"spec/feedzirra/rdf_spec.rb"]
s.has_rdoc = true
s.homepage = %q{http://github.com/pauldix/feedzirra}
s.require_paths = ["lib"]
Expand Down
3 changes: 3 additions & 0 deletions lib/feedzirra.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
$LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__))) unless $LOAD_PATH.include?(File.expand_path(File.dirname(__FILE__)))

require 'feedzirra/feed'
require 'feedzirra/atom'
require 'feedzirra/atom_feed_burner'
require 'feedzirra/rdf'

module SAXMachine
VERSION = "0.0.1"
Expand Down
7 changes: 7 additions & 0 deletions lib/feedzirra/atom.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module Feedzirra
class Atom
def self.will_parse?(xml)
xml =~ /Atom/ || false
end
end
end
7 changes: 7 additions & 0 deletions lib/feedzirra/atom_feed_burner.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module Feedzirra
class AtomFeedBurner
def self.will_parse?(xml)
(xml =~ /Atom/ && xml =~ /feedburner/) || false
end
end
end
19 changes: 19 additions & 0 deletions lib/feedzirra/feed.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,23 @@
require 'feedzirra/atom'
require 'feedzirra/atom_feed_burner'

module Feedzirra
class Feed
def self.determine_feed_parser_for_xml(xml)
start_of_doc = xml.slice(0, 500)
if start_of_doc =~ /Atom/
atom_feed_classes.detect {|feed_class| feed_class.will_parse?(start_of_doc)} || Atom
elsif RDF.will_parse?(xml)
RDF
end
end

def self.add_atom_feed_class(klass)
atom_feed_classes << klass
end

def self.atom_feed_classes
@atom_feed_classes ||= [AtomFeedBurner]
end
end
end
7 changes: 7 additions & 0 deletions lib/feedzirra/rdf.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module Feedzirra
class RDF
def self.will_parse?(xml)
xml =~ /rdf\:RDF/ || false
end
end
end
17 changes: 17 additions & 0 deletions spec/feedzirra/atom_feed_burner_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
require File.dirname(__FILE__) + '/../spec_helper'

describe Feedzirra::AtomFeedBurner do
describe "#will_parse?" do
it "should return true for a feedburner atom feed" do
Feedzirra::AtomFeedBurner.will_parse?(sample_feedburner_atom_feed).should be_true
end

it "should return false for an rdf feed" do
Feedzirra::AtomFeedBurner.will_parse?(sample_rdf_feed).should be_false
end

it "should return false for a regular atom feed" do
Feedzirra::AtomFeedBurner.will_parse?(sample_atom_feed).should be_false
end
end
end
13 changes: 13 additions & 0 deletions spec/feedzirra/atom_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
require File.dirname(__FILE__) + '/../spec_helper'

describe Feedzirra::Atom do
describe "#will_parse?" do
it "should return true for an atom feed" do
Feedzirra::Atom.will_parse?(sample_atom_feed).should be_true
end

it "should return false for an rdf feed" do
Feedzirra::Atom.will_parse?(sample_rdf_feed).should be_false
end
end
end
24 changes: 20 additions & 4 deletions spec/feedzirra/feed_spec.rb
Original file line number Diff line number Diff line change
@@ -1,9 +1,25 @@
require File.dirname(__FILE__) + '/../spec_helper'

describe Feedzirra::Feed do
describe "#feed_parser_for_xml" do
it "should return a Feedzirra::Atom object for an atom feed"
it "should return a Feedzirra::AtomFeedBurner object for an atom feedburner feed"
it "should return a Feedzirra::RDF object for an rdf/rss 1.0 feed"
describe "#determine_feed_parser_for_xml" do
it "should return a Feedzirra::Atom object for an atom feed" do
Feedzirra::Feed.determine_feed_parser_for_xml(sample_atom_feed).should == Feedzirra::Atom
end

it "should return a Feedzirra::AtomFeedBurner object for an atom feedburner feed" do
Feedzirra::Feed.determine_feed_parser_for_xml(sample_feedburner_atom_feed).should == Feedzirra::AtomFeedBurner
end

it "should return a Feedzirra::RDF object for an rdf/rss 1.0 feed" do
Feedzirra::Feed.determine_feed_parser_for_xml(sample_rdf_feed).should == Feedzirra::RDF
end
end

describe "adding feed types" do
it "should be able to add an atom feed type" do
@klass = Class.new
Feedzirra::Feed.add_atom_feed_class(@klass)
Feedzirra::Feed.atom_feed_classes.last.should == @klass
end
end
end
13 changes: 13 additions & 0 deletions spec/feedzirra/rdf_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
require File.dirname(__FILE__) + '/../spec_helper'

describe Feedzirra::RDF do
describe "#will_parse?" do
it "should return true for an rdf feed" do
Feedzirra::RDF.will_parse?(sample_rdf_feed).should be_true
end

it "should return false for an atom feed" do
Feedzirra::RDF.will_parse?(sample_atom_feed).should be_false
end
end
end
2 changes: 1 addition & 1 deletion spec/spec_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,6 @@ def sample_rdf_feed
File.read("#{File.dirname(__FILE__)}/sample_feeds/ArunGuptasBlog.xml")
end

def sample_feedburner_feed
def sample_feedburner_atom_feed
File.read("#{File.dirname(__FILE__)}/sample_feeds/PaulDixExplainsNothing.xml")
end

0 comments on commit 6230b19

Please sign in to comment.