diff options
author | kou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-11-19 08:25:25 +0000 |
---|---|---|
committer | kou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-11-19 08:25:25 +0000 |
commit | b0538cb6d79956cc3dc799910644e23729346383 (patch) | |
tree | 4a484468fdf164dca7059a0d0e6ea6155ecd5682 /lib/rss | |
parent | 0d7f3dd3fa0ab0bfeb74208da18379c82d370d62 (diff) | |
download | ruby-b0538cb6d79956cc3dc799910644e23729346383.tar.gz ruby-b0538cb6d79956cc3dc799910644e23729346383.tar.xz ruby-b0538cb6d79956cc3dc799910644e23729346383.zip |
* lib/rss/rss.rb (RSS::VERSION): 0.1.0 -> 0.1.1.
* lib/rss: #to_s used #tag.
* test/rss/test_to_s.rb: added.
* lib/rss/maker.rb (RSS::Maker.make): changed API. It's not
received modules which is used as the second argument.
* lib/rss/xml-stylesheet.rb (RSS::XMLStyleSheet#alternate):
changed return value type which is not String but Boolean.
* lib/rss/2.0.rb (RSS::Rss::Channel#ttl): changed return value
type which is not String but Integer.
* lib/rss/0.9.rb (RSS::Rss::Channel): <skipDays> has <day>s and
<skipHours> has <hour>s.
* lib/rss/maker/0.9.rb (RSS::Maker::RSS09::Channel): ditto.
* lib/rss/0.9.rb (RSS::Rss::Channel::Item): <item> has <category>s.
* lib/rss/maker/2.0.rb (RSS::Maker::Rss20::Channel::Item): ditto.
* lib/rss/2.0.rb (RSS::Rss::Channel): <channel> has <category>s.
* lib/rss/maker/2.0.rb (RSS::Maker::RSS20::Channel): ditto.
* lib/rss/trackback.rb: parent element has <trackback:about>s.
* lib/rss/maker/trackback.rb: ditto.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@7319 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rss')
-rw-r--r-- | lib/rss/0.9.rb | 302 | ||||
-rw-r--r-- | lib/rss/1.0.rb | 195 | ||||
-rw-r--r-- | lib/rss/2.0.rb | 55 | ||||
-rw-r--r-- | lib/rss/maker.rb | 14 | ||||
-rw-r--r-- | lib/rss/maker/0.9.rb | 68 | ||||
-rw-r--r-- | lib/rss/maker/1.0.rb | 31 | ||||
-rw-r--r-- | lib/rss/maker/2.0.rb | 69 | ||||
-rw-r--r-- | lib/rss/maker/base.rb | 173 | ||||
-rw-r--r-- | lib/rss/maker/trackback.rb | 118 | ||||
-rw-r--r-- | lib/rss/parser.rb | 7 | ||||
-rw-r--r-- | lib/rss/rexmlparser.rb | 2 | ||||
-rw-r--r-- | lib/rss/rss.rb | 148 | ||||
-rw-r--r-- | lib/rss/trackback.rb | 252 | ||||
-rw-r--r-- | lib/rss/xmlscanner.rb | 2 |
14 files changed, 927 insertions, 509 deletions
diff --git a/lib/rss/0.9.rb b/lib/rss/0.9.rb index c772e8087..20a229b92 100644 --- a/lib/rss/0.9.rb +++ b/lib/rss/0.9.rb @@ -60,17 +60,14 @@ module RSS end def to_s(convert=true, indent=calc_indent) - next_indent = indent + INDENT - rv = <<-EOR -#{xmldecl} -#{xml_stylesheet_pi} -#{indent}<rss version="#{@rss_version}"#{ns_declaration(next_indent)}> -#{channel_element(false, next_indent)} -#{other_element(false, next_indent)} -#{indent}</rss> -EOR + rv = tag(indent, ns_declarations) do |next_indent| + [ + channel_element(false, next_indent), + other_element(false, next_indent), + ] + end rv = @converter.convert(rv) if convert and @converter - remove_empty_newline(rv) + rv end private @@ -86,7 +83,7 @@ EOR def _attrs [ - ["version", true], + ["version", true, "rss_version"], ] end @@ -104,8 +101,6 @@ EOR ["webMaster", "?"], ["rating", "?"], ["docs", "?"], - ["skipDays", "?"], - ["skipHours", "?"], ].each do |x, occurs| install_text_element(x) install_model(x, occurs) @@ -120,6 +115,8 @@ EOR end [ + ["skipDays", "?"], + ["skipHours", "?"], ["image", nil], ["textInput", "?"], ].each do |x, occurs| @@ -146,35 +143,35 @@ EOR end def to_s(convert=true, indent=calc_indent) - next_indent = indent + INDENT - rv = <<-EOT -#{indent}<channel> -#{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)} -#{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)} -#{indent}</channel> -EOT + 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 = @converter.convert(rv) if convert and @converter rv end private def children - [@image, @textInput, @cloud, *@item] + [@skipDays, @skipHours, @image, @textInput, @cloud, *@item] end def _tags @@ -206,6 +203,101 @@ EOT rv end + class SkipDays < Element + include RSS09 + + [ + ["day", "*"] + ].each do |x, occurs| + install_have_children_element(x) + install_model(x, occurs) + end + + def to_s(convert=true, indent=calc_indent) + rv = tag(indent) do |next_indent| + [ + day_elements(false, next_indent) + ] + end + rv = @converter.convert(rv) if convert and @converter + rv + end + + private + def children + @day + end + + def _tags + @day.compact.collect do + [nil, "day"] + end + end + + class Day < Element + include RSS09 + + content_setup + + def initialize(content=nil) + super() + @content = content + end + + end + + end + + class SkipHours < Element + include RSS09 + + [ + ["hour", "*"] + ].each do |x, occurs| + install_have_children_element(x) + install_model(x, occurs) + end + + def to_s(convert=true, indent=calc_indent) + rv = tag(indent) do |next_indent| + [ + hour_elements(false, next_indent) + ] + end + rv = @converter.convert(rv) if convert and @converter + rv + end + + private + def children + @hour + end + + def _tags + @hour.compact.collect do + [nil, "hour"] + end + end + + class Hour < Element + include RSS09 + + content_setup + + def initialize(content=nil) + super() + @content = content + end + + undef :content= + def content=(value) + @content = value.to_i + end + + end + + end + class Image < Element include RSS09 @@ -220,18 +312,17 @@ EOT end def to_s(convert=true, indent=calc_indent) - next_indent = indent + INDENT - rv = <<-EOT -#{indent}<image> -#{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)} -#{indent}</image> -EOT + 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), + ] + end rv = @converter.convert(rv) if convert and @converter rv end @@ -245,7 +336,7 @@ EOT end end end - + class Cloud < Element include RSS09 @@ -270,16 +361,8 @@ EOT end def to_s(convert=true, indent=calc_indent) - next_indent = indent + INDENT - rv = <<-EOT -#{indent}<cloud -#{next_indent}domain="#{h @domain}" -#{next_indent}port="#{h @port}" -#{next_indent}path="#{h @path}" -#{next_indent}registerProcedure="#{h @registerProcedure}" -#{next_indent}protocol="#{h @protocol}"/> -EOT - rv = @converter.convert(rv) if convert and @converter + rv = tag(indent) + rv = @converter.convert(rv) if convert and @converter rv end @@ -300,15 +383,21 @@ EOT install_text_element(x) end - %w(category source enclosure).each do |x| + %w(source enclosure).each do |x| install_have_child_element(x) end [ + %w(category categories), + ].each do |name, plural_name| + install_have_children_element(name, plural_name) + end + + [ ["title", '?'], ["link", '?'], ["description", '?'], - ["category", '?'], + ["category", '*'], ["source", '?'], ["enclosure", '?'], ].each do |tag, occurs| @@ -316,34 +405,39 @@ EOT end def to_s(convert=true, indent=calc_indent) - next_indent = indent + INDENT - rv = <<-EOT -#{indent}<item> -#{title_element(false, next_indent)} -#{link_element(false, next_indent)} -#{description_element(false, next_indent)} -#{category_element(false, next_indent)} -#{source_element(false, next_indent)} -#{enclosure_element(false, next_indent)} -#{other_element(false, next_indent)} -#{indent}</item> -EOT - rv = @converter.convert(rv) if convert and @converter + 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 = @converter.convert(rv) if convert and @converter rv end private def children - [@category, @source, @enclosure,].compact + [@source, @enclosure, *@category].compact end def _tags - %w(title link description author comments category + rv = %w(title link description author comments source enclosure).delete_if do |x| send(x).nil? end.collect do |x| [nil, x] end + + @category.each do + rv << [nil, "category"] + end + + rv end class Source < Element @@ -364,17 +458,6 @@ EOT @content = content end - def to_s(convert=true, indent=calc_indent) - 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 _tags [] @@ -408,14 +491,9 @@ EOT end def to_s(convert=true, indent=calc_indent) - 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 + rv = tag(indent) + rv = @converter.convert(rv) if convert and @converter + rv end private @@ -447,17 +525,6 @@ EOT @content = content end - def to_s(convert=true, indent=calc_indent) - 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 [ @@ -470,7 +537,7 @@ EOT end class TextInput < Element - + include RSS09 %w(title description name link).each do |x| @@ -479,17 +546,16 @@ EOT end def to_s(convert=true, indent=calc_indent) - next_indent = indent + INDENT - rv = <<-EOT -#{indent}<textInput> -#{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)} -#{indent}</textInput> -EOT - rv = @converter.convert(rv) if convert and @converter + 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), + ] + end + rv = @converter.convert(rv) if convert and @converter rv end diff --git a/lib/rss/1.0.rb b/lib/rss/1.0.rb index 563ed6642..9a61e456b 100644 --- a/lib/rss/1.0.rb +++ b/lib/rss/1.0.rb @@ -18,7 +18,6 @@ module RSS include RSS10 include RootElementMixin - include XMLStyleSheetMixin class << self @@ -57,21 +56,22 @@ module RSS super('1.0', version, encoding, standalone) end + def full_name + tag_name_with_prefix(PREFIX) + end + def to_s(convert=true, indent=calc_indent) - next_indent = indent + INDENT - rv = <<-EORDF -#{xmldecl} -#{xml_stylesheet_pi} -#{indent}<#{PREFIX}:RDF#{ns_declaration(next_indent)}> -#{channel_element(false, next_indent)} -#{image_element(false, next_indent)} -#{item_elements(false, next_indent)} -#{textinput_element(false, next_indent)} -#{other_element(false, next_indent)} -#{indent}</#{PREFIX}:RDF> -EORDF + rv = tag(indent, ns_declarations) do |next_indent| + [ + channel_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 = @converter.convert(rv) if convert and @converter - remove_empty_newline(rv) + rv end private @@ -119,16 +119,19 @@ EORDF end def to_s(convert=true, indent=calc_indent) - next_indent = indent + INDENT - <<-EOT -#{indent}<#{PREFIX}:Seq> -#{li_elements(convert, next_indent)} -#{other_element(convert, next_indent)} -#{indent}</#{PREFIX}:Seq> -EOT + tag(indent) do |next_indent| + [ + li_elements(convert, next_indent), + other_element(convert, next_indent), + ] + end end - private + def full_name + tag_name_with_prefix(PREFIX) + end + + private def children @li end @@ -169,15 +172,15 @@ EOT super() @resource = resource end + + def full_name + tag_name_with_prefix(PREFIX) + end def to_s(convert=true, indent=calc_indent) - if @resource - rv = %Q!#{indent}<#{PREFIX}:li resource="#{h @resource}" />\n! - rv = @converter.convert(rv) if convert and @converter - rv - else - '' - end + rv = tag(indent) + rv = @converter.convert(rv) if convert and @converter + rv end private @@ -232,20 +235,17 @@ EOT end def to_s(convert=true, indent=calc_indent) - next_indent = indent + INDENT - about = '' - about << %Q!#{PREFIX}:about="#{h @about}"! if @about - rv = <<-EOT -#{indent}<channel #{about}> -#{title_element(false, next_indent)} -#{link_element(false, next_indent)} -#{description_element(false, next_indent)} -#{image_element(false, next_indent)} -#{items_element(false, next_indent)} -#{textinput_element(false, next_indent)} -#{other_element(false, next_indent)} -#{indent}</channel> -EOT + rv = tag(indent) do |next_indent| + [ + title_element(false, next_indent), + link_element(false, next_indent), + description_element(false, next_indent), + image_element(false, next_indent), + items_element(false, next_indent), + textinput_element(false, next_indent), + other_element(false, next_indent), + ] + end rv = @converter.convert(rv) if convert and @converter rv end @@ -270,7 +270,7 @@ EOT def _attrs [ - ["about", true] + ["#{PREFIX}:about", true, "about"] ] end @@ -298,22 +298,17 @@ EOT end def to_s(convert=true, indent=calc_indent) - if @resource - rv = %Q!#{indent}<image #{PREFIX}:resource="#{h @resource}" />! - rv = @converter.convert(rv) if convert and @converter - rv - else - '' - end + rv = tag(indent) + rv = @converter.convert(rv) if convert and @converter + rv end private def _attrs [ - ["resource", true] + ["#{PREFIX}:resource", true, "resource"] ] end - end class Textinput < Element @@ -340,22 +335,17 @@ EOT end def to_s(convert=true, indent=calc_indent) - if @resource - rv = %Q|#{indent}<textinput #{PREFIX}:resource="#{h @resource}" />| - rv = @converter.convert(rv) if convert and @converter - rv - else - '' - end + rv = tag(indent) + rv = @converter.convert(rv) if convert and @converter + rv end private def _attrs [ - ["resource", true], + ["#{PREFIX}:resource", true, "resource"] ] end - end class Items < Element @@ -387,13 +377,12 @@ EOT end def to_s(convert=true, indent=calc_indent) - next_indent = indent + INDENT - <<-EOT -#{indent}<items> -#{Seq_element(convert, next_indent)} -#{other_element(convert, next_indent)} -#{indent}</items> -EOT + rv = tag(indent) do |next_indent| + [ + Seq_element(convert, next_indent), + other_element(convert, next_indent), + ] + end end private @@ -452,17 +441,14 @@ EOT end def to_s(convert=true, indent=calc_indent) - next_indent = indent + INDENT - about = '' - about << %Q!#{PREFIX}:about="#{h @about}"! if @about - rv = <<-EOT -#{indent}<image #{about}> -#{title_element(false, next_indent)} -#{url_element(false, next_indent)} -#{link_element(false, next_indent)} -#{other_element(false, next_indent)} -#{indent}</image> -EOT + rv = tag(indent) do |next_indent| + [ + title_element(false, next_indent), + url_element(false, next_indent), + link_element(false, next_indent), + other_element(false, next_indent), + ] + end rv = @converter.convert(rv) if convert and @converter rv end @@ -480,10 +466,9 @@ EOT def _attrs [ - ["about", true], + ["#{PREFIX}:about", true, "about"] ] end - end class Item < Element @@ -522,17 +507,14 @@ EOT end def to_s(convert=true, indent=calc_indent) - next_indent = indent + INDENT - about = '' - about << %Q!#{PREFIX}:about="#{h @about}"! if @about - rv = <<-EOT -#{indent}<item #{about}> -#{title_element(false, next_indent)} -#{link_element(false, next_indent)} -#{description_element(false, next_indent)} -#{other_element(false, next_indent)} -#{indent}</item> -EOT + rv = tag(indent) do |next_indent| + [ + title_element(false, next_indent), + link_element(false, next_indent), + description_element(false, next_indent), + other_element(false, next_indent), + ] + end rv = @converter.convert(rv) if convert and @converter rv end @@ -550,10 +532,9 @@ EOT def _attrs [ - ["about", true], + ["#{PREFIX}:about", true, "about"] ] end - end class Textinput < Element @@ -593,18 +574,15 @@ EOT end def to_s(convert=true, indent=calc_indent) - next_indent = indent + INDENT - about = '' - about << %Q!#{PREFIX}:about="#{h @about}"! if @about - rv = <<-EOT -#{indent}<textinput #{about}> -#{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)} -#{indent}</textinput> -EOT + 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), + ] + end rv = @converter.convert(rv) if convert and @converter rv end @@ -623,10 +601,9 @@ EOT def _attrs [ - ["about", true], + ["#{PREFIX}:about", true, "about"] ] end - end end diff --git a/lib/rss/2.0.rb b/lib/rss/2.0.rb index 7fafb23ba..0a2d86860 100644 --- a/lib/rss/2.0.rb +++ b/lib/rss/2.0.rb @@ -11,11 +11,18 @@ module RSS install_model(x, '?') end - %w(category).each do |x| - install_have_child_element(x) - install_model(x, '?') + undef :ttl= + def ttl=(value) + @ttl = value.to_i end - + + [ + %w(category categories), + ].each do |name, plural_name| + install_have_children_element(name, plural_name) + install_model(name, '*') + end + [ ["image", "?"], ["language", "?"], @@ -25,7 +32,7 @@ module RSS def other_element(convert, indent) rv = <<-EOT -#{category_element(convert, indent)} +#{category_elements(convert, indent)} #{generator_element(convert, indent)} #{ttl_element(convert, indent)} EOT @@ -35,16 +42,22 @@ EOT private alias children09 children def children - children09 + [@category].compact + children09 + @category.compact end alias _tags09 _tags def _tags - %w(generator ttl category).delete_if do |x| + rv = %w(generator ttl).delete_if do |x| send(x).nil? end.collect do |elem| [nil, elem] end + _tags09 + + @category.each do + rv << [nil, "category"] + end + + rv end Category = Item::Category @@ -74,13 +87,15 @@ EOT end def other_element(convert, indent) - rv = <<-EOT -#{author_element(false, indent)} -#{comments_element(false, indent)} -#{pubDate_element(false, indent)} -#{guid_element(false, indent)} -EOT - rv << super + rv = [ + super, + *%w(author comments pubDate guid).collect do |name| + __send__("#{name}_element", false, indent) + end + ].reject do |value| + /\A\s*\z/.match(value) + end + rv.join("\n") end private @@ -116,18 +131,6 @@ EOT @content = content end - def to_s(convert=true, indent=calc_indent) - if @content - rv = %Q!<guid! - rv << %Q! isPermaLink="#{h @isPermaLink}"! if @isPermaLink - rv << %Q!>#{h @content}</guid>! - rv = @converter.convert(rv) if convert and @converter - rv - else - '' - end - end - private def _attrs [ diff --git a/lib/rss/maker.rb b/lib/rss/maker.rb index c158c726c..66c3bc292 100644 --- a/lib/rss/maker.rb +++ b/lib/rss/maker.rb @@ -7,12 +7,7 @@ module RSS MAKERS = {} class << self - def make(version, modules=[], &block) - prefix = "rss/maker" - require "#{prefix}/#{version}" - modules.each do |mod| - require "#{prefix}/#{mod}" - end + def make(version, &block) maker(version).make(&block) end @@ -31,3 +26,10 @@ module RSS end end + +require "rss/maker/1.0" +require "rss/maker/2.0" +require "rss/maker/content" +require "rss/maker/dublincore" +require "rss/maker/syndication" +require "rss/maker/trackback" diff --git a/lib/rss/maker/0.9.rb b/lib/rss/maker/0.9.rb index 05578082b..6f26e20f4 100644 --- a/lib/rss/maker/0.9.rb +++ b/lib/rss/maker/0.9.rb @@ -69,9 +69,72 @@ module RSS super + ["pubDate"] 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 +193,12 @@ module RSS end end - class Category < CategoryBase + class Categories < CategoriesBase def to_rss(*args) end + + class Category < CategoryBase + end end end diff --git a/lib/rss/maker/1.0.rb b/lib/rss/maker/1.0.rb index 894bcc0a2..ae22eb4fc 100644 --- a/lib/rss/maker/1.0.rb +++ b/lib/rss/maker/1.0.rb @@ -86,7 +86,33 @@ module RSS end 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 +179,12 @@ module RSS end end - class Category < CategoryBase + class Categories < CategoriesBase def to_rss(*args) end + + class Category < CategoryBase + end end end end diff --git a/lib/rss/maker/2.0.rb b/lib/rss/maker/2.0.rb index 05fc46480..8ac5e7bbb 100644 --- a/lib/rss/maker/2.0.rb +++ b/lib/rss/maker/2.0.rb @@ -13,23 +13,26 @@ 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) + 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 +42,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.category = category + setup_other_elements(rss) + end + end + + def have_required_values? + @content + end + end + end + end class Image < RSS09::Image @@ -102,18 +129,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.category = category + setup_other_elements(rss) + end + end + + def have_required_values? + @content + end end end end diff --git a/lib/rss/maker/base.rb b/lib/rss/maker/base.rb index 21222351f..91eb072ec 100644 --- a/lib/rss/maker/base.rb +++ b/lib/rss/maker/base.rb @@ -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,11 @@ 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 end @@ -159,17 +174,7 @@ module RSS 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 +222,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 +248,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 +325,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,18 +368,12 @@ 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 def initialize(maker) super - @items = [] @do_sort = false end @@ -326,9 +409,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 +433,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 +476,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 diff --git a/lib/rss/maker/trackback.rb b/lib/rss/maker/trackback.rb index 1ec59ab0b..ef78bf2f2 100644 --- a/lib/rss/maker/trackback.rb +++ b/lib/rss/maker/trackback.rb @@ -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 diff --git a/lib/rss/parser.rb b/lib/rss/parser.rb index 09b321337..e1da24418 100644 --- a/lib/rss/parser.rb +++ b/lib/rss/parser.rb @@ -348,6 +348,13 @@ module RSS end if @do_validate and required and val.nil? + unless a_uri.include?(nil) + for prefix, uri in ns + if a_uri.include?(uri) + a_name = "#{prefix}:#{a_name}" + end + end + end raise MissingAttributeError.new(tag_name, a_name) end diff --git a/lib/rss/rexmlparser.rb b/lib/rss/rexmlparser.rb index 375b7794f..73e352a73 100644 --- a/lib/rss/rexmlparser.rb +++ b/lib/rss/rexmlparser.rb @@ -36,7 +36,7 @@ module RSS include ListenerMixin def xmldecl(version, encoding, standalone) - super + super(version, encoding, standalone == "yes") # Encoding is converted to UTF-8 when REXML parse XML. @encoding = 'UTF-8' end diff --git a/lib/rss/rss.rb b/lib/rss/rss.rb index b6afa24b9..a63bee8a6 100644 --- a/lib/rss/rss.rb +++ b/lib/rss/rss.rb @@ -58,7 +58,7 @@ require "rss/xml-stylesheet" module RSS - VERSION = "0.1.0" + VERSION = "0.1.1" URI = "http://purl.org/rss/1.0/" @@ -164,17 +164,17 @@ EOC end alias_method(:install_have_attribute_element, :install_have_child_element) - def install_have_children_element(name, postfix="s") + def install_have_children_element(name, plural_name=nil) add_have_children_element(name) - def_children_accessor(name, postfix) - install_element(name, postfix) do |n, elem_name| + def_children_accessor(name, plural_name) + install_element(name, "s") do |n, elem_name| <<-EOC - rv = '' + rv = [] @#{n}.each do |x| rv << "\#{x.to_s(convert, indent)}" end - rv + rv.join("\n") EOC end end @@ -289,9 +289,10 @@ EOC end end - def def_children_accessor(accessor_name, postfix="s") + def def_children_accessor(accessor_name, plural_name=nil) + plural_name ||= "#{accessor_name}s" module_eval(<<-EOC, *get_file_and_line_from_caller(2)) - def #{accessor_name}#{postfix} + def #{plural_name} @#{accessor_name} end @@ -314,6 +315,22 @@ EOC EOC end + def def_content_only_to_s + module_eval(<<-EOC, *get_file_and_line_from_caller(2)) + def to_s(convert=true, indent=calc_indent) + if @content + rv = tag(indent) do |next_indent| + h(@content) + end + rv = @converter.convert(rv) if convert and @converter + rv + else + "" + end + end +EOC + end + end class Element @@ -329,7 +346,8 @@ EOC klass.module_eval(<<-EOC) public - @tag_name = name.split(/::/).last.downcase + @tag_name = name.split(/::/).last + @tag_name[0,1] = @tag_name[0,1].downcase @indent_size = name.split(/::/).size - 2 @@must_call_validators = {} @@ -373,6 +391,7 @@ EOC def self.content_setup attr_writer :content convert_attr_reader :content + def_content_only_to_s @@have_content = true end @@ -440,6 +459,14 @@ EOC self.class.tag_name end + def full_name + tag_name + end + + def indent_size + self.class.indent_size + end + def converter=(converter) @converter = converter children.each do |child| @@ -472,6 +499,66 @@ EOC end end + def tag(indent, additional_attrs=[]) + next_indent = indent + INDENT + + attrs = collect_attrs + return "" if attrs.nil? + + attrs += additional_attrs + start_tag = make_start_tag(indent, next_indent, attrs) + + if block_given? + content = yield(next_indent) + else + content = [] + end + + if content.is_a?(String) + content = [content] + start_tag << ">" + end_tag = "</#{full_name}>" + else + content = content.reject{|x| x.empty?} + if content.empty? + end_tag = "/>" + else + start_tag << ">\n" + end_tag = "\n#{indent}</#{full_name}>" + end + end + + start_tag + content.join("\n") + end_tag + end + + def make_start_tag(indent, next_indent, attrs) + start_tag = ["#{indent}<#{full_name}"] + unless attrs.empty? + start_tag << attrs.collect do |key, value| + %Q[#{h key}="#{h value}"] + end.join("\n#{next_indent}") + end + start_tag.join(" ") + end + + def collect_attrs + _attrs.collect do |name, required, alias_name| + value = __send__(alias_name || name) + return nil if required and value.nil? + [name, value] + end.reject do |name, value| + value.nil? + end + end + + def tag_name_with_prefix(prefix) + "#{prefix}:#{tag_name}" + end + + def calc_indent + INDENT * (self.class.indent_size) + end + # not String class children. def children [] @@ -507,23 +594,23 @@ EOC end def validate_attribute - _attrs.each do |a_name, required| - if required and send(a_name).nil? - raise MissingAttributeError.new(self.class.tag_name, a_name) + _attrs.each do |a_name, required, alias_name| + if required and __send__(alias_name || a_name).nil? + raise MissingAttributeError.new(tag_name, a_name) end end end def other_element(convert, indent='') - rv = '' + rv = [] private_methods.each do |meth| if /\A([^_]+)_[^_]+_elements?\z/ =~ meth and self.class::NSPOOL.has_key?($1) - res = send(meth, convert) - rv << "#{indent}#{res}\n" if /\A\s*\z/ !~ res + res = __send__(meth, convert) + rv << "#{indent}#{res}" if /\A\s*\z/ !~ res end end - rv + rv.join("\n") end def _validate(tags, model=self.class.model) @@ -626,19 +713,12 @@ EOC rv end - private - def calc_indent - INDENT * (self.class.indent_size) - end - - def remove_empty_newline(string) - string.gsub(/^\s*$(?:\r?\n?)/, '') - end - end module RootElementMixin + include XMLStyleSheetMixin + attr_reader :output_encoding def initialize(rss_version, version=nil, encoding=nil, standalone=nil) @@ -656,23 +736,27 @@ EOC end private + def tag(indent, attrs) + rv = xmldecl + xml_stylesheet_pi + rv << super + rv + end + def xmldecl rv = %Q[<?xml version="#{@version}"] if @output_encoding or @encoding rv << %Q[ encoding="#{@output_encoding or @encoding}"] end - rv << %Q[ standalone="#{@standalone}"] if @standalone - rv << '?>' + rv << %Q[ standalone="yes"] if @standalone + rv << "?>\n" rv end - def ns_declaration(indent) - rv = '' - self.class::NSPOOL.each do |prefix, uri| + def ns_declarations + self.class::NSPOOL.collect do |prefix, uri| prefix = ":#{prefix}" unless prefix.empty? - rv << %Q|\n#{indent}xmlns#{prefix}="#{html_escape(uri)}"| + ["xmlns#{prefix}", uri] end - rv end end diff --git a/lib/rss/trackback.rb b/lib/rss/trackback.rb index e276305ec..5cbf65240 100644 --- a/lib/rss/trackback.rb +++ b/lib/rss/trackback.rb @@ -9,7 +9,16 @@ module RSS RDF.install_ns(TRACKBACK_PREFIX, TRACKBACK_URI) Rss.install_ns(TRACKBACK_PREFIX, TRACKBACK_URI) - module BaseTrackBackModel + module TrackBackUtils + private + def new_with_value_if_need(klass, value) + if value.is_a?(klass) + value + else + klass.new(value) + end + end + def trackback_validate(tags) counter = {} %w(ping about).each do |x| @@ -31,24 +40,78 @@ module RSS end end end - - module TrackBackModel10 - extend BaseModel - include BaseTrackBackModel - - def self.append_features(klass) + + module BaseTrackBackModel + def append_features(klass) super unless klass.class == Module + klass.__send__(:include, TrackBackUtils) + %w(ping).each do |x| - klass.install_have_child_element("#{TRACKBACK_PREFIX}_#{x}") + var_name = "#{TRACKBACK_PREFIX}_#{x}" + klass_name = x.capitalize + klass.install_have_child_element(var_name) + klass.module_eval(<<-EOC, __FILE__, __LINE__) + undef #{var_name} + def #{var_name} + @#{var_name} and @#{var_name}.value + end + + undef #{var_name}= + def #{var_name}=(value) + @#{var_name} = new_with_value_if_need(#{klass_name}, value) + end + EOC end - %w(about).each do |x| - klass.install_have_children_element("#{TRACKBACK_PREFIX}_#{x}") + [%w(about s)].each do |x, postfix| + var_name = "#{TRACKBACK_PREFIX}_#{x}" + klass_name = x.capitalize + klass.install_have_children_element(var_name) + klass.module_eval(<<-EOC, __FILE__, __LINE__) + undef #{var_name} + def #{var_name}(*args) + if args.empty? + @#{var_name}.first and @#{var_name}.first.value + else + ret = @#{var_name}.send("[]", *args) + if ret.is_a?(Array) + ret.collect {|x| x.value} + else + ret.value + end + end + end + + undef #{var_name}= + undef set_#{var_name} + def #{var_name}=(*args) + if args.size == 1 + item = new_with_value_if_need(#{klass_name}, args[0]) + @#{var_name}.push(item) + else + new_val = args.last + if new_val.is_a?(Array) + new_val = new_value.collect do |val| + new_with_value_if_need(#{klass_name}, val) + end + else + new_val = new_with_value_if_need(#{klass_name}, new_val) + end + @#{var_name}.send("[]=", *(args[0..-2] + [new_val])) + end + end + alias set_#{var_name} #{var_name}= + EOC end end end + end + + module TrackBackModel10 + extend BaseModel + extend BaseTrackBackModel class Ping < Element include RSS10 @@ -71,26 +134,28 @@ module RSS install_get_attribute(name, uri, required) end + alias_method(:value, :resource) + alias_method(:value=, :resource=) + def initialize(resource=nil) super() @resource = resource end + def full_name + tag_name_with_prefix(TRACKBACK_PREFIX) + end + def to_s(convert=true, indent=calc_indent) - if @resource - rv = %Q[#{indent}<#{TRACKBACK_PREFIX}:ping ] - rv << %Q[#{::RSS::RDF::PREFIX}:resource="#{h @resource}"/>] - rv = @converter.convert(rv) if convert and @converter - rv - else - '' - end + rv = tag(indent) + rv = @converter.convert(rv) if convert and @converter + rv end private def _attrs [ - ["resource", true], + ["#{::RSS::RDF::PREFIX}:resource", true, "resource"], ] end @@ -117,26 +182,28 @@ module RSS install_get_attribute(name, uri, required) end + alias_method(:value, :resource) + alias_method(:value=, :resource=) + def initialize(resource=nil) super() @resource = resource end + def full_name + tag_name_with_prefix(TRACKBACK_PREFIX) + end + def to_s(convert=true, indent=calc_indent) - if @resource - rv = %Q[#{indent}<#{TRACKBACK_PREFIX}:about ] - rv << %Q[#{::RSS::RDF::PREFIX}:resource="#{h @resource}"/>] - rv = @converter.convert(rv) if convert and @converter - rv - else - '' - end + rv = tag(indent) + rv = @converter.convert(rv) if convert and @converter + rv end private def _attrs [ - ["resource", true], + ["#{::RSS::RDF::PREFIX}:resource", true, "resource"], ] end @@ -144,91 +211,8 @@ module RSS end module TrackBackModel20 - include BaseTrackBackModel extend BaseModel - - def self.append_features(klass) - super - - unless klass.class == Module - %w(ping).each do |x| - var_name = "#{TRACKBACK_PREFIX}_#{x}" - klass.install_have_child_element(var_name) - klass.module_eval(<<-EOC) - alias _#{var_name} #{var_name} - def #{var_name} - @#{var_name} and @#{var_name}.content - end - - alias _#{var_name}= #{var_name}= - def #{var_name}=(content) - @#{var_name} = new_with_content_if_need(#{x.capitalize}, content) - end - EOC - end - - [%w(about s)].each do |x, postfix| - var_name = "#{TRACKBACK_PREFIX}_#{x}" - klass.install_have_children_element(var_name) - klass.module_eval(<<-EOC) - alias _#{var_name}#{postfix} #{var_name}#{postfix} - def #{var_name}#{postfix} - @#{var_name}.collect {|x| x.content} - end - - alias _#{var_name} #{var_name} - def #{var_name}(*args) - if args.empty? - @#{var_name}.first and @#{var_name}.first.content - else - ret = @#{var_name}.send("[]", *args) - if ret.is_a?(Array) - ret.collect {|x| x.content} - else - ret.content - end - end - end - - alias _#{var_name}= #{var_name}= - alias _set_#{var_name} set_#{var_name} - def #{var_name}=(*args) - if args.size == 1 - item = new_with_content_if_need(#{x.capitalize}, args[0]) - @#{var_name}.push(item) - else - new_val = args.last - if new_val.is_a?(Array) - new_val = new_value.collect do |val| - new_with_content_if_need(#{x.capitalize}, val) - end - else - new_val = new_with_content_if_need(#{x.capitalize}, new_val) - end - @#{var_name}.send("[]=", *(args[0..-2] + [new_val])) - end - end - alias set_#{var_name} #{var_name}= - EOC - end - end - end - - private - def new_with_content(klass, content) - obj = klass.new - obj.content = content - obj - end - - def new_with_content_if_need(klass, content) - if content.is_a?(klass) - content - else - new_with_content(klass, content) - end - end - + extend BaseTrackBackModel class Ping < Element include RSS09 @@ -247,18 +231,18 @@ module RSS end - def to_s(convert=true, indent=calc_indent) - if @content - rv = %Q[#{indent}<#{TRACKBACK_PREFIX}:ping>] - rv << h(@content) - rv << %Q[</#{TRACKBACK_PREFIX}:ping>] - rv = @converter.convert(rv) if convert and @converter - rv - else - '' - end - end + alias_method(:value, :content) + alias_method(:value=, :content=) + def initialize(content=nil) + super() + @content = content + end + + def full_name + tag_name_with_prefix(TRACKBACK_PREFIX) + end + end class About < Element @@ -277,19 +261,19 @@ module RSS end end + + alias_method(:value, :content) + alias_method(:value=, :content=) + + def initialize(content=nil) + super() + @content = content + end - def to_s(convert=true, indent=calc_indent) - if @content - rv = %Q[#{indent}<#{TRACKBACK_PREFIX}:about>] - rv << h(@content) - rv << %Q[</#{TRACKBACK_PREFIX}:about>] - rv = @converter.convert(rv) if convert and @converter - rv - else - '' - end + def full_name + tag_name_with_prefix(TRACKBACK_PREFIX) end - + end end diff --git a/lib/rss/xmlscanner.rb b/lib/rss/xmlscanner.rb index 472ca9352..c5a11bad1 100644 --- a/lib/rss/xmlscanner.rb +++ b/lib/rss/xmlscanner.rb @@ -45,7 +45,7 @@ module RSS end def on_xmldecl_end - xmldecl(@version, @encoding, @standalone) + xmldecl(@version, @encoding, @standalone == "yes") end alias_method(:on_pi, :instruction) |