aboutsummaryrefslogtreecommitdiffstats
path: root/lib/rss/trackback.rb
diff options
context:
space:
mode:
authorkou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-02-13 11:02:03 +0000
committerkou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-02-13 11:02:03 +0000
commitc0306157d9dbb12447ba5288b8a2db73b2beef11 (patch)
tree7c900356e107f5a66c051a535e9dfab8b103eca8 /lib/rss/trackback.rb
parent82482f67e25e8239d17a0ee9d209dca3c6fbb2f9 (diff)
downloadruby-c0306157d9dbb12447ba5288b8a2db73b2beef11.tar.gz
* test/rss/test_trackback.rb: added tests for TrackBack with RSS
2.0. * test/rss/common.rb: added methods make RSS 2.0. * lib/rss/trackback.rb: TrackBack API is decided. * lib/rss/rss.rb: RSS::VERSION 0.0.7 -> 0.0.8 * lib/rss/parser.rb, lib/rss/rss.rb: replaced $DEBUG by RSS::DEBUG. * lib/rss/2.0.rb: removed RSS 2.0 URI. Because RSS 2.0 doesn't have URI. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5691 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rss/trackback.rb')
-rw-r--r--lib/rss/trackback.rb78
1 files changed, 72 insertions, 6 deletions
diff --git a/lib/rss/trackback.rb b/lib/rss/trackback.rb
index 5c7ca777bd..493e742453 100644
--- a/lib/rss/trackback.rb
+++ b/lib/rss/trackback.rb
@@ -1,6 +1,3 @@
-# ATTENSION:
-# TrackBack handling API MUST be CHANGED!!!!
-
require 'rss/1.0'
require 'rss/2.0'
@@ -154,13 +151,82 @@ module RSS
unless klass.class == Module
%w(ping).each do |x|
- klass.install_have_child_element("#{TRACKBACK_PREFIX}_#{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).each do |x|
- klass.install_have_children_element("#{TRACKBACK_PREFIX}_#{x}")
+ [%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
+
+ 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
+
end
class Ping < Element