summaryrefslogtreecommitdiff
path: root/lib/rss/0.9.rb
diff options
context:
space:
mode:
author(no author) <(no author)@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-04-06 08:02:56 +0000
committer(no author) <(no author)@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-04-06 08:02:56 +0000
commit5923a2c0e770515a9c7144c50e09a32350695b00 (patch)
tree66882c2ac60d7d1b25bb49ee476cb829695aa906 /lib/rss/0.9.rb
parent8e773df6d3b68caf2e56e6c75a8e48bf2ccc1bd3 (diff)
This commit was manufactured by cvs2svn to create branch 'ruby_1_8'.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@6109 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rss/0.9.rb')
-rw-r--r--lib/rss/0.9.rb409
1 files changed, 409 insertions, 0 deletions
diff --git a/lib/rss/0.9.rb b/lib/rss/0.9.rb
new file mode 100644
index 0000000000..bb3cc23beb
--- /dev/null
+++ b/lib/rss/0.9.rb
@@ -0,0 +1,409 @@
+require "rss/parser"
+
+module RSS
+
+ module RSS09
+ NSPOOL = {}
+ ELEMENTS = []
+ end
+
+ class Rss < Element
+
+ include RSS09
+ include RootElementMixin
+ include XMLStyleSheetMixin
+
+ [
+ ["channel", nil],
+ ].each do |tag, occurs|
+ install_model(tag, occurs)
+ end
+
+ %w(channel).each do |x|
+ install_have_child_element(x)
+ end
+
+ attr_accessor :rss_version, :version, :encoding, :standalone
+
+ def initialize(rss_version, version=nil, encoding=nil, standalone=nil)
+ super
+ end
+
+ def items
+ if @channel
+ @channel.items
+ else
+ []
+ end
+ end
+
+ def image
+ if @channel
+ @channel.image
+ else
+ nil
+ end
+ end
+
+ def to_s(convert=true)
+ rv = <<-EOR
+#{xmldecl}
+#{xml_stylesheet_pi}<rss version="#{@rss_version}"#{ns_declaration}>
+#{channel_element(false)}
+#{other_element(false, "\t")}
+</rss>
+EOR
+ rv = @converter.convert(rv) if convert and @converter
+ rv
+ end
+
+ private
+ def children
+ [@channel]
+ end
+
+ class Channel < Element
+
+ include RSS09
+
+ [
+ ["title", nil],
+ ["link", nil],
+ ["description", nil],
+ ["language", nil],
+ ["copyright", "?"],
+ ["managingEditor", "?"],
+ ["webMaster", "?"],
+ ["rating", "?"],
+ ["docs", "?"],
+ ["skipDays", "?"],
+ ["skipHours", "?"],
+ ].each do |x, occurs|
+ install_text_element(x)
+ install_model(x, occurs)
+ end
+
+ [
+ ["pubDate", "?"],
+ ["lastBuildDate", "?"],
+ ].each do |x, occurs|
+ install_date_element(x, 'rfc822')
+ install_model(x, occurs)
+ end
+
+ [
+ ["image", nil],
+ ["textInput", "?"],
+ ["cloud", "?"]
+ ].each do |x, occurs|
+ install_have_child_element(x)
+ install_model(x, occurs)
+ end
+
+ [
+ ["item", "*"]
+ ].each do |x, occurs|
+ install_have_children_element(x)
+ install_model(x, occurs)
+ end
+
+ def initialize()
+ super()
+ end
+
+ def to_s(convert=true)
+ rv = <<-EOT
+ <channel>
+ #{title_element(false)}
+ #{link_element(false)}
+ #{description_element(false)}
+ #{language_element(false)}
+ #{copyright_element(false)}
+ #{managingEditor_element(false)}
+ #{webMaster_element(false)}
+ #{rating_element(false)}
+ #{pubDate_element(false)}
+ #{lastBuildDate_element(false)}
+ #{docs_element(false)}
+ #{skipDays_element(false)}
+ #{skipHours_element(false)}
+ #{image_element(false)}
+#{item_elements(false)}
+ #{textInput_element(false)}
+#{other_element(false, "\t\t")}
+ </channel>
+EOT
+ rv = @converter.convert(rv) if convert and @converter
+ rv
+ end
+
+ private
+ def children
+ [@image, @textInput, @cloud, *@item]
+ end
+
+ class Image < Element
+
+ include RSS09
+
+ %w(url title link width height description).each do |x|
+ install_text_element(x)
+ end
+
+ def to_s(convert=true)
+ rv = <<-EOT
+ <image>
+ #{url_element(false)}
+ #{title_element(false)}
+ #{link_element(false)}
+ #{width_element(false)}
+ #{height_element(false)}
+ #{description_element(false)}
+#{other_element(false, "\t\t\t\t")}
+ </image>
+EOT
+ rv = @converter.convert(rv) if convert and @converter
+ rv
+ end
+
+ end
+
+ class Cloud < Element
+
+ include RSS09
+
+ [
+ ["domain", nil, false],
+ ["port", nil, false],
+ ["path", nil, false],
+ ["registerProcedure", nil, false],
+ ["protocol", nil ,false],
+ ].each do |name, uri, required|
+ install_get_attribute(name, uri, required)
+ end
+
+ def to_s(convert=true)
+ rv = <<-EOT
+ <cloud
+ domain="#{h @domain}"
+ port="#{h @port}"
+ path="#{h @path}"
+ registerProcedure="#{h @registerProcedure}"
+ protocol="#{h @protocol}"/>
+EOT
+ rv = @converter.convert(rv) if convert and @converter
+ rv
+ end
+
+ end
+
+ class Item < Element
+
+ include RSS09
+
+ %w(title link description author comments).each do |x|
+ install_text_element(x)
+ end
+
+ %w(category source enclosure).each do |x|
+ install_have_child_element(x)
+ end
+
+ [
+ ["title", '?'],
+ ["link", '?'],
+ ["description", '?'],
+ ["author", '?'],
+ ["comments", '?'],
+ ["category", '?'],
+ ["source", '?'],
+ ["enclosure", '?'],
+ ].each do |tag, occurs|
+ install_model(tag, occurs)
+ end
+
+ def to_s(convert=true)
+ rv = <<-EOT
+ <item>
+ #{title_element(false)}
+ #{link_element(false)}
+ #{description_element(false)}
+ #{author_element(false)}
+ #{category_element(false)}
+ #{comments_element(false)}
+ #{enclosure_element(false)}
+ #{source_element(false)}
+#{other_element(false, "\t\t\t\t")}
+ </item>
+EOT
+ rv = @converter.convert(rv) if convert and @converter
+ rv
+ end
+
+ class Source < Element
+
+ include RSS09
+
+ [
+ ["url", nil, true]
+ ].each do |name, uri, required|
+ install_get_attribute(name, uri, required)
+ end
+
+ content_setup
+
+ def initialize(url=nil, content=nil)
+ super()
+ @url = url
+ @content = content
+ end
+
+ def to_s(convert=true)
+ if @url
+ rv = %Q! <source url="#{@url}">!
+ rv << %Q!#{@content}</source>!
+ rv = @converter.convert(rv) if convert and @converter
+ rv
+ else
+ ''
+ end
+ end
+
+ private
+ def _attrs
+ [
+ ["url", true]
+ ]
+ end
+
+ end
+
+ class Enclosure < Element
+
+ include RSS09
+
+ [
+ ["url", nil, true],
+ ["length", nil, true],
+ ["type", nil, true],
+ ].each do |name, uri, required|
+ install_get_attribute(name, uri, required)
+ end
+
+ def initialize(url=nil, length=nil, type=nil)
+ super()
+ @url = url
+ @length = length
+ @type = type
+ end
+
+ def to_s(convert=true)
+ if @url and @length and @type
+ rv = %Q!<enclosure url="#{h @url}" !
+ rv << %Q!length="#{h @length}" type="#{h @type}"/>!
+ rv = @converter.convert(rv) if convert and @converter
+ rv
+ else
+ ''
+ end
+ end
+
+ private
+ def _attrs
+ [
+ ["url", true],
+ ["length", true],
+ ["type", true],
+ ]
+ end
+
+ end
+
+ class Category < Element
+
+ include RSS09
+
+ [
+ ["domain", nil, true]
+ ].each do |name, uri, required|
+ install_get_attribute(name, uri, required)
+ end
+
+ content_setup
+
+ def initialize(domain=nil, content=nil)
+ super()
+ @domain = domain
+ @content = content
+ end
+
+ def to_s(convert=true)
+ if @domain
+ rv = %Q!<category domain="#{h @domain}">!
+ rv << %Q!#{h @content}</category>!
+ rv = @converter.convert(rv) if convert and @converter
+ rv
+ else
+ ''
+ end
+ end
+
+ private
+ def _attrs
+ [
+ ["domain", true]
+ ]
+ end
+
+ end
+
+ end
+
+ class TextInput < Element
+
+ include RSS09
+
+ %w(title description name link).each do |x|
+ install_text_element(x)
+ end
+
+ def to_s(convert=true)
+ rv = <<-EOT
+ <textInput>
+ #{title_element(false)}
+ #{description_element(false)}
+ #{name_element(false)}
+ #{link_element(false)}
+#{other_element(false, "\t\t\t\t")}
+ </textInput>
+EOT
+ rv = @converter.convert(rv) if convert and @converter
+ rv
+ end
+
+ end
+
+ end
+
+ end
+
+ RSS09::ELEMENTS.each do |x|
+ BaseListener.install_get_text_element(x, nil, "#{x}=")
+ end
+
+ module ListenerMixin
+ private
+ def start_rss(tag_name, prefix, attrs, ns)
+ check_ns(tag_name, prefix, ns, nil)
+
+ @rss = Rss.new(attrs['version'], @version, @encoding, @standalone)
+ @rss.xml_stylesheets = @xml_stylesheets
+ @last_element = @rss
+ @proc_stack.push Proc.new { |text, tags|
+ @rss.validate_for_stream(tags) if @do_validate
+ }
+ end
+
+ end
+
+end