diff options
author | kou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-12-08 12:58:36 +0000 |
---|---|---|
committer | kou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-12-08 12:58:36 +0000 |
commit | bcf72db844b54492aca33b068711992bd73caccf (patch) | |
tree | a54da3329420c04614c460c3b45388951a790aa2 /lib/rss/trackback.rb | |
parent | 67c5b057e692b39c801aea811c6b75b40c4b8c22 (diff) |
* 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
Diffstat (limited to 'lib/rss/trackback.rb')
-rw-r--r-- | lib/rss/trackback.rb | 260 |
1 files changed, 126 insertions, 134 deletions
diff --git a/lib/rss/trackback.rb b/lib/rss/trackback.rb index e276305ec1..8bc1ee5ad5 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__) + remove_method :#{var_name} + def #{var_name} + @#{var_name} and @#{var_name}.value + end + + remove_method :#{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 |name, postfix| + var_name = "#{TRACKBACK_PREFIX}_#{name}" + klass_name = name.capitalize + klass.install_have_children_element(var_name) + klass.module_eval(<<-EOC, __FILE__, __LINE__) + remove_method :#{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 + + remove_method :#{var_name}= + remove_method :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,118 +182,45 @@ 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 - end - 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 + def maker_target(abouts) + abouts.new_about 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) + def setup_maker_attributes(about) + about.resource = self.resource end + end + end + module TrackBackModel20 + extend BaseModel + extend BaseTrackBackModel class Ping < Element include RSS09 @@ -247,18 +239,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 +269,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 |