aboutsummaryrefslogtreecommitdiffstats
path: root/lib/rss/parser.rb
diff options
context:
space:
mode:
authorkou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-07-06 17:43:05 +0000
committerkou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-07-06 17:43:05 +0000
commite289fcf81a22f1dc6ebcb87861877b463af04b7c (patch)
treeef88a6dfdfc68d57025eb98ab6fe8d237c3adccd /lib/rss/parser.rb
parent9800838ff02369fa9e393b70f40b6083af0ce595 (diff)
downloadruby-e289fcf81a22f1dc6ebcb87861877b463af04b7c.tar.gz
* lib/rss/{rss,parser,0.9,1.0,2.0}.rb: supported RSS 0.9x/2.0
validation and validation which disregard order of elements. * test/rss/test_parser.rb: added tests for RSS 0.9x/2.0 validation. * test/rss/{test_trackback,rss-testcase}.rb: fixed no good method name. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6590 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rss/parser.rb')
-rw-r--r--lib/rss/parser.rb32
1 files changed, 24 insertions, 8 deletions
diff --git a/lib/rss/parser.rb b/lib/rss/parser.rb
index e1c61f46ae..1a8fdd4930 100644
--- a/lib/rss/parser.rb
+++ b/lib/rss/parser.rb
@@ -124,11 +124,22 @@ module RSS
class << self
@@setter = {}
+ @@registered_uris = {}
+
def install_setter(uri, tag_name, setter)
@@setter[uri] = {} unless @@setter.has_key?(uri)
@@setter[uri][tag_name] = setter
end
+ def register_uri(name, uri)
+ @@registered_uris[name] = {} unless @@registered_uris.has_key?(name)
+ @@registered_uris[name][uri] = nil
+ end
+
+ def uri_registered?(name, uri)
+ @@registered_uris[name].has_key?(uri)
+ end
+
def setter(uri, tag_name)
begin
@@setter[uri][tag_name]
@@ -147,27 +158,32 @@ module RSS
def install_get_text_element(name, uri, setter)
install_setter(uri, name, setter)
- def_get_text_element(name, *get_file_and_line_from_caller(1))
+ def_get_text_element(uri, name, *get_file_and_line_from_caller(1))
end
private
- def def_get_text_element(name, file, line)
+ def def_get_text_element(uri, name, file, line)
+ register_uri(name, uri)
unless private_instance_methods(false).include?("start_#{name}")
module_eval(<<-EOT, file, line)
def start_#{name}(name, prefix, attrs, ns)
uri = ns[prefix]
- if @do_validate
- tags = self.class.available_tags(uri)
- unless tags.include?(name)
- raise UnknownTagError.new(name, uri)
+ if self.class.uri_registered?(#{name.inspect}, uri)
+ if @do_validate
+ tags = self.class.available_tags(uri)
+ unless tags.include?(name)
+ raise UnknownTagError.new(name, uri)
+ end
end
+ start_get_text_element(name, prefix, ns, uri)
+ else
+ start_else_element(name, prefix, attrs, ns)
end
- start_get_text_element(name, prefix, ns, uri)
end
EOT
+ send("private", "start_#{name}")
end
- send("private", "start_#{name}")
end
end