* lib/rss/rss.rb (RSS::VERSION), test/rss/test_version.rb:

0.2.3 -> 0.2.4.

* lib/rss/maker.rb, lib/rss/maker/, test/rss/test_maker_2.0.rb:
  fixed a bug that RSS::Maker.make("0.9")'s item doesn't make some
  elements if description is missed.
  Reported by Michael Auzenne. Thanks!!!

* lib/rss/maker/0.9.rb, test/rss/test_maker_0.9.rb:
  RSS::Maker.make("0.9") generates RSS 0.92 not RSS 0.91.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15431 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
kou 2008-02-11 08:24:18 +00:00
parent bd5a15f76d
commit 9d968bc221
12 changed files with 91 additions and 34 deletions

View File

@ -1,3 +1,16 @@
Mon Feb 11 17:21:18 2008 Kouhei Sutou <kou@cozmixng.org>
* lib/rss/rss.rb (RSS::VERSION), test/rss/test_version.rb:
0.2.3 -> 0.2.4.
* lib/rss/maker.rb, lib/rss/maker/, test/rss/test_maker_2.0.rb:
fixed a bug that RSS::Maker.make("0.9")'s item doesn't make some
elements if description is missed.
Reported by Michael Auzenne. Thanks!!!
* lib/rss/maker/0.9.rb, test/rss/test_maker_0.9.rb:
RSS::Maker.make("0.9") generates RSS 0.92 not RSS 0.91.
Mon Feb 11 10:43:31 2008 NARUSE, Yui <naruse@ruby-lang.org> Mon Feb 11 10:43:31 2008 NARUSE, Yui <naruse@ruby-lang.org>
* ruby.c (load_file): the encoding of DATA follows the source * ruby.c (load_file): the encoding of DATA follows the source

View File

@ -8,15 +8,15 @@ module RSS
def make(version, &block) def make(version, &block)
m = maker(version) m = maker(version)
raise UnsupportedMakerVersionError.new(version) if m.nil? raise UnsupportedMakerVersionError.new(version) if m.nil?
m.make(&block) m[:maker].make(m[:version], &block)
end end
def maker(version) def maker(version)
MAKERS[version] MAKERS[version]
end end
def add_maker(version, maker) def add_maker(version, normalized_version, maker)
MAKERS[version] = maker MAKERS[version] = {:maker => maker, :version => normalized_version}
end end
def versions def versions
@ -24,7 +24,7 @@ module RSS
end end
def makers def makers
MAKERS.values.uniq MAKERS.values.collect {|info| info[:maker]}.uniq
end end
end end
end end

View File

@ -7,7 +7,7 @@ module RSS
class RSS09 < RSSBase class RSS09 < RSSBase
def initialize(feed_version="0.91") def initialize(feed_version="0.92")
super super
@feed_type = "rss" @feed_type = "rss"
end end
@ -258,23 +258,27 @@ module RSS
def to_feed(rss) def to_feed(rss)
item = Rss::Channel::Item.new item = Rss::Channel::Item.new
set = setup_values(item) set = setup_values(item)
if set or title {|t| t.have_required_values?} _not_set_required_variables = not_set_required_variables
if _not_set_required_variables.empty?
rss.items << item rss.items << item
set_parent(item, rss.channel) set_parent(item, rss.channel)
setup_other_elements(rss, item) setup_other_elements(rss, item)
elsif variable_is_set? elsif variable_is_set?
raise NotSetError.new("maker.items", not_set_required_variables) raise NotSetError.new("maker.items", _not_set_required_variables)
end end
end end
private private
def required_variable_names def required_variable_names
%w(link) []
end end
def not_set_required_variables def not_set_required_variables
vars = super vars = super
if @maker.feed_version == "0.91"
vars << "title" unless title {|t| t.have_required_values?} vars << "title" unless title {|t| t.have_required_values?}
vars << "link" unless link {|l| l.have_required_values?}
end
vars vars
end end
@ -454,8 +458,10 @@ module RSS
end end
end end
add_maker("0.9", RSS09) add_maker("0.9", "0.92", RSS09)
add_maker("0.91", RSS09) add_maker("0.91", "0.91", RSS09)
add_maker("rss0.91", RSS09) add_maker("0.92", "0.92", RSS09)
add_maker("rss0.91", "0.91", RSS09)
add_maker("rss0.92", "0.92", RSS09)
end end
end end

View File

@ -7,8 +7,8 @@ module RSS
class RSS10 < RSSBase class RSS10 < RSSBase
def initialize def initialize(feed_version="1.0")
super("1.0") super
@feed_type = "rss" @feed_type = "rss"
end end
@ -428,7 +428,7 @@ module RSS
end end
end end
add_maker("1.0", RSS10) add_maker("1.0", "1.0", RSS10)
add_maker("rss1.0", RSS10) add_maker("rss1.0", "1.0", RSS10)
end end
end end

View File

@ -93,7 +93,16 @@ module RSS
class Item < RSS09::Items::Item class Item < RSS09::Items::Item
private private
def required_variable_names def required_variable_names
%w(title description) []
end
def not_set_required_variables
vars = super
if !title {|t| t.have_required_values?} and
!description {|d| d.have_required_values?}
vars << "title or description"
end
vars
end end
def variables def variables
@ -208,7 +217,7 @@ module RSS
end end
end end
add_maker("2.0", RSS20) add_maker("2.0", "2.0", RSS20)
add_maker("rss2.0", RSS20) add_maker("rss2.0", "2.0", RSS20)
end end
end end

View File

@ -357,8 +357,8 @@ module RSS
class RSSBase < Base class RSSBase < Base
class << self class << self
def make(&block) def make(version, &block)
new.make(&block) new(version).make(&block)
end end
end end

View File

@ -5,8 +5,8 @@ module RSS
module Maker module Maker
module Atom module Atom
class Entry < RSSBase class Entry < RSSBase
def initialize def initialize(feed_version="1.0")
super("1.0") super
@feed_type = "atom" @feed_type = "atom"
@feed_subtype = "entry" @feed_subtype = "entry"
end end
@ -157,7 +157,7 @@ module RSS
end end
end end
add_maker("atom:entry", Atom::Entry) add_maker("atom:entry", "1.0", Atom::Entry)
add_maker("atom1.0:entry", Atom::Entry) add_maker("atom1.0:entry", "1.0", Atom::Entry)
end end
end end

View File

@ -4,8 +4,8 @@ module RSS
module Maker module Maker
module Atom module Atom
class Feed < RSSBase class Feed < RSSBase
def initialize def initialize(feed_version="1.0")
super("1.0") super
@feed_type = "atom" @feed_type = "atom"
@feed_subtype = "feed" @feed_subtype = "feed"
end end
@ -421,9 +421,9 @@ module RSS
end end
end end
add_maker("atom", Atom::Feed) add_maker("atom", "1.0", Atom::Feed)
add_maker("atom:feed", Atom::Feed) add_maker("atom:feed", "1.0", Atom::Feed)
add_maker("atom1.0", Atom::Feed) add_maker("atom1.0", "1.0", Atom::Feed)
add_maker("atom1.0:feed", Atom::Feed) add_maker("atom1.0:feed", "1.0", Atom::Feed)
end end
end end

View File

@ -53,7 +53,7 @@ require "rss/xml-stylesheet"
module RSS module RSS
VERSION = "0.2.3" VERSION = "0.2.4"
URI = "http://purl.org/rss/1.0/" URI = "http://purl.org/rss/1.0/"

View File

@ -13,7 +13,7 @@ module RSS
setup_dummy_channel(maker) setup_dummy_channel(maker)
setup_dummy_image(maker) setup_dummy_image(maker)
end end
assert_equal("0.91", rss.rss_version) assert_equal("0.92", rss.rss_version)
rss = RSS::Maker.make("0.91") do |maker| rss = RSS::Maker.make("0.91") do |maker|
setup_dummy_channel(maker) setup_dummy_channel(maker)

View File

@ -430,6 +430,35 @@ module RSS
test_items(false) test_items(false)
end end
def test_pubDate_without_description
title = "TITLE"
link = "http://hoge.com/"
description = "text hoge fuga"
author = "oprah@oxygen.net"
pubDate = Time.now
rss = RSS::Maker.make("2.0") do |maker|
setup_dummy_channel(maker)
maker.items.new_item do |item|
item.title = title
item.link = link
# item.description = description
item.author = author
item.pubDate = pubDate
end
end
assert_equal(1, rss.items.size)
rss.channel.items.each_with_index do |item, i|
assert_equal(title, item.title)
assert_equal(link, item.link)
# assert_equal(description, item.description)
assert_equal(author, item.author)
assert_equal(pubDate, item.pubDate)
assert_equal(pubDate, item.date)
end
end
def test_guid def test_guid
isPermaLink = "true" isPermaLink = "true"
content = "http://inessential.com/2002/09/01.php#a2" content = "http://inessential.com/2002/09/01.php#a2"

View File

@ -3,7 +3,7 @@ require "rss-testcase"
module RSS module RSS
class TestVersion < TestCase class TestVersion < TestCase
def test_version def test_version
assert_equal("0.2.3", ::RSS::VERSION) assert_equal("0.2.4", ::RSS::VERSION)
end end
end end
end end