mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* lib/rss, test/rss, sample/rss: backported from CVS HEAD.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@7509 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
67c5b057e6
commit
bcf72db844
30 changed files with 1967 additions and 990 deletions
|
|
@ -11,23 +11,15 @@ module RSS
|
|||
super
|
||||
end
|
||||
|
||||
def to_rss
|
||||
rss = Rss.new(@rss_version, @version, @encoding, @standalone)
|
||||
setup_xml_stylesheets(rss)
|
||||
setup_channel(rss)
|
||||
setup_other_elements(rss)
|
||||
if rss.channel
|
||||
rss
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def setup_channel(rss)
|
||||
@channel.to_rss(rss)
|
||||
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)
|
||||
|
|
@ -44,12 +36,13 @@ module 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 and
|
||||
@maker.image.have_required_values?
|
||||
@title and @link and @description and @language
|
||||
end
|
||||
|
||||
private
|
||||
|
|
@ -69,9 +62,76 @@ module RSS
|
|||
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
|
||||
|
|
@ -130,9 +190,12 @@ module RSS
|
|||
end
|
||||
end
|
||||
|
||||
class Category < CategoryBase
|
||||
class Categories < CategoriesBase
|
||||
def to_rss(*args)
|
||||
end
|
||||
|
||||
class Category < CategoryBase
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
|
@ -156,5 +219,6 @@ module RSS
|
|||
end
|
||||
|
||||
add_maker(filename_to_version(__FILE__), RSS09)
|
||||
add_maker(filename_to_version(__FILE__) + "1", RSS09)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -11,41 +11,22 @@ module RSS
|
|||
super("1.0")
|
||||
end
|
||||
|
||||
def to_rss
|
||||
rss = RDF.new(@version, @encoding, @standalone)
|
||||
setup_xml_stylesheets(rss)
|
||||
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)
|
||||
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)
|
||||
set = false
|
||||
if @about
|
||||
channel = RDF::Channel.new(@about)
|
||||
set = setup_values(channel)
|
||||
|
|
@ -57,12 +38,16 @@ module 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
|
||||
|
|
@ -86,7 +71,37 @@ module RSS
|
|||
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
|
||||
|
||||
|
|
@ -153,9 +168,12 @@ module RSS
|
|||
end
|
||||
end
|
||||
|
||||
class Category < CategoryBase
|
||||
class Categories < CategoriesBase
|
||||
def to_rss(*args)
|
||||
end
|
||||
|
||||
class Category < CategoryBase
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -13,23 +13,30 @@ module RSS
|
|||
|
||||
class Channel < RSS09::Channel
|
||||
|
||||
add_other_element("cloud")
|
||||
|
||||
def have_required_values?
|
||||
@title and @link and @description
|
||||
end
|
||||
|
||||
private
|
||||
def setup_cloud(rss, current)
|
||||
@maker.channel.cloud.to_rss(rss)
|
||||
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)
|
||||
def to_rss(rss, channel)
|
||||
cloud = Rss::Channel::Cloud.new
|
||||
set = setup_values(cloud)
|
||||
if set
|
||||
rss.channel.cloud = cloud
|
||||
channel.cloud = cloud
|
||||
setup_other_elements(rss)
|
||||
end
|
||||
end
|
||||
|
|
@ -39,6 +46,30 @@ module RSS
|
|||
@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
|
||||
|
|
@ -102,18 +133,26 @@ module RSS
|
|||
end
|
||||
end
|
||||
|
||||
class Category < RSS09::Items::Item::Category
|
||||
class Categories < RSS09::Items::Item::Categories
|
||||
def to_rss(rss, item)
|
||||
category = Rss::Channel::Item::Category.new
|
||||
set = setup_values(category)
|
||||
if set
|
||||
item.category = category
|
||||
setup_other_elements(rss)
|
||||
@categories.each do |category|
|
||||
category.to_rss(rss, item)
|
||||
end
|
||||
end
|
||||
|
||||
def have_required_values?
|
||||
@content
|
||||
|
||||
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
|
||||
|
|
|
|||
|
|
@ -38,13 +38,24 @@ module RSS
|
|||
OTHER_ELEMENTS
|
||||
end
|
||||
|
||||
def self.add_need_initialize_variable(variable_name)
|
||||
const_get("NEED_INITIALIZE_VARIABLES") << variable_name
|
||||
def self.add_need_initialize_variable(variable_name, init_value="nil")
|
||||
const_get("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)
|
||||
|
||||
add_need_initialize_variable(name, "[]")
|
||||
end
|
||||
EOC
|
||||
end
|
||||
|
||||
|
|
@ -59,8 +70,8 @@ module RSS
|
|||
|
||||
private
|
||||
def initialize_variables
|
||||
self.class.need_initialize_variables.each do |variable_name|
|
||||
instance_eval("@#{variable_name} = nil", __FILE__, __LINE__)
|
||||
self.class.need_initialize_variables.each do |variable_name, init_value|
|
||||
instance_eval("@#{variable_name} = #{init_value}", __FILE__, __LINE__)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -88,7 +99,28 @@ module RSS
|
|||
end
|
||||
|
||||
def variables
|
||||
self.class.need_initialize_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
|
||||
|
|
@ -102,9 +134,22 @@ module RSS
|
|||
end
|
||||
end
|
||||
|
||||
attr_reader :rss_version, :xml_stylesheets
|
||||
attr_reader :channel, :image, :items, :textinput
|
||||
%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::#{element[0,1].upcase}#{element[1..-1]}.new(self)
|
||||
end
|
||||
EOC
|
||||
end
|
||||
|
||||
attr_reader :rss_version
|
||||
attr_accessor :version, :encoding, :standalone
|
||||
|
||||
def initialize(rss_version)
|
||||
|
|
@ -113,63 +158,45 @@ module RSS
|
|||
@version = "1.0"
|
||||
@encoding = "UTF-8"
|
||||
@standalone = nil
|
||||
@xml_stylesheets = make_xml_stylesheets
|
||||
@channel = make_channel
|
||||
@image = make_image
|
||||
@items = make_items
|
||||
@textinput = make_textinput
|
||||
end
|
||||
|
||||
def make(&block)
|
||||
block.call(self) if block
|
||||
to_rss
|
||||
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
|
||||
|
||||
def current_element(rss)
|
||||
rss
|
||||
end
|
||||
|
||||
private
|
||||
remove_method :make_xml_stylesheets
|
||||
def make_xml_stylesheets
|
||||
XMLStyleSheets.new(self)
|
||||
end
|
||||
|
||||
def make_channel
|
||||
self.class::Channel.new(self)
|
||||
end
|
||||
|
||||
def make_image
|
||||
self.class::Image.new(self)
|
||||
end
|
||||
|
||||
def make_items
|
||||
self.class::Items.new(self)
|
||||
end
|
||||
|
||||
def make_textinput
|
||||
self.class::Textinput.new(self)
|
||||
end
|
||||
|
||||
def setup_xml_stylesheets(rss)
|
||||
@xml_stylesheets.to_rss(rss)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class XMLStyleSheets
|
||||
include Base
|
||||
|
||||
include Enumerable
|
||||
extend Forwardable
|
||||
|
||||
def_delegators(:@xml_stylesheets, :<<, :[], :[]=, :first, :last)
|
||||
def_delegators(:@xml_stylesheets, :push, :pop, :shift, :unshift)
|
||||
def_delegators(:@xml_stylesheets, :each)
|
||||
|
||||
def initialize(maker)
|
||||
super
|
||||
@xml_stylesheets = []
|
||||
end
|
||||
def_array_element("xml_stylesheets")
|
||||
|
||||
def to_rss(rss)
|
||||
@xml_stylesheets.each do |xss|
|
||||
|
|
@ -217,12 +244,25 @@ module RSS
|
|||
class ChannelBase
|
||||
include Base
|
||||
|
||||
attr_reader :cloud
|
||||
%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::#{element[0,1].upcase}#{element[1..-1]}.new(@maker)
|
||||
end
|
||||
EOC
|
||||
end
|
||||
|
||||
%w(about title link description language copyright
|
||||
managingEditor webMaster rating docs skipDays
|
||||
skipHours date lastBuildDate category generator ttl
|
||||
).each do |element|
|
||||
managingEditor webMaster rating docs date
|
||||
lastBuildDate generator ttl).each do |element|
|
||||
attr_accessor element
|
||||
add_need_initialize_variable(element)
|
||||
end
|
||||
|
|
@ -230,18 +270,68 @@ module RSS
|
|||
alias_method(:pubDate, :date)
|
||||
alias_method(:pubDate=, :date=)
|
||||
|
||||
def initialize(maker)
|
||||
super
|
||||
@cloud = make_cloud
|
||||
end
|
||||
|
||||
def current_element(rss)
|
||||
rss.channel
|
||||
end
|
||||
|
||||
private
|
||||
def make_cloud
|
||||
self.class::Cloud.new(@maker)
|
||||
class SkipDaysBase
|
||||
include Base
|
||||
|
||||
def_array_element("days")
|
||||
|
||||
def new_day
|
||||
day = self.class::Day.new(@maker)
|
||||
@days << day
|
||||
day
|
||||
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
|
||||
hour
|
||||
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
|
||||
|
|
@ -257,6 +347,27 @@ module RSS
|
|||
end
|
||||
|
||||
end
|
||||
|
||||
class CategoriesBase
|
||||
include Base
|
||||
|
||||
def_array_element("categories")
|
||||
|
||||
def new_category
|
||||
category = self.class::Category.new(@maker)
|
||||
@categories << category
|
||||
category
|
||||
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
|
||||
|
|
@ -279,23 +390,18 @@ module RSS
|
|||
class ItemsBase
|
||||
include Base
|
||||
|
||||
include Enumerable
|
||||
extend Forwardable
|
||||
|
||||
def_delegators(:@items, :<<, :[], :[]=, :first, :last)
|
||||
def_delegators(:@items, :push, :pop, :shift, :unshift)
|
||||
def_delegators(:@items, :each)
|
||||
def_array_element("items")
|
||||
|
||||
attr_accessor :do_sort
|
||||
attr_accessor :do_sort, :max_size
|
||||
|
||||
def initialize(maker)
|
||||
super
|
||||
@items = []
|
||||
@do_sort = false
|
||||
@max_size = -1
|
||||
end
|
||||
|
||||
def normalize
|
||||
sort_if_need
|
||||
sort_if_need[0..@max_size]
|
||||
end
|
||||
|
||||
def current_element(rss)
|
||||
|
|
@ -326,9 +432,10 @@ module RSS
|
|||
class ItemBase
|
||||
include Base
|
||||
|
||||
%w(guid enclosure source category).each do |element|
|
||||
%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)
|
||||
|
|
@ -349,14 +456,6 @@ EOC
|
|||
alias_method(:pubDate, :date)
|
||||
alias_method(:pubDate=, :date=)
|
||||
|
||||
def initialize(maker)
|
||||
super
|
||||
@guid = make_guid
|
||||
@enclosure = make_enclosure
|
||||
@source = make_source
|
||||
@category = make_category
|
||||
end
|
||||
|
||||
def <=>(other)
|
||||
if @date and other.date
|
||||
@date <=> other.date
|
||||
|
|
@ -400,14 +499,7 @@ EOC
|
|||
end
|
||||
end
|
||||
|
||||
class CategoryBase
|
||||
include Base
|
||||
|
||||
%w(domain content).each do |element|
|
||||
attr_accessor element
|
||||
add_need_initialize_variable(element)
|
||||
end
|
||||
end
|
||||
CategoriesBase = ChannelBase::CategoriesBase
|
||||
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
require 'rss/trackback'
|
||||
require 'rss/maker/1.0'
|
||||
require 'rss/maker/2.0'
|
||||
|
||||
module RSS
|
||||
module Maker
|
||||
|
|
@ -7,18 +8,65 @@ module RSS
|
|||
def self.append_features(klass)
|
||||
super
|
||||
|
||||
%w(ping about).each do |element|
|
||||
name = "#{RSS::TRACKBACK_PREFIX}_#{element}"
|
||||
klass.add_need_initialize_variable(name)
|
||||
klass.add_other_element(name)
|
||||
klass.__send__(:attr_accessor, name)
|
||||
klass.module_eval(<<-EOC, __FILE__, __LINE__)
|
||||
def setup_#{name}(rss, current)
|
||||
if #{name} and current.respond_to?(:#{name}=)
|
||||
current.#{name} = @#{name} if @#{name}
|
||||
end
|
||||
name = "#{RSS::TRACKBACK_PREFIX}_ping"
|
||||
klass.add_need_initialize_variable(name)
|
||||
klass.add_other_element(name)
|
||||
klass.__send__(:attr_accessor, name)
|
||||
klass.module_eval(<<-EOC, __FILE__, __LINE__)
|
||||
def setup_#{name}(rss, current)
|
||||
if #{name} and current.respond_to?(:#{name}=)
|
||||
current.#{name} = #{name}
|
||||
end
|
||||
EOC
|
||||
end
|
||||
EOC
|
||||
|
||||
name = "#{RSS::TRACKBACK_PREFIX}_abouts"
|
||||
klass.add_need_initialize_variable(name, "make_#{name}")
|
||||
klass.add_other_element(name)
|
||||
klass.__send__(:attr_accessor, name)
|
||||
klass.module_eval(<<-EOC, __FILE__, __LINE__)
|
||||
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::About.new(@maker)
|
||||
@abouts << about
|
||||
about
|
||||
end
|
||||
|
||||
def to_rss(rss, current)
|
||||
@abouts.each do |about|
|
||||
about.to_rss(rss, current)
|
||||
end
|
||||
end
|
||||
|
||||
class AboutBase
|
||||
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
|
||||
|
|
@ -26,5 +74,53 @@ module RSS
|
|||
class ItemsBase
|
||||
class ItemBase; include TrackBackModel; end
|
||||
end
|
||||
|
||||
class RSS10
|
||||
class Items
|
||||
class Item
|
||||
class TrackBackAbouts < TrackBackAboutsBase
|
||||
class About < AboutBase
|
||||
def to_rss(rss, current)
|
||||
if resource
|
||||
about = ::RSS::TrackBackModel10::About.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 About < AboutBase
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class RSS20
|
||||
class Items
|
||||
class Item
|
||||
class TrackBackAbouts < TrackBackAboutsBase
|
||||
class About < AboutBase
|
||||
def to_rss(rss, current)
|
||||
if content
|
||||
about = ::RSS::TrackBackModel20::About.new(content)
|
||||
current.trackback_abouts << about
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue