diff options
author | (no author) <(no author)@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-11-01 08:21:06 +0000 |
---|---|---|
committer | (no author) <(no author)@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-11-01 08:21:06 +0000 |
commit | 36c57775077664c2d0d1475394b1d7c7a5c27d09 (patch) | |
tree | 0472ce06f5cece724af98bb7cea1890c72deab10 /lib | |
parent | aa7693edc3ed5f96a4f281f104d7bb33444c4cd3 (diff) | |
download | ruby-36c57775077664c2d0d1475394b1d7c7a5c27d09.tar.gz ruby-36c57775077664c2d0d1475394b1d7c7a5c27d09.tar.xz ruby-36c57775077664c2d0d1475394b1d7c7a5c27d09.zip |
This commit was manufactured by cvs2svn to create branch 'ruby_1_8'.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8@7168 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
-rw-r--r-- | lib/rss/maker.rb | 33 | ||||
-rw-r--r-- | lib/rss/maker/1.0.rb | 184 |
2 files changed, 217 insertions, 0 deletions
diff --git a/lib/rss/maker.rb b/lib/rss/maker.rb new file mode 100644 index 000000000..c158c726c --- /dev/null +++ b/lib/rss/maker.rb @@ -0,0 +1,33 @@ +require "rss/rss" + +module RSS + + module Maker + + MAKERS = {} + + class << self + def make(version, modules=[], &block) + prefix = "rss/maker" + require "#{prefix}/#{version}" + modules.each do |mod| + require "#{prefix}/#{mod}" + end + maker(version).make(&block) + end + + def maker(version) + MAKERS[version] + end + + def add_maker(version, maker) + MAKERS[version] = maker + end + + def filename_to_version(filename) + File.basename(filename, ".*") + end + end + end + +end diff --git a/lib/rss/maker/1.0.rb b/lib/rss/maker/1.0.rb new file mode 100644 index 000000000..894bcc0a2 --- /dev/null +++ b/lib/rss/maker/1.0.rb @@ -0,0 +1,184 @@ +require "rss/1.0" + +require "rss/maker/base" + +module RSS + module Maker + + class RSS10 < RSSBase + + def initialize + super("1.0") + end + + def to_rss + rss = RDF.new(@version, @encoding, @standalone) + setup_xml_stylesheets(rss) + setup_channel(rss) + setup_image(rss) + setup_items(rss) + setup_textinput(rss) + setup_other_elements(rss) + if rss.channel + rss + else + nil + end + end + + private + def setup_channel(rss) + @channel.to_rss(rss) + end + + def setup_image(rss) + @image.to_rss(rss) + end + + def setup_items(rss) + @items.to_rss(rss) + end + + def setup_textinput(rss) + @textinput.to_rss(rss) + end + + class Channel < ChannelBase + + def to_rss(rss) + if @about + channel = RDF::Channel.new(@about) + set = setup_values(channel) + if set + rss.channel = channel + setup_items(rss) + setup_image(rss) + setup_textinput(rss) + setup_other_elements(rss) + end + end + end + + def have_required_values? + @about and @title and @link and @description + end + + private + def setup_items(rss) + items = RDF::Channel::Items.new + seq = items.Seq + @maker.items.normalize.each do |item| + seq.lis << RDF::Channel::Items::Seq::Li.new(item.link) + end + rss.channel.items = items + end + + def setup_image(rss) + if @maker.image.have_required_values? + rss.channel.image = RDF::Channel::Image.new(@maker.image.url) + end + end + + def setup_textinput(rss) + if @maker.textinput.have_required_values? + textinput = RDF::Channel::Textinput.new(@maker.textinput.link) + rss.channel.textinput = textinput + end + end + + class Cloud < CloudBase + end + end + + class Image < ImageBase + def to_rss(rss) + if @url + image = RDF::Image.new(@url) + set = setup_values(image) + if set + rss.image = image + setup_other_elements(rss) + end + end + end + + def have_required_values? + @url and @title and link and @maker.channel.have_required_values? + end + + private + def variables + super + ["link"] + end + end + + class Items < ItemsBase + def to_rss(rss) + if rss.channel + normalize.each do |item| + item.to_rss(rss) + end + setup_other_elements(rss) + end + end + + class Item < ItemBase + def to_rss(rss) + if @link + item = RDF::Item.new(@link) + set = setup_values(item) + if set + rss.items << item + setup_other_elements(rss) + end + end + end + + def have_required_values? + @title and @link + end + + class Guid < GuidBase + def to_rss(*args) + end + end + + class Enclosure < EnclosureBase + def to_rss(*args) + end + end + + class Source < SourceBase + def to_rss(*args) + end + end + + class Category < CategoryBase + def to_rss(*args) + end + end + end + end + + class Textinput < TextinputBase + def to_rss(rss) + if @link + textinput = RDF::Textinput.new(@link) + set = setup_values(textinput) + if set + rss.textinput = textinput + setup_other_elements(rss) + end + end + end + + def have_required_values? + @title and @description and @name and @link and + @maker.channel.have_required_values? + end + end + end + + add_maker(filename_to_version(__FILE__), RSS10) + end +end |