From 9be1ed43c888249563f32a3df394a9841e4f9601 Mon Sep 17 00:00:00 2001 From: kou Date: Fri, 19 Nov 2004 08:25:25 +0000 Subject: * 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): has s and has s. * lib/rss/maker/0.9.rb (RSS::Maker::RSS09::Channel): ditto. * lib/rss/0.9.rb (RSS::Rss::Channel::Item): has s. * lib/rss/maker/2.0.rb (RSS::Maker::Rss20::Channel::Item): ditto. * lib/rss/2.0.rb (RSS::Rss::Channel): has s. * lib/rss/maker/2.0.rb (RSS::Maker::RSS20::Channel): ditto. * lib/rss/trackback.rb: parent element has s. * lib/rss/maker/trackback.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7319 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/rss/trackback.rb | 252 ++++++++++++++++++++++++--------------------------- 1 file changed, 118 insertions(+), 134 deletions(-) (limited to 'lib/rss/trackback.rb') diff --git a/lib/rss/trackback.rb b/lib/rss/trackback.rb index e276305ec1..5cbf652406 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[] - 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[] - rv = @converter.convert(rv) if convert and @converter - rv - else - '' - end + def full_name + tag_name_with_prefix(TRACKBACK_PREFIX) end - + end end -- cgit v1.2.3