summaryrefslogtreecommitdiff
path: root/lib/rss/trackback.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rss/trackback.rb')
-rw-r--r--lib/rss/trackback.rb26
1 files changed, 7 insertions, 19 deletions
diff --git a/lib/rss/trackback.rb b/lib/rss/trackback.rb
index e7983b8a6f..d77238934c 100644
--- a/lib/rss/trackback.rb
+++ b/lib/rss/trackback.rb
@@ -12,29 +12,14 @@ module RSS
module TrackBackUtils
private
def trackback_validate(ignore_unknown_element, tags, uri)
- counter = {}
- %w(ping about).each do |name|
- counter["#{TRACKBACK_PREFIX}_#{name}"] = 0
- end
-
- tags.each do |tag|
- key = "#{TRACKBACK_PREFIX}_#{tag}"
- if !ignore_unknown_element and !counter.has_key?(key)
- raise UnknownTagError.new(tag, TRACKBACK_URI)
- end
- counter[key] += 1
- if tag != "about" and counter[key] > 1
- raise TooMuchTagError.new(tag, tag_name)
- end
- end
-
- if counter["#{TRACKBACK_PREFIX}_ping"].zero? and
- counter["#{TRACKBACK_PREFIX}_about"].nonzero?
+ return if tags.nil?
+ if tags.find {|tag| tag == "about"} and
+ !tags.find {|tag| tag == "ping"}
raise MissingTagError.new("#{TRACKBACK_PREFIX}:ping", tag_name)
end
end
end
-
+
module BaseTrackBackModel
ELEMENTS = %w(ping about)
@@ -45,10 +30,12 @@ module RSS
unless klass.class == Module
klass.module_eval {include TrackBackUtils}
+ klass.install_must_call_validator(TRACKBACK_PREFIX, TRACKBACK_URI)
%w(ping).each do |name|
var_name = "#{TRACKBACK_PREFIX}_#{name}"
klass_name = "TrackBack#{Utils.to_class_name(name)}"
klass.install_have_child_element(var_name)
+ klass.install_model(name, TRACKBACK_URI, "?")
klass.module_eval(<<-EOC, __FILE__, __LINE__)
remove_method :#{var_name}
def #{var_name}
@@ -66,6 +53,7 @@ module RSS
var_name = "#{TRACKBACK_PREFIX}_#{name}"
klass_name = "TrackBack#{Utils.to_class_name(name)}"
klass.install_have_children_element(var_name)
+ klass.install_model(name, TRACKBACK_URI, "*")
klass.module_eval(<<-EOC, __FILE__, __LINE__)
remove_method :#{var_name}
def #{var_name}(*args)