summaryrefslogtreecommitdiff
path: root/ruby_1_8_5/lib/rss/maker
diff options
context:
space:
mode:
Diffstat (limited to 'ruby_1_8_5/lib/rss/maker')
-rw-r--r--ruby_1_8_5/lib/rss/maker/0.9.rb224
-rw-r--r--ruby_1_8_5/lib/rss/maker/1.0.rb204
-rw-r--r--ruby_1_8_5/lib/rss/maker/2.0.rb168
-rw-r--r--ruby_1_8_5/lib/rss/maker/base.rb546
-rw-r--r--ruby_1_8_5/lib/rss/maker/content.rb29
-rw-r--r--ruby_1_8_5/lib/rss/maker/dublincore.rb169
-rw-r--r--ruby_1_8_5/lib/rss/maker/image.rb145
-rw-r--r--ruby_1_8_5/lib/rss/maker/syndication.rb27
-rw-r--r--ruby_1_8_5/lib/rss/maker/taxonomy.rb182
-rw-r--r--ruby_1_8_5/lib/rss/maker/trackback.rb130
10 files changed, 1824 insertions, 0 deletions
diff --git a/ruby_1_8_5/lib/rss/maker/0.9.rb b/ruby_1_8_5/lib/rss/maker/0.9.rb
new file mode 100644
index 0000000000..b82585fb96
--- /dev/null
+++ b/ruby_1_8_5/lib/rss/maker/0.9.rb
@@ -0,0 +1,224 @@
+require "rss/0.9"
+
+require "rss/maker/base"
+
+module RSS
+ module Maker
+
+ class RSS09 < RSSBase
+
+ def initialize(rss_version="0.91")
+ super
+ end
+
+ private
+ def make_rss
+ Rss.new(@rss_version, @version, @encoding, @standalone)
+ end
+
+ def setup_elements(rss)
+ setup_channel(rss)
+ end
+
+ class Channel < ChannelBase
+
+ def to_rss(rss)
+ channel = Rss::Channel.new
+ set = setup_values(channel)
+ if set
+ rss.channel = channel
+ setup_items(rss)
+ setup_image(rss)
+ setup_textinput(rss)
+ setup_other_elements(rss)
+ if rss.channel.image
+ rss
+ else
+ nil
+ end
+ elsif variable_is_set?
+ raise NotSetError.new("maker.channel", not_set_required_variables)
+ end
+ end
+
+ def have_required_values?
+ @title and @link and @description and @language
+ end
+
+ private
+ def setup_items(rss)
+ @maker.items.to_rss(rss)
+ end
+
+ def setup_image(rss)
+ @maker.image.to_rss(rss)
+ end
+
+ def setup_textinput(rss)
+ @maker.textinput.to_rss(rss)
+ end
+
+ def variables
+ super + ["pubDate"]
+ end
+
+ def required_variable_names
+ %w(title link description language)
+ end
+
+ class SkipDays < SkipDaysBase
+ def to_rss(rss, channel)
+ unless @days.empty?
+ skipDays = Rss::Channel::SkipDays.new
+ channel.skipDays = skipDays
+ @days.each do |day|
+ day.to_rss(rss, skipDays.days)
+ end
+ end
+ end
+
+ class Day < DayBase
+ def to_rss(rss, days)
+ day = Rss::Channel::SkipDays::Day.new
+ set = setup_values(day)
+ if set
+ days << day
+ setup_other_elements(rss)
+ end
+ end
+
+ def have_required_values?
+ @content
+ end
+ end
+ end
+
+ class SkipHours < SkipHoursBase
+ def to_rss(rss, channel)
+ unless @hours.empty?
+ skipHours = Rss::Channel::SkipHours.new
+ channel.skipHours = skipHours
+ @hours.each do |hour|
+ hour.to_rss(rss, skipHours.hours)
+ end
+ end
+ end
+
+ class Hour < HourBase
+ def to_rss(rss, hours)
+ hour = Rss::Channel::SkipHours::Hour.new
+ set = setup_values(hour)
+ if set
+ hours << hour
+ setup_other_elements(rss)
+ end
+ end
+
+ def have_required_values?
+ @content
+ end
+ end
+ end
+
+ class Cloud < CloudBase
+ def to_rss(*args)
+ end
+ end
+
+ class Categories < CategoriesBase
+ def to_rss(*args)
+ end
+
+ class Category < CategoryBase
+ end
+ end
+ end
+
+ class Image < ImageBase
+ def to_rss(rss)
+ image = Rss::Channel::Image.new
+ set = setup_values(image)
+ if set
+ image.link = link
+ rss.channel.image = image
+ setup_other_elements(rss)
+ end
+ end
+
+ def have_required_values?
+ @url and @title and 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)
+ item = Rss::Channel::Item.new
+ set = setup_values(item)
+ if set
+ rss.items << item
+ setup_other_elements(rss)
+ end
+ end
+
+ private
+ 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 Categories < CategoriesBase
+ def to_rss(*args)
+ end
+
+ class Category < CategoryBase
+ end
+ end
+
+ end
+ end
+
+ class Textinput < TextinputBase
+ def to_rss(rss)
+ textInput = Rss::Channel::TextInput.new
+ set = setup_values(textInput)
+ if set
+ rss.channel.textInput = textInput
+ setup_other_elements(rss)
+ end
+ end
+
+ private
+ def have_required_values?
+ @title and @description and @name and @link
+ end
+ end
+ end
+
+ add_maker(filename_to_version(__FILE__), RSS09)
+ add_maker(filename_to_version(__FILE__) + "1", RSS09)
+ end
+end
diff --git a/ruby_1_8_5/lib/rss/maker/1.0.rb b/ruby_1_8_5/lib/rss/maker/1.0.rb
new file mode 100644
index 0000000000..3e6542a007
--- /dev/null
+++ b/ruby_1_8_5/lib/rss/maker/1.0.rb
@@ -0,0 +1,204 @@
+require "rss/1.0"
+
+require "rss/maker/base"
+
+module RSS
+ module Maker
+
+ class RSS10 < RSSBase
+
+ def initialize
+ super("1.0")
+ end
+
+ private
+ def make_rss
+ RDF.new(@version, @encoding, @standalone)
+ end
+
+ def setup_elements(rss)
+ setup_channel(rss)
+ setup_image(rss)
+ setup_items(rss)
+ setup_textinput(rss)
+ end
+
+ class Channel < ChannelBase
+
+ def to_rss(rss)
+ set = false
+ if @about
+ channel = RDF::Channel.new(@about)
+ set = setup_values(channel)
+ if set
+ channel.dc_dates.clear
+ rss.channel = channel
+ setup_items(rss)
+ setup_image(rss)
+ setup_textinput(rss)
+ setup_other_elements(rss)
+ end
+ end
+
+ if (!@about or !set) and variable_is_set?
+ raise NotSetError.new("maker.channel", not_set_required_variables)
+ 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
+
+ def required_variable_names
+ %w(about title link description)
+ end
+
+ class SkipDays < SkipDaysBase
+ def to_rss(*args)
+ end
+
+ class Day < DayBase
+ end
+ end
+
+ class SkipHours < SkipHoursBase
+ def to_rss(*args)
+ end
+
+ class Hour < HourBase
+ end
+ end
+
+ class Cloud < CloudBase
+ def to_rss(*args)
+ end
+ end
+
+ class Categories < CategoriesBase
+ def to_rss(*args)
+ end
+
+ class Category < CategoryBase
+ end
+ 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
+ item.dc_dates.clear
+ 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 Categories < CategoriesBase
+ def to_rss(*args)
+ end
+
+ class Category < CategoryBase
+ 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
diff --git a/ruby_1_8_5/lib/rss/maker/2.0.rb b/ruby_1_8_5/lib/rss/maker/2.0.rb
new file mode 100644
index 0000000000..a958661614
--- /dev/null
+++ b/ruby_1_8_5/lib/rss/maker/2.0.rb
@@ -0,0 +1,168 @@
+require "rss/2.0"
+
+require "rss/maker/0.9"
+
+module RSS
+ module Maker
+
+ class RSS20 < RSS09
+
+ def initialize(rss_version="2.0")
+ super
+ end
+
+ class Channel < RSS09::Channel
+
+ def have_required_values?
+ @title and @link and @description
+ end
+
+ def required_variable_names
+ %w(title link description)
+ end
+
+ class SkipDays < RSS09::Channel::SkipDays
+ class Day < RSS09::Channel::SkipDays::Day
+ end
+ end
+
+ class SkipHours < RSS09::Channel::SkipHours
+ class Hour < RSS09::Channel::SkipHours::Hour
+ end
+ end
+
+ class Cloud < RSS09::Channel::Cloud
+ def to_rss(rss, channel)
+ cloud = Rss::Channel::Cloud.new
+ set = setup_values(cloud)
+ if set
+ channel.cloud = cloud
+ setup_other_elements(rss)
+ end
+ end
+
+ def have_required_values?
+ @domain and @port and @path and
+ @registerProcedure and @protocol
+ end
+ end
+
+ class Categories < RSS09::Channel::Categories
+ def to_rss(rss, channel)
+ @categories.each do |category|
+ category.to_rss(rss, channel)
+ end
+ end
+
+ class Category < RSS09::Channel::Categories::Category
+ def to_rss(rss, channel)
+ category = Rss::Channel::Category.new
+ set = setup_values(category)
+ if set
+ channel.categories << category
+ setup_other_elements(rss)
+ end
+ end
+
+ def have_required_values?
+ @content
+ end
+ end
+ end
+
+ end
+
+ class Image < RSS09::Image
+ end
+
+ class Items < RSS09::Items
+
+ class Item < RSS09::Items::Item
+
+ def have_required_values?
+ @title or @description
+ end
+
+ private
+ def variables
+ super + ["pubDate"]
+ end
+
+ class Guid < RSS09::Items::Item::Guid
+ def to_rss(rss, item)
+ guid = Rss::Channel::Item::Guid.new
+ set = setup_values(guid)
+ if set
+ item.guid = guid
+ setup_other_elements(rss)
+ end
+ end
+
+ def have_required_values?
+ @content
+ end
+ end
+
+ class Enclosure < RSS09::Items::Item::Enclosure
+ def to_rss(rss, item)
+ enclosure = Rss::Channel::Item::Enclosure.new
+ set = setup_values(enclosure)
+ if set
+ item.enclosure = enclosure
+ setup_other_elements(rss)
+ end
+ end
+
+ def have_required_values?
+ @url and @length and @type
+ end
+ end
+
+ class Source < RSS09::Items::Item::Source
+ def to_rss(rss, item)
+ source = Rss::Channel::Item::Source.new
+ set = setup_values(source)
+ if set
+ item.source = source
+ setup_other_elements(rss)
+ end
+ end
+
+ def have_required_values?
+ @url and @content
+ end
+ end
+
+ class Categories < RSS09::Items::Item::Categories
+ def to_rss(rss, item)
+ @categories.each do |category|
+ category.to_rss(rss, item)
+ end
+ end
+
+ class Category < RSS09::Items::Item::Categories::Category
+ def to_rss(rss, item)
+ category = Rss::Channel::Item::Category.new
+ set = setup_values(category)
+ if set
+ item.categories << category
+ setup_other_elements(rss)
+ end
+ end
+
+ def have_required_values?
+ @content
+ end
+ end
+ end
+ end
+
+ end
+
+ class Textinput < RSS09::Textinput
+ end
+ end
+
+ add_maker(filename_to_version(__FILE__), RSS20)
+ end
+end
diff --git a/ruby_1_8_5/lib/rss/maker/base.rb b/ruby_1_8_5/lib/rss/maker/base.rb
new file mode 100644
index 0000000000..2327dd98e4
--- /dev/null
+++ b/ruby_1_8_5/lib/rss/maker/base.rb
@@ -0,0 +1,546 @@
+require 'forwardable'
+
+require 'rss/rss'
+
+module RSS
+ module Maker
+
+ module Base
+
+ def self.append_features(klass)
+ super
+
+ klass.module_eval(<<-EOC, __FILE__, __LINE__)
+
+ OTHER_ELEMENTS = []
+ NEED_INITIALIZE_VARIABLES = []
+
+ def self.inherited(subclass)
+ subclass.const_set("OTHER_ELEMENTS", [])
+ subclass.const_set("NEED_INITIALIZE_VARIABLES", [])
+
+ subclass.module_eval(<<-EOEOC, __FILE__, __LINE__)
+ def self.other_elements
+ OTHER_ELEMENTS + super
+ end
+
+ def self.need_initialize_variables
+ NEED_INITIALIZE_VARIABLES + super
+ end
+ EOEOC
+ end
+
+ def self.add_other_element(variable_name)
+ OTHER_ELEMENTS << variable_name
+ end
+
+ def self.other_elements
+ OTHER_ELEMENTS
+ end
+
+ def self.add_need_initialize_variable(variable_name, init_value="nil")
+ NEED_INITIALIZE_VARIABLES << [variable_name, init_value]
+ end
+
+ def self.need_initialize_variables
+ NEED_INITIALIZE_VARIABLES
+ end
+
+ def self.def_array_element(name)
+ include Enumerable
+ extend Forwardable
+
+ def_delegators("@\#{name}", :<<, :[], :[]=, :first, :last)
+ def_delegators("@\#{name}", :push, :pop, :shift, :unshift)
+ def_delegators("@\#{name}", :each, :size)
+
+ add_need_initialize_variable(name, "[]")
+ end
+ EOC
+ end
+
+ def initialize(maker)
+ @maker = maker
+ initialize_variables
+ end
+
+ def have_required_values?
+ true
+ end
+
+ private
+ def initialize_variables
+ self.class.need_initialize_variables.each do |variable_name, init_value|
+ instance_eval("@#{variable_name} = #{init_value}", __FILE__, __LINE__)
+ end
+ end
+
+ def setup_other_elements(rss)
+ self.class.other_elements.each do |element|
+ __send__("setup_#{element}", rss, current_element(rss))
+ end
+ end
+
+ def current_element(rss)
+ rss
+ end
+
+ def setup_values(target)
+ set = false
+ if have_required_values?
+ variables.each do |var|
+ setter = "#{var}="
+ if target.respond_to?(setter)
+ value = __send__(var)
+ if value
+ target.__send__(setter, value)
+ set = true
+ end
+ end
+ end
+ end
+ set
+ end
+
+ def variables
+ self.class.need_initialize_variables.find_all do |name, init|
+ "nil" == init
+ end.collect do |name, init|
+ name
+ end
+ end
+
+ def variable_is_set?
+ variables.find {|var| !__send__(var).nil?}
+ end
+
+ def not_set_required_variables
+ required_variable_names.find_all do |var|
+ __send__(var).nil?
+ end
+ end
+
+ def required_variables_are_set?
+ required_variable_names.each do |var|
+ return false if __send__(var).nil?
+ end
+ true
+ end
+
+ end
+
+ class RSSBase
+ include Base
+
+ class << self
+ def make(&block)
+ new.make(&block)
+ end
+ end
+
+ %w(xml_stylesheets channel image items textinput).each do |element|
+ attr_reader element
+ add_need_initialize_variable(element, "make_#{element}")
+ module_eval(<<-EOC, __FILE__, __LINE__)
+ private
+ def setup_#{element}(rss)
+ @#{element}.to_rss(rss)
+ end
+
+ def make_#{element}
+ self.class::#{Utils.to_class_name(element)}.new(self)
+ end
+EOC
+ end
+
+ attr_reader :rss_version
+ attr_accessor :version, :encoding, :standalone
+
+ def initialize(rss_version)
+ super(self)
+ @rss_version = rss_version
+ @version = "1.0"
+ @encoding = "UTF-8"
+ @standalone = nil
+ end
+
+ def make
+ if block_given?
+ yield(self)
+ to_rss
+ else
+ nil
+ end
+ end
+
+ def to_rss
+ rss = make_rss
+ setup_xml_stylesheets(rss)
+ setup_elements(rss)
+ setup_other_elements(rss)
+ if rss.channel
+ rss
+ else
+ nil
+ end
+ end
+
+ private
+ remove_method :make_xml_stylesheets
+ def make_xml_stylesheets
+ XMLStyleSheets.new(self)
+ end
+
+ end
+
+ class XMLStyleSheets
+ include Base
+
+ def_array_element("xml_stylesheets")
+
+ def to_rss(rss)
+ @xml_stylesheets.each do |xss|
+ xss.to_rss(rss)
+ end
+ end
+
+ def new_xml_stylesheet
+ xss = XMLStyleSheet.new(@maker)
+ @xml_stylesheets << xss
+ if block_given?
+ yield xss
+ else
+ xss
+ end
+ end
+
+ class XMLStyleSheet
+ include Base
+
+ ::RSS::XMLStyleSheet::ATTRIBUTES.each do |attribute|
+ attr_accessor attribute
+ add_need_initialize_variable(attribute)
+ end
+
+ def to_rss(rss)
+ xss = ::RSS::XMLStyleSheet.new
+ guess_type_if_need(xss)
+ set = setup_values(xss)
+ if set
+ rss.xml_stylesheets << xss
+ end
+ end
+
+ def have_required_values?
+ @href and @type
+ end
+
+ private
+ def guess_type_if_need(xss)
+ if @type.nil?
+ xss.href = @href
+ @type = xss.type
+ end
+ end
+ end
+ end
+
+ class ChannelBase
+ include Base
+
+ %w(cloud categories skipDays skipHours).each do |element|
+ attr_reader element
+ add_other_element(element)
+ add_need_initialize_variable(element, "make_#{element}")
+ module_eval(<<-EOC, __FILE__, __LINE__)
+ private
+ def setup_#{element}(rss, current)
+ @#{element}.to_rss(rss, current)
+ end
+
+ def make_#{element}
+ self.class::#{Utils.to_class_name(element)}.new(@maker)
+ end
+EOC
+ end
+
+ %w(about title link description language copyright
+ managingEditor webMaster rating docs date
+ lastBuildDate generator ttl).each do |element|
+ attr_accessor element
+ add_need_initialize_variable(element)
+ end
+
+ alias_method(:pubDate, :date)
+ alias_method(:pubDate=, :date=)
+
+ def current_element(rss)
+ rss.channel
+ end
+
+ class SkipDaysBase
+ include Base
+
+ def_array_element("days")
+
+ def new_day
+ day = self.class::Day.new(@maker)
+ @days << day
+ if block_given?
+ yield day
+ else
+ day
+ end
+ end
+
+ def current_element(rss)
+ rss.channel.skipDays
+ end
+
+ class DayBase
+ include Base
+
+ %w(content).each do |element|
+ attr_accessor element
+ add_need_initialize_variable(element)
+ end
+
+ def current_element(rss)
+ rss.channel.skipDays.last
+ end
+
+ end
+ end
+
+ class SkipHoursBase
+ include Base
+
+ def_array_element("hours")
+
+ def new_hour
+ hour = self.class::Hour.new(@maker)
+ @hours << hour
+ if block_given?
+ yield hour
+ else
+ hour
+ end
+ end
+
+ def current_element(rss)
+ rss.channel.skipHours
+ end
+
+ class HourBase
+ include Base
+
+ %w(content).each do |element|
+ attr_accessor element
+ add_need_initialize_variable(element)
+ end
+
+ def current_element(rss)
+ rss.channel.skipHours.last
+ end
+
+ end
+ end
+
+ class CloudBase
+ include Base
+
+ %w(domain port path registerProcedure protocol).each do |element|
+ attr_accessor element
+ add_need_initialize_variable(element)
+ end
+
+ def current_element(rss)
+ rss.channel.cloud
+ end
+
+ end
+
+ class CategoriesBase
+ include Base
+
+ def_array_element("categories")
+
+ def new_category
+ category = self.class::Category.new(@maker)
+ @categories << category
+ if block_given?
+ yield category
+ else
+ category
+ end
+ end
+
+ class CategoryBase
+ include Base
+
+ %w(domain content).each do |element|
+ attr_accessor element
+ add_need_initialize_variable(element)
+ end
+ end
+ end
+ end
+
+ class ImageBase
+ include Base
+
+ %w(title url width height description).each do |element|
+ attr_accessor element
+ add_need_initialize_variable(element)
+ end
+
+ def link
+ @maker.channel.link
+ end
+
+ def current_element(rss)
+ rss.image
+ end
+ end
+
+ class ItemsBase
+ include Base
+
+ def_array_element("items")
+
+ attr_accessor :do_sort, :max_size
+
+ def initialize(maker)
+ super
+ @do_sort = false
+ @max_size = -1
+ end
+
+ def normalize
+ if @max_size >= 0
+ sort_if_need[0...@max_size]
+ else
+ sort_if_need[0..@max_size]
+ end
+ end
+
+ def current_element(rss)
+ rss.items
+ end
+
+ def new_item
+ item = self.class::Item.new(@maker)
+ @items << item
+ if block_given?
+ yield item
+ else
+ item
+ end
+ end
+
+ private
+ def sort_if_need
+ if @do_sort.respond_to?(:call)
+ @items.sort do |x, y|
+ @do_sort.call(x, y)
+ end
+ elsif @do_sort
+ @items.sort do |x, y|
+ y <=> x
+ end
+ else
+ @items
+ end
+ end
+
+ class ItemBase
+ include Base
+
+ %w(guid enclosure source categories).each do |element|
+ attr_reader element
+ add_other_element(element)
+ add_need_initialize_variable(element, "make_#{element}")
+ module_eval(<<-EOC, __FILE__, __LINE__)
+ private
+ def setup_#{element}(rss, current)
+ @#{element}.to_rss(rss, current)
+ end
+
+ def make_#{element}
+ self.class::#{Utils.to_class_name(element)}.new(@maker)
+ end
+EOC
+ end
+
+ %w(title link description date author comments).each do |element|
+ attr_accessor element
+ add_need_initialize_variable(element)
+ end
+
+ alias_method(:pubDate, :date)
+ alias_method(:pubDate=, :date=)
+
+ def <=>(other)
+ if date and other.date
+ date <=> other.date
+ elsif date
+ 1
+ elsif other.date
+ -1
+ else
+ 0
+ end
+ end
+
+ def current_element(rss)
+ rss.items.last
+ end
+
+ class GuidBase
+ include Base
+
+ %w(isPermaLink content).each do |element|
+ attr_accessor element
+ add_need_initialize_variable(element)
+ end
+ end
+
+ class EnclosureBase
+ include Base
+
+ %w(url length type).each do |element|
+ attr_accessor element
+ add_need_initialize_variable(element)
+ end
+ end
+
+ class SourceBase
+ include Base
+
+ %w(url content).each do |element|
+ attr_accessor element
+ add_need_initialize_variable(element)
+ end
+ end
+
+ CategoriesBase = ChannelBase::CategoriesBase
+
+ end
+ end
+
+ class TextinputBase
+ include Base
+
+ %w(title description name link).each do |element|
+ attr_accessor element
+ add_need_initialize_variable(element)
+ end
+
+ def current_element(rss)
+ rss.textinput
+ end
+
+ end
+
+ end
+end
diff --git a/ruby_1_8_5/lib/rss/maker/content.rb b/ruby_1_8_5/lib/rss/maker/content.rb
new file mode 100644
index 0000000000..18590d0cf8
--- /dev/null
+++ b/ruby_1_8_5/lib/rss/maker/content.rb
@@ -0,0 +1,29 @@
+require 'rss/content'
+require 'rss/maker/1.0'
+
+module RSS
+ module Maker
+ module ContentModel
+ def self.append_features(klass)
+ super
+
+ ::RSS::ContentModel::ELEMENTS.each do |element|
+ klass.add_need_initialize_variable(element)
+ klass.add_other_element(element)
+ klass.module_eval(<<-EOC, __FILE__, __LINE__+1)
+ attr_accessor :#{element}
+ def setup_#{element}(rss, current)
+ if #{element} and current.respond_to?(:#{element}=)
+ current.#{element} = @#{element} if @#{element}
+ end
+ end
+ EOC
+ end
+ end
+ end
+
+ class ItemsBase
+ class ItemBase; include ContentModel; end
+ end
+ end
+end
diff --git a/ruby_1_8_5/lib/rss/maker/dublincore.rb b/ruby_1_8_5/lib/rss/maker/dublincore.rb
new file mode 100644
index 0000000000..0cf1255e82
--- /dev/null
+++ b/ruby_1_8_5/lib/rss/maker/dublincore.rb
@@ -0,0 +1,169 @@
+require 'rss/dublincore'
+require 'rss/maker/1.0'
+
+module RSS
+ module Maker
+ module DublinCoreModel
+ def self.append_features(klass)
+ super
+
+ ::RSS::DublinCoreModel::ELEMENT_NAME_INFOS.each do |name, plural_name|
+ plural_name ||= "#{name}s"
+ full_name = "#{RSS::DC_PREFIX}_#{name}"
+ full_plural_name = "#{RSS::DC_PREFIX}_#{plural_name}"
+ klass_name = Utils.to_class_name(name)
+ plural_klass_name = "DublinCore#{Utils.to_class_name(plural_name)}"
+ full_plural_klass_name = "self.class::#{plural_klass_name}"
+ full_klass_name = "#{full_plural_klass_name}::#{klass_name}"
+ klass.add_need_initialize_variable(full_plural_name,
+ "make_#{full_plural_name}")
+ klass.add_other_element(full_plural_name)
+ klass.module_eval(<<-EOC, __FILE__, __LINE__+1)
+ attr_accessor :#{full_plural_name}
+ def make_#{full_plural_name}
+ #{full_plural_klass_name}.new(@maker)
+ end
+
+ def setup_#{full_plural_name}(rss, current)
+ @#{full_plural_name}.to_rss(rss, current)
+ end
+
+ def #{full_name}
+ @#{full_plural_name}[0] and @#{full_plural_name}[0].value
+ end
+
+ def #{full_name}=(new_value)
+ @#{full_plural_name}[0] = #{full_klass_name}.new(self)
+ @#{full_plural_name}[0].value = new_value
+ end
+EOC
+ end
+ end
+
+ ::RSS::DublinCoreModel::ELEMENT_NAME_INFOS.each do |name, plural_name|
+ plural_name ||= "#{name}s"
+ klass_name = Utils.to_class_name(name)
+ plural_klass_name = "DublinCore#{Utils.to_class_name(plural_name)}"
+ module_eval(<<-EOC, __FILE__, __LINE__)
+ class #{plural_klass_name}Base
+ include Base
+
+ def_array_element(#{plural_name.dump})
+
+ def new_#{name}
+ #{name} = self.class::#{klass_name}.new(self)
+ @#{plural_name} << #{name}
+ if block_given?
+ yield #{name}
+ else
+ #{name}
+ end
+ end
+
+ def to_rss(rss, current)
+ @#{plural_name}.each do |#{name}|
+ #{name}.to_rss(rss, current)
+ end
+ end
+
+ class #{klass_name}Base
+ include Base
+
+ attr_accessor :value
+ add_need_initialize_variable("value")
+ alias_method(:content, :value)
+ alias_method(:content=, :value=)
+
+ def have_required_values?
+ @value
+ end
+ end
+ end
+ EOC
+ end
+
+ def self.install_dublin_core(klass)
+ ::RSS::DublinCoreModel::ELEMENT_NAME_INFOS.each do |name, plural_name|
+ plural_name ||= "#{name}s"
+ klass_name = Utils.to_class_name(name)
+ plural_klass_name = "DublinCore#{Utils.to_class_name(plural_name)}"
+ full_klass_name = "DublinCore#{klass_name}"
+ klass.module_eval(<<-EOC, *Utils.get_file_and_line_from_caller(1))
+ class #{plural_klass_name} < #{plural_klass_name}Base
+ class #{klass_name} < #{klass_name}Base
+ def to_rss(rss, current)
+ if value and current.respond_to?(:dc_#{name})
+ new_item = current.class::#{full_klass_name}.new(value)
+ current.dc_#{plural_name} << new_item
+ end
+ end
+ end
+ end
+EOC
+ end
+ end
+ end
+
+ class ChannelBase
+ include DublinCoreModel
+
+ remove_method(:date)
+ remove_method(:date=)
+ alias_method(:date, :dc_date)
+ alias_method(:date=, :dc_date=)
+ end
+
+ class ImageBase; include DublinCoreModel; end
+ class ItemsBase
+ class ItemBase
+ include DublinCoreModel
+
+ remove_method(:date)
+ remove_method(:date=)
+ alias_method(:date, :dc_date)
+ alias_method(:date=, :dc_date=)
+ end
+ end
+ class TextinputBase; include DublinCoreModel; end
+
+ class RSS10
+ class Channel
+ DublinCoreModel.install_dublin_core(self)
+ end
+
+ class Image
+ DublinCoreModel.install_dublin_core(self)
+ end
+
+ class Items
+ class Item
+ DublinCoreModel.install_dublin_core(self)
+ end
+ end
+
+ class Textinput
+ DublinCoreModel.install_dublin_core(self)
+ end
+ end
+
+ class RSS09
+ class Channel
+ DublinCoreModel.install_dublin_core(self)
+ end
+
+ class Image
+ DublinCoreModel.install_dublin_core(self)
+ end
+
+ class Items
+ class Item
+ DublinCoreModel.install_dublin_core(self)
+ end
+ end
+
+ class Textinput
+ DublinCoreModel.install_dublin_core(self)
+ end
+ end
+ end
+end
diff --git a/ruby_1_8_5/lib/rss/maker/image.rb b/ruby_1_8_5/lib/rss/maker/image.rb
new file mode 100644
index 0000000000..ed51c8ecba
--- /dev/null
+++ b/ruby_1_8_5/lib/rss/maker/image.rb
@@ -0,0 +1,145 @@
+require 'rss/image'
+require 'rss/maker/1.0'
+require 'rss/maker/dublincore'
+
+module RSS
+ module Maker
+ module ImageItemModel
+ def self.append_features(klass)
+ super
+
+ name = "#{RSS::IMAGE_PREFIX}_item"
+ klass.add_need_initialize_variable(name, "make_#{name}")
+ klass.add_other_element(name)
+ klass.module_eval(<<-EOC, __FILE__, __LINE__+1)
+ attr_reader :#{name}
+ def setup_#{name}(rss, current)
+ if @#{name}
+ @#{name}.to_rss(rss, current)
+ end
+ end
+
+ def make_#{name}
+ self.class::#{Utils.to_class_name(name)}.new(@maker)
+ end
+EOC
+ end
+
+ class ImageItemBase
+ include Base
+ include Maker::DublinCoreModel
+
+ attr_accessor :about, :resource, :image_width, :image_height
+ add_need_initialize_variable("about")
+ add_need_initialize_variable("resource")
+ add_need_initialize_variable("image_width")
+ add_need_initialize_variable("image_height")
+ alias width= image_width=
+ alias width image_width
+ alias height= image_height=
+ alias height image_height
+
+ def have_required_values?
+ @about
+ end
+ end
+ end
+
+ module ImageFaviconModel
+ def self.append_features(klass)
+ super
+
+ name = "#{RSS::IMAGE_PREFIX}_favicon"
+ klass.add_need_initialize_variable(name, "make_#{name}")
+ klass.add_other_element(name)
+ klass.module_eval(<<-EOC, __FILE__, __LINE__+1)
+ attr_reader :#{name}
+ def setup_#{name}(rss, current)
+ if @#{name}
+ @#{name}.to_rss(rss, current)
+ end
+ end
+
+ def make_#{name}
+ self.class::#{Utils.to_class_name(name)}.new(@maker)
+ end
+EOC
+ end
+
+ class ImageFaviconBase
+ include Base
+ include Maker::DublinCoreModel
+
+ attr_accessor :about, :image_size
+ add_need_initialize_variable("about")
+ add_need_initialize_variable("image_size")
+ alias size image_size
+ alias size= image_size=
+
+ def have_required_values?
+ @about and @image_size
+ end
+ end
+ end
+
+ class ChannelBase; include Maker::ImageFaviconModel; end
+
+ class ItemsBase
+ class ItemBase; include Maker::ImageItemModel; end
+ end
+
+ class RSS10
+ class Items
+ class Item
+ class ImageItem < ImageItemBase
+ DublinCoreModel.install_dublin_core(self)
+ def to_rss(rss, current)
+ if @about
+ item = ::RSS::ImageItemModel::ImageItem.new(@about, @resource)
+ setup_values(item)
+ setup_other_elements(item)
+ current.image_item = item
+ end
+ end
+ end
+ end
+ end
+
+ class Channel
+ class ImageFavicon < ImageFaviconBase
+ DublinCoreModel.install_dublin_core(self)
+ def to_rss(rss, current)
+ if @about and @image_size
+ args = [@about, @image_size]
+ favicon = ::RSS::ImageFaviconModel::ImageFavicon.new(*args)
+ setup_values(favicon)
+ setup_other_elements(favicon)
+ current.image_favicon = favicon
+ end
+ end
+ end
+ end
+ end
+
+ class RSS09
+ class Items
+ class Item
+ class ImageItem < ImageItemBase
+ DublinCoreModel.install_dublin_core(self)
+ def to_rss(*args)
+ end
+ end
+ end
+ end
+
+ class Channel
+ class ImageFavicon < ImageFaviconBase
+ DublinCoreModel.install_dublin_core(self)
+ def to_rss(*args)
+ end
+ end
+ end
+ end
+
+ end
+end
diff --git a/ruby_1_8_5/lib/rss/maker/syndication.rb b/ruby_1_8_5/lib/rss/maker/syndication.rb
new file mode 100644
index 0000000000..3717086257
--- /dev/null
+++ b/ruby_1_8_5/lib/rss/maker/syndication.rb
@@ -0,0 +1,27 @@
+require 'rss/syndication'
+require 'rss/maker/1.0'
+
+module RSS
+ module Maker
+ module SyndicationModel
+ def self.append_features(klass)
+ super
+
+ ::RSS::SyndicationModel::ELEMENTS.each do |element|
+ klass.add_need_initialize_variable(element)
+ klass.add_other_element(element)
+ klass.module_eval(<<-EOC, __FILE__, __LINE__+1)
+ attr_accessor :#{element}
+ def setup_#{element}(rss, current)
+ if #{element} and current.respond_to?(:#{element}=)
+ current.#{element} = @#{element} if @#{element}
+ end
+ end
+ EOC
+ end
+ end
+ end
+
+ class ChannelBase; include SyndicationModel; end
+ end
+end
diff --git a/ruby_1_8_5/lib/rss/maker/taxonomy.rb b/ruby_1_8_5/lib/rss/maker/taxonomy.rb
new file mode 100644
index 0000000000..f272996581
--- /dev/null
+++ b/ruby_1_8_5/lib/rss/maker/taxonomy.rb
@@ -0,0 +1,182 @@
+require 'rss/taxonomy'
+require 'rss/maker/1.0'
+require 'rss/maker/dublincore'
+
+module RSS
+ module Maker
+ module TaxonomyTopicsModel
+ def self.append_features(klass)
+ super
+
+ klass.add_need_initialize_variable("taxo_topics", "make_taxo_topics")
+ klass.add_other_element("taxo_topics")
+ klass.module_eval(<<-EOC, __FILE__, __LINE__ + 1)
+ attr_reader :taxo_topics
+ def make_taxo_topics
+ self.class::TaxonomyTopics.new(@maker)
+ end
+
+ def setup_taxo_topics(rss, current)
+ @taxo_topics.to_rss(rss, current)
+ end
+EOC
+ end
+
+ def self.install_taxo_topics(klass)
+ klass.module_eval(<<-EOC, *Utils.get_file_and_line_from_caller(1))
+ class TaxonomyTopics < TaxonomyTopicsBase
+ def to_rss(rss, current)
+ if current.respond_to?(:taxo_topics)
+ topics = current.class::TaxonomyTopics.new
+ bag = topics.Bag
+ @resources.each do |resource|
+ bag.lis << RDF::Bag::Li.new(resource)
+ end
+ current.taxo_topics = topics
+ end
+ end
+ end
+EOC
+ end
+
+ class TaxonomyTopicsBase
+ include Base
+
+ attr_reader :resources
+ def_array_element("resources")
+ end
+ end
+
+ module TaxonomyTopicModel
+ def self.append_features(klass)
+ super
+
+ klass.add_need_initialize_variable("taxo_topics", "make_taxo_topics")
+ klass.add_other_element("taxo_topics")
+ klass.module_eval(<<-EOC, __FILE__, __LINE__ + 1)
+ attr_reader :taxo_topics
+ def make_taxo_topics
+ self.class::TaxonomyTopics.new(@maker)
+ end
+
+ def setup_taxo_topics(rss, current)
+ @taxo_topics.to_rss(rss, current)
+ end
+
+ def taxo_topic
+ @taxo_topics[0] and @taxo_topics[0].value
+ end
+
+ def taxo_topic=(new_value)
+ @taxo_topic[0] = self.class::TaxonomyTopic.new(self)
+ @taxo_topic[0].value = new_value
+ end
+EOC
+ end
+
+ def self.install_taxo_topic(klass)
+ klass.module_eval(<<-EOC, *Utils.get_file_and_line_from_caller(1))
+ class TaxonomyTopics < TaxonomyTopicsBase
+ class TaxonomyTopic < TaxonomyTopicBase
+ DublinCoreModel.install_dublin_core(self)
+ TaxonomyTopicsModel.install_taxo_topics(self)
+
+ def to_rss(rss, current)
+ if current.respond_to?(:taxo_topics)
+ topic = current.class::TaxonomyTopic.new(value)
+ topic.taxo_link = value
+ taxo_topics.to_rss(rss, topic) if taxo_topics
+ current.taxo_topics << topic
+ setup_other_elements(rss)
+ end
+ end
+
+ def current_element(rss)
+ super.taxo_topics.last
+ end
+ end
+ end
+EOC
+ end
+
+ class TaxonomyTopicsBase
+ include Base
+
+ def_array_element("taxo_topics")
+
+ def new_taxo_topic
+ taxo_topic = self.class::TaxonomyTopic.new(self)
+ @taxo_topics << taxo_topic
+ if block_given?
+ yield taxo_topic
+ else
+ taxo_topic
+ end
+ end
+
+ def to_rss(rss, current)
+ @taxo_topics.each do |taxo_topic|
+ taxo_topic.to_rss(rss, current)
+ end
+ end
+
+ class TaxonomyTopicBase
+ include Base
+ include DublinCoreModel
+ include TaxonomyTopicsModel
+
+ attr_accessor :value
+ add_need_initialize_variable("value")
+ alias_method(:taxo_link, :value)
+ alias_method(:taxo_link=, :value=)
+
+ def have_required_values?
+ @value
+ end
+ end
+ end
+ end
+
+ class RSSBase
+ include TaxonomyTopicModel
+ end
+
+ class ChannelBase
+ include TaxonomyTopicsModel
+ end
+
+ class ItemsBase
+ class ItemBase
+ include TaxonomyTopicsModel
+ end
+ end
+
+ class RSS10
+ TaxonomyTopicModel.install_taxo_topic(self)
+
+ class Channel
+ TaxonomyTopicsModel.install_taxo_topics(self)
+ end
+
+ class Items
+ class Item
+ TaxonomyTopicsModel.install_taxo_topics(self)
+ end
+ end
+ end
+
+ class RSS09
+ TaxonomyTopicModel.install_taxo_topic(self)
+
+ class Channel
+ TaxonomyTopicsModel.install_taxo_topics(self)
+ end
+
+ class Items
+ class Item
+ TaxonomyTopicsModel.install_taxo_topics(self)
+ end
+ end
+ end
+ end
+end
diff --git a/ruby_1_8_5/lib/rss/maker/trackback.rb b/ruby_1_8_5/lib/rss/maker/trackback.rb
new file mode 100644
index 0000000000..4ae6164f68
--- /dev/null
+++ b/ruby_1_8_5/lib/rss/maker/trackback.rb
@@ -0,0 +1,130 @@
+require 'rss/trackback'
+require 'rss/maker/1.0'
+require 'rss/maker/2.0'
+
+module RSS
+ module Maker
+ module TrackBackModel
+ def self.append_features(klass)
+ super
+
+ name = "#{RSS::TRACKBACK_PREFIX}_ping"
+ klass.add_need_initialize_variable(name)
+ klass.add_other_element(name)
+ klass.module_eval(<<-EOC, __FILE__, __LINE__+1)
+ attr_accessor :#{name}
+ def setup_#{name}(rss, current)
+ if #{name} and current.respond_to?(:#{name}=)
+ current.#{name} = #{name}
+ end
+ end
+ EOC
+
+ name = "#{RSS::TRACKBACK_PREFIX}_abouts"
+ klass.add_need_initialize_variable(name, "make_#{name}")
+ klass.add_other_element(name)
+ klass.module_eval(<<-EOC, __FILE__, __LINE__+1)
+ attr_accessor :#{name}
+ def make_#{name}
+ self.class::TrackBackAbouts.new(self)
+ end
+
+ def setup_#{name}(rss, current)
+ @#{name}.to_rss(rss, current)
+ end
+ EOC
+ end
+
+ class TrackBackAboutsBase
+ include Base
+
+ def_array_element("abouts")
+
+ def new_about
+ about = self.class::TrackBackAbout.new(@maker)
+ @abouts << about
+ if block_given?
+ yield about
+ else
+ about
+ end
+ end
+
+ def to_rss(rss, current)
+ @abouts.each do |about|
+ about.to_rss(rss, current)
+ end
+ end
+
+ class TrackBackAboutBase
+ include Base
+
+ attr_accessor :value
+ add_need_initialize_variable("value")
+
+ alias_method(:resource, :value)
+ alias_method(:resource=, :value=)
+ alias_method(:content, :value)
+ alias_method(:content=, :value=)
+
+ def have_required_values?
+ @value
+ end
+
+ end
+ end
+ end
+
+ class ItemsBase
+ class ItemBase; include TrackBackModel; end
+ end
+
+ class RSS10
+ class Items
+ class Item
+ class TrackBackAbouts < TrackBackAboutsBase
+ class TrackBackAbout < TrackBackAboutBase
+ def to_rss(rss, current)
+ if resource
+ about = ::RSS::TrackBackModel10::TrackBackAbout.new(resource)
+ current.trackback_abouts << about
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+
+ class RSS09
+ class Items
+ class Item
+ class TrackBackAbouts < TrackBackAboutsBase
+ def to_rss(*args)
+ end
+ class TrackBackAbout < TrackBackAboutBase
+ end
+ end
+ end
+ end
+ end
+
+ class RSS20
+ class Items
+ class Item
+ class TrackBackAbouts < TrackBackAboutsBase
+ class TrackBackAbout < TrackBackAboutBase
+ def to_rss(rss, current)
+ if content
+ about = ::RSS::TrackBackModel20::TrackBackAbout.new(content)
+ current.trackback_abouts << about
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+
+ end
+end