summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--lib/rss/maker.rb5
-rw-r--r--lib/rss/maker/0.9.rb54
-rw-r--r--lib/rss/maker/base.rb6
-rw-r--r--test/rss/test_maker_0.9.rb7
-rw-r--r--test/rss/test_maker_1.0.rb4
-rw-r--r--test/rss/test_maker_2.0.rb4
-rw-r--r--test/rss/test_maker_atom_entry.rb5
-rw-r--r--test/rss/test_maker_atom_feed.rb7
9 files changed, 86 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index 5e5913ded3..1533043dfb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Thu Dec 11 21:04:04 2008 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/maker.rb, lib/rss/maker/0.9.rb, lib/rss/maker/base.rb:
+ RSS::Maker.[] returns a maker class corresponds to passed version.
+
+ * test/rss/test_maker_*.rb: add tests for RSS::Maker.[].
+
Thu Dec 11 20:05:17 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
* encoding.c (rb_enc_aliases_enc_i): skips default internal.
diff --git a/lib/rss/maker.rb b/lib/rss/maker.rb
index ff32f5cb00..ed3fff47d8 100644
--- a/lib/rss/maker.rb
+++ b/lib/rss/maker.rb
@@ -6,14 +6,13 @@ module RSS
class << self
def make(version, &block)
- maker_info = self[version]
- maker_info[:maker].make(maker_info[:version], &block)
+ self[version].make(&block)
end
def [](version)
maker_info = maker(version)
raise UnsupportedMakerVersionError.new(version) if maker_info.nil?
- maker_info
+ maker_info[:maker]
end
def add_maker(version, normalized_version, maker)
diff --git a/lib/rss/maker/0.9.rb b/lib/rss/maker/0.9.rb
index 72b14dc977..cc7db8c638 100644
--- a/lib/rss/maker/0.9.rb
+++ b/lib/rss/maker/0.9.rb
@@ -7,7 +7,7 @@ module RSS
class RSS09 < RSSBase
- def initialize(feed_version="0.92")
+ def initialize(feed_version)
super
@feed_type = "rss"
end
@@ -457,11 +457,51 @@ module RSS
end
end
end
-
- add_maker("0.9", "0.92", RSS09)
- add_maker("0.91", "0.91", RSS09)
- add_maker("0.92", "0.92", RSS09)
- add_maker("rss0.91", "0.91", RSS09)
- add_maker("rss0.92", "0.92", RSS09)
+
+ class RSS091 < RSS09
+ def initialize(feed_version="0.91")
+ super
+ end
+
+ class Channel < RSS09::Channel
+ end
+
+ class Items < RSS09::Items
+ class Item < RSS09::Items::Item
+ end
+ end
+
+ class Image < RSS09::Image
+ end
+
+ class Textinput < RSS09::Textinput
+ end
+ end
+
+ class RSS092 < RSS09
+ def initialize(feed_version="0.92")
+ super
+ end
+
+ class Channel < RSS09::Channel
+ end
+
+ class Items < RSS09::Items
+ class Item < RSS09::Items::Item
+ end
+ end
+
+ class Image < RSS09::Image
+ end
+
+ class Textinput < RSS09::Textinput
+ end
+ end
+
+ add_maker("0.9", "0.92", RSS092)
+ add_maker("0.91", "0.91", RSS091)
+ add_maker("0.92", "0.92", RSS092)
+ add_maker("rss0.91", "0.91", RSS091)
+ add_maker("rss0.92", "0.92", RSS092)
end
end
diff --git a/lib/rss/maker/base.rb b/lib/rss/maker/base.rb
index 2262a764ec..3a7d255ae9 100644
--- a/lib/rss/maker/base.rb
+++ b/lib/rss/maker/base.rb
@@ -374,8 +374,8 @@ module RSS
class RSSBase < Base
class << self
- def make(version, &block)
- new(version).make(&block)
+ def make(*args, &block)
+ new(*args).make(&block)
end
end
@@ -384,7 +384,7 @@ module RSS
add_need_initialize_variable(element) do |object|
object.send("make_#{element}")
end
- module_eval(<<-EOC, __FILE__, __LINE__)
+ module_eval(<<-EOC, __FILE__, __LINE__ + 1)
private
def setup_#{element}(feed)
@#{element}.to_feed(feed)
diff --git a/test/rss/test_maker_0.9.rb b/test/rss/test_maker_0.9.rb
index 815f9e3952..f397f92646 100644
--- a/test/rss/test_maker_0.9.rb
+++ b/test/rss/test_maker_0.9.rb
@@ -4,6 +4,13 @@ require "rss/maker"
module RSS
class TestMaker09 < TestCase
+ def test_find_class
+ assert_equal(RSS::Maker::RSS091, RSS::Maker["0.91"])
+ assert_equal(RSS::Maker::RSS091, RSS::Maker["rss0.91"])
+ assert_equal(RSS::Maker::RSS092, RSS::Maker["0.9"])
+ assert_equal(RSS::Maker::RSS092, RSS::Maker["0.92"])
+ assert_equal(RSS::Maker::RSS092, RSS::Maker["rss0.92"])
+ end
def test_rss
assert_raise(LocalJumpError) do
diff --git a/test/rss/test_maker_1.0.rb b/test/rss/test_maker_1.0.rb
index 49d506bf6f..bee3206a3a 100644
--- a/test/rss/test_maker_1.0.rb
+++ b/test/rss/test_maker_1.0.rb
@@ -4,6 +4,10 @@ require "rss/maker"
module RSS
class TestMaker10 < TestCase
+ def test_find_class
+ assert_equal(RSS::Maker::RSS10, RSS::Maker["1.0"])
+ assert_equal(RSS::Maker::RSS10, RSS::Maker["rss1.0"])
+ end
def test_rdf
assert_raise(LocalJumpError) do
diff --git a/test/rss/test_maker_2.0.rb b/test/rss/test_maker_2.0.rb
index f6d4a11dc3..9fe6543dd9 100644
--- a/test/rss/test_maker_2.0.rb
+++ b/test/rss/test_maker_2.0.rb
@@ -4,6 +4,10 @@ require "rss/maker"
module RSS
class TestMaker20 < TestCase
+ def test_find_class
+ assert_equal(RSS::Maker::RSS20, RSS::Maker["2.0"])
+ assert_equal(RSS::Maker::RSS20, RSS::Maker["rss2.0"])
+ end
def test_rss
assert_raise(LocalJumpError) do
diff --git a/test/rss/test_maker_atom_entry.rb b/test/rss/test_maker_atom_entry.rb
index ae0ab2d09f..09f16f5422 100644
--- a/test/rss/test_maker_atom_entry.rb
+++ b/test/rss/test_maker_atom_entry.rb
@@ -4,6 +4,11 @@ require "rss/maker"
module RSS
class TestMakerAtomEntry < TestCase
+ def test_find_class
+ assert_equal(RSS::Maker::Atom::Entry, RSS::Maker["atom:entry"])
+ assert_equal(RSS::Maker::Atom::Entry, RSS::Maker["atom1.0:entry"])
+ end
+
def test_root_element
entry = Maker.make("atom:entry") do |maker|
setup_dummy_channel_atom(maker)
diff --git a/test/rss/test_maker_atom_feed.rb b/test/rss/test_maker_atom_feed.rb
index e5bf0e23b2..378cf9ac31 100644
--- a/test/rss/test_maker_atom_feed.rb
+++ b/test/rss/test_maker_atom_feed.rb
@@ -4,6 +4,13 @@ require "rss/maker"
module RSS
class TestMakerAtomFeed < TestCase
+ def test_find_class
+ assert_equal(RSS::Maker::Atom::Feed, RSS::Maker["atom"])
+ assert_equal(RSS::Maker::Atom::Feed, RSS::Maker["atom:feed"])
+ assert_equal(RSS::Maker::Atom::Feed, RSS::Maker["atom1.0"])
+ assert_equal(RSS::Maker::Atom::Feed, RSS::Maker["atom1.0:feed"])
+ end
+
def test_root_element
feed = Maker.make("atom") do |maker|
setup_dummy_channel_atom(maker)