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:

- supported Atom.
  - bumped version 0.1.6 to 0.1.7.
* sample/rss/convert.rb: added new sample.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12087 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
kou 2007-03-17 10:13:25 +00:00
parent 53cbab0484
commit 966a25465a
71 changed files with 10254 additions and 3045 deletions

View file

@ -9,7 +9,7 @@ module RSS
def self.append_features(klass)
super
klass.install_must_call_validator('', nil)
klass.install_must_call_validator('', "")
end
end
@ -17,22 +17,18 @@ module RSS
include RSS09
include RootElementMixin
# include XMLStyleSheetMixin
[
["channel", nil],
].each do |tag, occurs|
install_model(tag, occurs)
end
%w(channel).each do |name|
install_have_child_element(name)
install_have_child_element(name, "", nil)
end
attr_accessor :rss_version, :version, :encoding, :standalone
def initialize(rss_version, version=nil, encoding=nil, standalone=nil)
attr_writer :feed_version
alias_method(:rss_version, :feed_version)
alias_method(:rss_version=, :feed_version=)
def initialize(feed_version, version=nil, encoding=nil, standalone=nil)
super
@feed_type = "rss"
end
def items
@ -58,34 +54,20 @@ module RSS
nil
end
end
def to_s(need_convert=true, indent=calc_indent)
rv = tag(indent, ns_declarations) do |next_indent|
[
channel_element(false, next_indent),
other_element(false, next_indent),
]
def setup_maker_elements(maker)
super
items.each do |item|
item.setup_maker(maker.items)
end
rv = convert(rv) if need_convert
rv
image.setup_maker(maker) if image
textinput.setup_maker(maker) if textinput
end
private
def children
[@channel]
end
def _tags
[
[nil, 'channel'],
].delete_if do |uri, name|
__send__(name).nil?
end
end
def _attrs
[
["version", true, "rss_version"],
["version", true, "feed_version"],
]
end
@ -94,119 +76,30 @@ module RSS
include RSS09
[
["title", nil],
["link", nil],
["description", nil],
["language", nil],
["copyright", "?"],
["managingEditor", "?"],
["webMaster", "?"],
["rating", "?"],
["docs", "?"],
].each do |name, occurs|
install_text_element(name)
install_model(name, occurs)
end
[
["pubDate", "?"],
["lastBuildDate", "?"],
].each do |name, occurs|
install_date_element(name, 'rfc822')
install_model(name, occurs)
["title", nil, :text],
["link", nil, :text],
["description", nil, :text],
["language", nil, :text],
["copyright", "?", :text],
["managingEditor", "?", :text],
["webMaster", "?", :text],
["rating", "?", :text],
["pubDate", "?", :date, :rfc822],
["lastBuildDate", "?", :date, :rfc822],
["docs", "?", :text],
["cloud", "?", :have_attribute],
["skipDays", "?", :have_child],
["skipHours", "?", :have_child],
["image", nil, :have_child],
["item", "*", :have_children],
["textInput", "?", :have_child],
].each do |name, occurs, type, *args|
__send__("install_#{type}_element", name, "", occurs, name, *args)
end
alias date pubDate
alias date= pubDate=
[
["skipDays", "?"],
["skipHours", "?"],
["image", nil],
["textInput", "?"],
].each do |name, occurs|
install_have_child_element(name)
install_model(name, occurs)
end
[
["cloud", "?"]
].each do |name, occurs|
install_have_attribute_element(name)
install_model(name, occurs)
end
[
["item", "*"]
].each do |name, occurs|
install_have_children_element(name)
install_model(name, occurs)
end
def initialize()
super()
end
def to_s(need_convert=true, indent=calc_indent)
rv = tag(indent) do |next_indent|
[
title_element(false, next_indent),
link_element(false, next_indent),
description_element(false, next_indent),
language_element(false, next_indent),
copyright_element(false, next_indent),
managingEditor_element(false, next_indent),
webMaster_element(false, next_indent),
rating_element(false, next_indent),
pubDate_element(false, next_indent),
lastBuildDate_element(false, next_indent),
docs_element(false, next_indent),
cloud_element(false, next_indent),
skipDays_element(false, next_indent),
skipHours_element(false, next_indent),
image_element(false, next_indent),
item_elements(false, next_indent),
textInput_element(false, next_indent),
other_element(false, next_indent),
]
end
rv = convert(rv) if need_convert
rv
end
private
def children
[@skipDays, @skipHours, @image, @textInput, @cloud, *@item]
end
def _tags
rv = [
"title",
"link",
"description",
"language",
"copyright",
"managingEditor",
"webMaster",
"rating",
"docs",
"skipDays",
"skipHours",
"image",
"textInput",
"cloud",
].delete_if do |name|
__send__(name).nil?
end.collect do |elem|
[nil, elem]
end
@item.each do
rv << [nil, "item"]
end
rv
end
def maker_target(maker)
maker.channel
end
@ -237,29 +130,7 @@ module RSS
[
["day", "*"]
].each do |name, occurs|
install_have_children_element(name)
install_model(name, occurs)
end
def to_s(need_convert=true, indent=calc_indent)
rv = tag(indent) do |next_indent|
[
day_elements(false, next_indent)
]
end
rv = convert(rv) if need_convert
rv
end
private
def children
@day
end
def _tags
@day.compact.collect do
[nil, "day"]
end
install_have_children_element(name, "", occurs)
end
class Day < Element
@ -267,9 +138,13 @@ module RSS
content_setup
def initialize(content=nil)
super()
self.content = content
def initialize(*args)
if Utils.element_initialize_arguments?(args)
super
else
super()
self.content = args[0]
end
end
end
@ -282,29 +157,7 @@ module RSS
[
["hour", "*"]
].each do |name, occurs|
install_have_children_element(name)
install_model(name, occurs)
end
def to_s(need_convert=true, indent=calc_indent)
rv = tag(indent) do |next_indent|
[
hour_elements(false, next_indent)
]
end
rv = convert(rv) if need_convert
rv
end
private
def children
@hour
end
def _tags
@hour.compact.collect do
[nil, "hour"]
end
install_have_children_element(name, "", occurs)
end
class Hour < Element
@ -312,9 +165,13 @@ module RSS
content_setup(:integer)
def initialize(content=nil)
super()
self.content = content
def initialize(*args)
if Utils.element_initialize_arguments?(args)
super
else
super()
self.content = args[0]
end
end
end
@ -325,54 +182,31 @@ module RSS
include RSS09
%w(url title link).each do |name|
install_text_element(name)
install_model(name, nil)
install_text_element(name, "", nil)
end
[
["width", :integer],
["height", :integer],
["description"],
].each do |name, type|
install_text_element(name, type)
install_model(name, "?")
install_text_element(name, "", "?", name, type)
end
def initialize(url=nil, title=nil, link=nil, width=nil, height=nil,
description=nil)
super()
self.url = url
self.title = title
self.link = link
self.width = width
self.height = height
self.description = description
end
def to_s(need_convert=true, indent=calc_indent)
rv = tag(indent) do |next_indent|
[
url_element(false, next_indent),
title_element(false, next_indent),
link_element(false, next_indent),
width_element(false, next_indent),
height_element(false, next_indent),
description_element(false, next_indent),
other_element(false, next_indent),
]
def initialize(*args)
if Utils.element_initialize_arguments?(args)
super
else
super()
self.url = args[0]
self.title = args[1]
self.link = args[2]
self.width = args[3]
self.height = args[4]
self.description = args[5]
end
rv = convert(rv) if need_convert
rv
end
private
def _tags
%w(url title link width height description).delete_if do |name|
__send__(name).nil?
end.collect do |elem|
[nil, elem]
end
end
def maker_target(maker)
maker.image
end
@ -381,106 +215,47 @@ module RSS
class Cloud < Element
include RSS09
[
["domain", nil, true],
["port", nil, true, :integer],
["path", nil, true],
["registerProcedure", nil, true],
["protocol", nil, true],
["domain", "", true],
["port", "", true, :integer],
["path", "", true],
["registerProcedure", "", true],
["protocol", "", true],
].each do |name, uri, required, type|
install_get_attribute(name, uri, required, type)
end
def initialize(domain=nil, port=nil, path=nil, rp=nil, protocol=nil)
super()
self.domain = domain
self.port = port
self.path = path
self.registerProcedure = rp
self.protocol = protocol
end
def to_s(need_convert=true, indent=calc_indent)
rv = tag(indent)
rv = convert(rv) if need_convert
rv
end
private
def _attrs
%w(domain port path registerProcedure protocol).collect do |attr|
[attr, true]
def initialize(*args)
if Utils.element_initialize_arguments?(args)
super
else
super()
self.domain = args[0]
self.port = args[1]
self.path = args[2]
self.registerProcedure = args[3]
self.protocol = args[4]
end
end
end
class Item < Element
include RSS09
%w(title link description).each do |name|
install_text_element(name)
end
%w(source enclosure).each do |name|
install_have_child_element(name)
end
[
%w(category categories),
].each do |name, plural_name|
install_have_children_element(name, plural_name)
end
[
["title", '?'],
["link", '?'],
["description", '?'],
["category", '*'],
["source", '?'],
["enclosure", '?'],
].each do |tag, occurs|
install_model(tag, occurs)
end
def to_s(need_convert=true, indent=calc_indent)
rv = tag(indent) do |next_indent|
[
title_element(false, next_indent),
link_element(false, next_indent),
description_element(false, next_indent),
category_elements(false, next_indent),
source_element(false, next_indent),
enclosure_element(false, next_indent),
other_element(false, next_indent),
]
end
rv = convert(rv) if need_convert
rv
["title", '?', :text],
["link", '?', :text],
["description", '?', :text],
["category", '*', :have_children, "categories"],
["source", '?', :have_child],
["enclosure", '?', :have_child],
].each do |tag, occurs, type, *args|
__send__("install_#{type}_element", tag, "", occurs, tag, *args)
end
private
def children
[@source, @enclosure, *@category].compact
end
def _tags
rv = %w(title link description author comments
source enclosure).delete_if do |name|
__send__(name).nil?
end.collect do |name|
[nil, name]
end
@category.each do
rv << [nil, "category"]
end
rv
end
def maker_target(items)
if items.respond_to?("items")
# For backward compatibility
@ -500,31 +275,24 @@ module RSS
include RSS09
[
["url", nil, true]
["url", "", true]
].each do |name, uri, required|
install_get_attribute(name, uri, required)
end
content_setup
def initialize(url=nil, content=nil)
super()
self.url = url
self.content = content
def initialize(*args)
if Utils.element_initialize_arguments?(args)
super
else
super()
self.url = args[0]
self.content = args[1]
end
end
private
def _tags
[]
end
def _attrs
[
["url", true]
]
end
def maker_target(item)
item.source
end
@ -540,35 +308,25 @@ module RSS
include RSS09
[
["url", nil, true],
["length", nil, true, :integer],
["type", nil, true],
["url", "", true],
["length", "", true, :integer],
["type", "", true],
].each do |name, uri, required, type|
install_get_attribute(name, uri, required, type)
end
def initialize(url=nil, length=nil, type=nil)
super()
self.url = url
self.length = length
self.type = type
end
def to_s(need_convert=true, indent=calc_indent)
rv = tag(indent)
rv = convert(rv) if need_convert
rv
def initialize(*args)
if Utils.element_initialize_arguments?(args)
super
else
super()
self.url = args[0]
self.length = args[1]
self.type = args[2]
end
end
private
def _attrs
[
["url", true],
["length", true],
["type", true],
]
end
def maker_target(item)
item.enclosure
end
@ -585,26 +343,24 @@ module RSS
include RSS09
[
["domain", nil, false]
["domain", "", false]
].each do |name, uri, required|
install_get_attribute(name, uri, required)
end
content_setup
def initialize(domain=nil, content=nil)
super()
self.domain = domain
self.content = content
def initialize(*args)
if Utils.element_initialize_arguments?(args)
super
else
super()
self.domain = args[0]
self.content = args[1]
end
end
private
def _attrs
[
["domain", false]
]
end
def maker_target(item)
item.new_category
end
@ -623,41 +379,22 @@ module RSS
include RSS09
%w(title description name link).each do |name|
install_text_element(name)
install_model(name, nil)
install_text_element(name, "", nil)
end
def initialize(title=nil, description=nil, name=nil, link=nil)
super()
self.title = title
self.description = description
self.name = name
self.link = link
end
def to_s(need_convert=true, indent=calc_indent)
rv = tag(indent) do |next_indent|
[
title_element(false, next_indent),
description_element(false, next_indent),
name_element(false, next_indent),
link_element(false, next_indent),
other_element(false, next_indent),
]
def initialize(*args)
if Utils.element_initialize_arguments?(args)
super
else
super()
self.title = args[0]
self.description = args[1]
self.name = args[2]
self.link = args[3]
end
rv = convert(rv) if need_convert
rv
end
private
def _tags
%w(title description name link).each do |name|
__send__(name).nil?
end.collect do |elem|
[nil, elem]
end
end
def maker_target(maker)
maker.textinput
end
@ -668,21 +405,22 @@ module RSS
end
RSS09::ELEMENTS.each do |name|
BaseListener.install_get_text_element(nil, name, "#{name}=")
BaseListener.install_get_text_element("", name, name)
end
module ListenerMixin
private
def start_rss(tag_name, prefix, attrs, ns)
check_ns(tag_name, prefix, ns, nil)
def initial_start_rss(tag_name, prefix, attrs, ns)
check_ns(tag_name, prefix, ns, "")
@rss = Rss.new(attrs['version'], @version, @encoding, @standalone)
@rss.do_validate = @do_validate
@rss.xml_stylesheets = @xml_stylesheets
@last_element = @rss
@proc_stack.push Proc.new { |text, tags|
@rss.validate_for_stream(tags) if @do_validate
}
pr = Proc.new do |text, tags|
@rss.validate_for_stream(tags, @ignore_unknown_element) if @do_validate
end
@proc_stack.push(pr)
end
end