1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* lib/rss, test/rss: backported from trunk. (2005-11-16 - now)

* lib/rss/maker/taxonomy.rb: implemented taxonomy module for RSS
  Maker.
* lib/rss/taxonomy.rb: supported RSS Maker.
* lib/rss/maker.rb: added taxonomy module support.

* lib/rss/rss.rb: adjusted to other element API.
* lib/rss/1.0.rb: adjusted to other element API but backward
  compatibility is reserved.
* lib/rss/0.9.rb: ditto.

* test/rss/test_maker_taxo.rb: added test case for taxonomy module
  for RSS Maker.
* test/rss/test_setup_maker_1.0.rb: added tests for taxo:topic.

* test/rss/test_setup_maker_1.0.rb: added backward compatibility
  test.
* test/rss/test_setup_maker_0.9.rb: ditto.
* test/rss/test_setup_maker_2.0.rb: ditto.

* test/rss/rss-testcase.rb: added convenience method for setting
  up taxo:topic.
* test/rss/rss-assertions.rb: added assertion for taxo:topic.

* sample/rss/blend.rb: followed new API.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@10291 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
kou 2006-06-17 00:26:41 +00:00
parent f1c37d2bf9
commit 4a396a8b7a
12 changed files with 326 additions and 46 deletions

View file

@ -472,8 +472,12 @@ module RSS
rv rv
end end
def maker_target(maker) def maker_target(items)
maker.items.new_item if items.respond_to?("items")
# For backward compatibility
items = items.items
end
items.new_item
end end
def setup_maker_element(item) def setup_maker_element(item)

View file

@ -170,6 +170,12 @@ module RSS
tag_name_with_prefix(PREFIX) tag_name_with_prefix(PREFIX)
end end
def setup_maker(target)
lis.each do |li|
target << li.resource
end
end
private private
def children def children
@li @li
@ -224,6 +230,12 @@ module RSS
tag_name_with_prefix(PREFIX) tag_name_with_prefix(PREFIX)
end end
def setup_maker(target)
lis.each do |li|
target << li.resource
end
end
private private
def children def children
@li @li
@ -600,8 +612,12 @@ module RSS
] ]
end end
def maker_target(maker) def maker_target(items)
maker.items.new_item if items.respond_to?("items")
# For backward compatibility
items = items.items
end
items.new_item
end end
end end

View file

@ -32,5 +32,6 @@ require "rss/maker/2.0"
require "rss/maker/content" require "rss/maker/content"
require "rss/maker/dublincore" require "rss/maker/dublincore"
require "rss/maker/syndication" require "rss/maker/syndication"
require "rss/maker/taxonomy"
require "rss/maker/trackback" require "rss/maker/trackback"
require "rss/maker/image" require "rss/maker/image"

View file

@ -4,7 +4,7 @@ require 'rss/maker/dublincore'
module RSS module RSS
module Maker module Maker
module TaxonomyTopicsModel module TaxoTopicsModel
def self.append_features(klass) def self.append_features(klass)
super super
@ -13,7 +13,7 @@ module RSS
klass.module_eval(<<-EOC, __FILE__, __LINE__ + 1) klass.module_eval(<<-EOC, __FILE__, __LINE__ + 1)
attr_reader :taxo_topics attr_reader :taxo_topics
def make_taxo_topics def make_taxo_topics
self.class::TaxonomyTopics.new(@maker) self.class::TaxoTopics.new(@maker)
end end
def setup_taxo_topics(rss, current) def setup_taxo_topics(rss, current)
@ -24,10 +24,10 @@ EOC
def self.install_taxo_topics(klass) def self.install_taxo_topics(klass)
klass.module_eval(<<-EOC, *Utils.get_file_and_line_from_caller(1)) klass.module_eval(<<-EOC, *Utils.get_file_and_line_from_caller(1))
class TaxonomyTopics < TaxonomyTopicsBase class TaxoTopics < TaxoTopicsBase
def to_rss(rss, current) def to_rss(rss, current)
if current.respond_to?(:taxo_topics) if current.respond_to?(:taxo_topics)
topics = current.class::TaxonomyTopics.new topics = current.class::TaxoTopics.new
bag = topics.Bag bag = topics.Bag
@resources.each do |resource| @resources.each do |resource|
bag.lis << RDF::Bag::Li.new(resource) bag.lis << RDF::Bag::Li.new(resource)
@ -39,7 +39,7 @@ EOC
EOC EOC
end end
class TaxonomyTopicsBase class TaxoTopicsBase
include Base include Base
attr_reader :resources attr_reader :resources
@ -47,7 +47,7 @@ EOC
end end
end end
module TaxonomyTopicModel module TaxoTopicModel
def self.append_features(klass) def self.append_features(klass)
super super
@ -56,7 +56,7 @@ EOC
klass.module_eval(<<-EOC, __FILE__, __LINE__ + 1) klass.module_eval(<<-EOC, __FILE__, __LINE__ + 1)
attr_reader :taxo_topics attr_reader :taxo_topics
def make_taxo_topics def make_taxo_topics
self.class::TaxonomyTopics.new(@maker) self.class::TaxoTopics.new(@maker)
end end
def setup_taxo_topics(rss, current) def setup_taxo_topics(rss, current)
@ -68,7 +68,7 @@ EOC
end end
def taxo_topic=(new_value) def taxo_topic=(new_value)
@taxo_topic[0] = self.class::TaxonomyTopic.new(self) @taxo_topic[0] = self.class::TaxoTopic.new(self)
@taxo_topic[0].value = new_value @taxo_topic[0].value = new_value
end end
EOC EOC
@ -76,14 +76,14 @@ EOC
def self.install_taxo_topic(klass) def self.install_taxo_topic(klass)
klass.module_eval(<<-EOC, *Utils.get_file_and_line_from_caller(1)) klass.module_eval(<<-EOC, *Utils.get_file_and_line_from_caller(1))
class TaxonomyTopics < TaxonomyTopicsBase class TaxoTopics < TaxoTopicsBase
class TaxonomyTopic < TaxonomyTopicBase class TaxoTopic < TaxoTopicBase
DublinCoreModel.install_dublin_core(self) DublinCoreModel.install_dublin_core(self)
TaxonomyTopicsModel.install_taxo_topics(self) TaxoTopicsModel.install_taxo_topics(self)
def to_rss(rss, current) def to_rss(rss, current)
if current.respond_to?(:taxo_topics) if current.respond_to?(:taxo_topics)
topic = current.class::TaxonomyTopic.new(value) topic = current.class::TaxoTopic.new(value)
topic.taxo_link = value topic.taxo_link = value
taxo_topics.to_rss(rss, topic) if taxo_topics taxo_topics.to_rss(rss, topic) if taxo_topics
current.taxo_topics << topic current.taxo_topics << topic
@ -99,13 +99,13 @@ EOC
EOC EOC
end end
class TaxonomyTopicsBase class TaxoTopicsBase
include Base include Base
def_array_element("taxo_topics") def_array_element("taxo_topics")
def new_taxo_topic def new_taxo_topic
taxo_topic = self.class::TaxonomyTopic.new(self) taxo_topic = self.class::TaxoTopic.new(self)
@taxo_topics << taxo_topic @taxo_topics << taxo_topic
taxo_topic taxo_topic
end end
@ -116,10 +116,10 @@ EOC
end end
end end
class TaxonomyTopicBase class TaxoTopicBase
include Base include Base
include DublinCoreModel include DublinCoreModel
include TaxonomyTopicsModel include TaxoTopicsModel
attr_accessor :value attr_accessor :value
add_need_initialize_variable("value") add_need_initialize_variable("value")
@ -134,43 +134,43 @@ EOC
end end
class RSSBase class RSSBase
include TaxonomyTopicModel include TaxoTopicModel
end end
class ChannelBase class ChannelBase
include TaxonomyTopicsModel include TaxoTopicsModel
end end
class ItemsBase class ItemsBase
class ItemBase class ItemBase
include TaxonomyTopicsModel include TaxoTopicsModel
end end
end end
class RSS10 class RSS10
TaxonomyTopicModel.install_taxo_topic(self) TaxoTopicModel.install_taxo_topic(self)
class Channel class Channel
TaxonomyTopicsModel.install_taxo_topics(self) TaxoTopicsModel.install_taxo_topics(self)
end end
class Items class Items
class Item class Item
TaxonomyTopicsModel.install_taxo_topics(self) TaxoTopicsModel.install_taxo_topics(self)
end end
end end
end end
class RSS09 class RSS09
TaxonomyTopicModel.install_taxo_topic(self) TaxoTopicModel.install_taxo_topic(self)
class Channel class Channel
TaxonomyTopicsModel.install_taxo_topics(self) TaxoTopicsModel.install_taxo_topics(self)
end end
class Items class Items
class Item class Item
TaxonomyTopicsModel.install_taxo_topics(self) TaxoTopicsModel.install_taxo_topics(self)
end end
end end
end end

View file

@ -655,7 +655,6 @@ EOC
def setup_maker_elements(parent) def setup_maker_elements(parent)
self.class.have_children_elements.each do |name, plural_name| self.class.have_children_elements.each do |name, plural_name|
real_name = name.sub(/^[^_]+_/, '')
if parent.respond_to?(plural_name) if parent.respond_to?(plural_name)
target = parent.__send__(plural_name) target = parent.__send__(plural_name)
__send__(plural_name).each do |elem| __send__(plural_name).each do |elem|
@ -894,9 +893,7 @@ EOC
channel.setup_maker(maker) if channel channel.setup_maker(maker) if channel
image.setup_maker(maker) if image image.setup_maker(maker) if image
textinput.setup_maker(maker) if textinput textinput.setup_maker(maker) if textinput
items.each do |item| super(maker)
item.setup_maker(maker)
end
end end
end end

View file

@ -77,6 +77,10 @@ module RSS
tag_name_with_prefix(TAXO_PREFIX) tag_name_with_prefix(TAXO_PREFIX)
end end
def maker_target(target)
target.taxo_topics
end
def to_s(need_convert=true, indent=calc_indent) def to_s(need_convert=true, indent=calc_indent)
rv = tag(indent) do |next_indent| rv = tag(indent) do |next_indent|
[ [
@ -183,6 +187,10 @@ module RSS
end end
end end
def maker_target(target)
target.new_taxo_topic
end
private private
def children def children
[@taxo_link, @taxo_topics] [@taxo_link, @taxo_topics]

View file

@ -61,7 +61,7 @@ rss = RSS::Maker.make("1.0") do |maker|
feeds.each do |feed| feeds.each do |feed|
feed.items.each do |item| feed.items.each do |item|
item.setup_maker(maker) item.setup_maker(maker.items)
end end
end end
maker.items.do_sort = true maker.items.do_sort = true

View file

@ -435,6 +435,25 @@ module RSS
end end
end end
def assert_taxo_topic(topics, target)
_wrap_assertion do
topics.each_with_index do |topic, i|
taxo_topic = target.taxo_topics[i]
topic.each do |name, value|
case name
when :link
assert_equal(value, taxo_topic.about)
assert_equal(value, taxo_topic.taxo_link)
when :topics
assert_equal(value, taxo_topic.taxo_topics.resources)
else
assert_equal(value, taxo_topic.__send__("dc_#{name}"))
end
end
end
end
end
def assert_attributes(attrs, names, target) def assert_attributes(attrs, names, target)
_wrap_assertion do _wrap_assertion do

View file

@ -248,5 +248,24 @@ EOC
item.link = link item.link = link
end end
def setup_taxo_topic(target, topics)
topics.each do |topic|
taxo_topic = target.taxo_topics.new_taxo_topic
topic.each do |name, value|
case name
when :link
taxo_topic.taxo_link = value
when :topics
value.each do |t|
taxo_topic.taxo_topics << t
end
else
dc_elems = taxo_topic.__send__("dc_#{name}s")
dc_elem = dc_elems.__send__("new_#{name}")
dc_elem.value = value
end
end
end
end
end end
end end

View file

@ -138,7 +138,7 @@ module RSS
assert_equal(link, textInput.link) assert_equal(link, textInput.link)
end end
def test_setup_maker_items def test_setup_maker_items(for_backward_compatibility=false)
title = "TITLE" title = "TITLE"
link = "http://hoge.com/" link = "http://hoge.com/"
description = "text hoge fuga" description = "text hoge fuga"
@ -160,7 +160,11 @@ module RSS
rss.channel.setup_maker(maker) rss.channel.setup_maker(maker)
rss.items.each do |item| rss.items.each do |item|
if for_backward_compatibility
item.setup_maker(maker) item.setup_maker(maker)
else
item.setup_maker(maker.items)
end
end end
end end
@ -173,6 +177,10 @@ module RSS
end end
def test_setup_maker_items_backward_compatibility
test_setup_maker_items(true)
end
def test_setup_maker def test_setup_maker
encoding = "EUC-JP" encoding = "EUC-JP"
standalone = true standalone = true

View file

@ -47,6 +47,25 @@ module RSS
"http://foo.com/trackback/tb.cgi?tb_id=20021010", "http://foo.com/trackback/tb.cgi?tb_id=20021010",
], ],
} }
@taxo_topic_elems = [
{
:link => "http://meerkat.oreillynet.com/?c=cat23",
:title => "Data: XML",
:description => "A Meerkat channel",
},
{
:link => "http://dmoz.org/Computers/Data_Formats/Markup_Languages/XML/",
:title => "XML",
:subject => "XML",
:description => "DMOZ category",
:topics => [
"http://meerkat.oreillynet.com/?c=cat23",
"http://dmoz.org/Computers/Data_Formats/Markup_Languages/SGML/",
"http://dmoz.org/Computers/Programming/Internet/",
]
},
]
end end
def test_setup_maker_channel def test_setup_maker_channel
@ -164,7 +183,7 @@ module RSS
end end
end end
def test_setup_maker_items def test_setup_maker_items(for_backward_compatibility=false)
title = "TITLE" title = "TITLE"
link = "http://hoge.com/" link = "http://hoge.com/"
description = "text hoge fuga" description = "text hoge fuga"
@ -200,7 +219,11 @@ module RSS
rss.channel.setup_maker(maker) rss.channel.setup_maker(maker)
rss.items.each do |item| rss.items.each do |item|
if for_backward_compatibility
item.setup_maker(maker) item.setup_maker(maker)
else
item.setup_maker(maker.items)
end
end end
end end
@ -231,8 +254,8 @@ module RSS
title = "TITLE" title = "TITLE"
link = "http://hoge.com/" link = "http://hoge.com/"
description = "text hoge fuga" description = "text hoge fuga"
item_size = 5
item_size = 5
rss = RSS::Maker.make("1.0") do |maker| rss = RSS::Maker.make("1.0") do |maker|
setup_dummy_channel(maker) setup_dummy_channel(maker)
@ -243,7 +266,7 @@ module RSS
item.link = "#{link}#{i}" item.link = "#{link}#{i}"
item.description = "#{description}#{i}" item.description = "#{description}#{i}"
item.dc_date = Time.now + i * 60 item.dc_date = Time.now + i * 60
item.setup_maker(maker) item.setup_maker(maker.items)
end end
maker.items.do_sort = false maker.items.do_sort = false
end end
@ -265,7 +288,7 @@ module RSS
item.link = "#{link}#{i}" item.link = "#{link}#{i}"
item.description = "#{description}#{i}" item.description = "#{description}#{i}"
item.dc_date = Time.now + i * 60 item.dc_date = Time.now + i * 60
item.setup_maker(maker) item.setup_maker(maker.items)
end end
maker.items.do_sort = true maker.items.do_sort = true
end end
@ -278,6 +301,10 @@ module RSS
end end
end end
def test_setup_maker_items_backward_compatibility
test_setup_maker_items(true)
end
def test_setup_maker def test_setup_maker
encoding = "EUC-JP" encoding = "EUC-JP"
standalone = true standalone = true
@ -312,8 +339,8 @@ module RSS
assert_equal(encoding, new_rss.encoding) assert_equal(encoding, new_rss.encoding)
assert_equal(standalone, new_rss.standalone) assert_equal(standalone, new_rss.standalone)
xss = rss.xml_stylesheets.first xss = new_rss.xml_stylesheets.first
assert_equal(1, rss.xml_stylesheets.size) assert_equal(1, new_rss.xml_stylesheets.size)
assert_equal(href, xss.href) assert_equal(href, xss.href)
assert_equal(type, xss.type) assert_equal(type, xss.type)
assert_equal(title, xss.title) assert_equal(title, xss.title)
@ -322,5 +349,178 @@ module RSS
assert_equal(alternate, xss.alternate) assert_equal(alternate, xss.alternate)
end end
def test_setup_maker_full
encoding = "EUC-JP"
standalone = true
href = 'a.xsl'
type = 'text/xsl'
title = 'sample'
media = 'printer'
charset = 'UTF-8'
alternate = 'yes'
channel_about = "http://hoge.com"
channel_title = "fugafuga"
channel_link = "http://hoge.com"
channel_description = "fugafugafugafuga"
image_title = "fugafuga"
image_url = "http://hoge.com/hoge.png"
textinput_title = "fugafuga"
textinput_description = "text hoge fuga"
textinput_name = "hoge"
textinput_link = "http://hoge.com"
item_title = "TITLE"
item_link = "http://hoge.com/"
item_description = "text hoge fuga"
item_size = 5
rss = RSS::Maker.make("1.0") do |maker|
maker.encoding = encoding
maker.standalone = standalone
xss = maker.xml_stylesheets.new_xml_stylesheet
xss.href = href
xss.type = type
xss.title = title
xss.media = media
xss.charset = charset
xss.alternate = alternate
maker.channel.about = channel_about
maker.channel.title = channel_title
maker.channel.link = channel_link
maker.channel.description = channel_description
@dc_elems.each do |var, value|
maker.channel.__send__("dc_#{var}=", value)
end
@sy_elems.each do |var, value|
maker.channel.__send__("sy_#{var}=", value)
end
maker.image.title = image_title
maker.image.url = image_url
@dc_elems.each do |var, value|
maker.image.__send__("dc_#{var}=", value)
end
maker.textinput.link = textinput_link
maker.textinput.title = textinput_title
maker.textinput.description = textinput_description
maker.textinput.name = textinput_name
@dc_elems.each do |var, value|
maker.textinput.__send__("dc_#{var}=", value)
end
item_size.times do |i|
item = maker.items.new_item
item.title = "#{item_title}#{i}"
item.link = "#{item_link}#{i}"
item.description = "#{item_description}#{i}"
@dc_elems.each do |var, value|
item.__send__("dc_#{var}=", value)
end
@content_elems.each do |var, value|
item.__send__("content_#{var}=", value)
end
item.trackback_ping = @trackback_elems[:ping]
@trackback_elems[:about].each do |value|
new_about = item.trackback_abouts.new_about
new_about.value = value
end
end
setup_taxo_topic(maker, @taxo_topic_elems)
end
new_rss = RSS::Maker.make("1.0") do |maker|
rss.setup_maker(maker)
end
assert_equal("1.0", new_rss.rss_version)
assert_equal(encoding, new_rss.encoding)
assert_equal(standalone, new_rss.standalone)
xss = new_rss.xml_stylesheets.first
assert_equal(1, new_rss.xml_stylesheets.size)
assert_equal(href, xss.href)
assert_equal(type, xss.type)
assert_equal(title, xss.title)
assert_equal(media, xss.media)
assert_equal(charset, xss.charset)
assert_equal(alternate, xss.alternate)
channel = new_rss.channel
assert_equal(channel_about, channel.about)
assert_equal(channel_title, channel.title)
assert_equal(channel_link, channel.link)
assert_equal(channel_description, channel.description)
item_resources = []
item_size.times do |i|
item_resources << "#{item_link}#{i}"
end
assert_equal(item_resources, channel.items.resources)
assert_equal(image_url, channel.image.resource)
assert_equal(textinput_link, channel.textinput.resource)
@dc_elems.each do |var, value|
assert_equal(value, channel.__send__("dc_#{var}"))
end
@sy_elems.each do |var, value|
assert_equal(value, channel.__send__("sy_#{var}"))
end
image = new_rss.image
assert_equal(image_url, image.about)
assert_equal(image_url, new_rss.channel.image.resource)
assert_equal(image_title, image.title)
assert_equal(channel_link, image.link)
assert_equal(image_url, image.url)
@dc_elems.each do |var, value|
assert_equal(image.__send__("dc_#{var}"), value)
end
textinput = new_rss.textinput
assert_equal(textinput_link, textinput.about)
assert_equal(textinput_link, new_rss.channel.textinput.resource)
assert_equal(textinput_title, textinput.title)
assert_equal(textinput_name, textinput.name)
assert_equal(textinput_description, textinput.description)
assert_equal(textinput_link, textinput.link)
@dc_elems.each do |var, value|
assert_equal(textinput.__send__("dc_#{var}"), value)
end
assert_equal(item_size, new_rss.items.size)
new_rss.items.each_with_index do |item, i|
assert_equal("#{item_link}#{i}", item.about)
assert_equal("#{item_title}#{i}", item.title)
assert_equal("#{item_link}#{i}", item.link)
assert_equal("#{item_description}#{i}", item.description)
@dc_elems.each do |var, value|
assert_equal(item.__send__("dc_#{var}"), value)
end
@content_elems.each do |var, value|
assert_equal(item.__send__("content_#{var}"), value)
end
assert_equal(@trackback_elems[:ping], item.trackback_ping)
assert_equal(@trackback_elems[:about].size, item.trackback_abouts.size)
item.trackback_abouts.each_with_index do |about, i|
assert_equal(@trackback_elems[:about][i], about.value)
end
end
assert_taxo_topic(@taxo_topic_elems, new_rss)
end
end end
end end

View file

@ -162,7 +162,7 @@ module RSS
assert_equal(link, textInput.link) assert_equal(link, textInput.link)
end end
def test_setup_maker_items def test_setup_maker_items(for_backward_compatibility=false)
title = "TITLE" title = "TITLE"
link = "http://hoge.com/" link = "http://hoge.com/"
description = "text hoge fuga" description = "text hoge fuga"
@ -217,7 +217,11 @@ module RSS
rss.channel.setup_maker(maker) rss.channel.setup_maker(maker)
rss.items.each do |item| rss.items.each do |item|
if for_backward_compatibility
item.setup_maker(maker) item.setup_maker(maker)
else
item.setup_maker(maker.items)
end
end end
end end
@ -247,6 +251,10 @@ module RSS
end end
def test_setup_maker_items_backward_compatibility
test_setup_maker_items(true)
end
def test_setup_maker def test_setup_maker
encoding = "EUC-JP" encoding = "EUC-JP"
standalone = true standalone = true