diff options
author | kou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-07-06 17:43:05 +0000 |
---|---|---|
committer | kou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-07-06 17:43:05 +0000 |
commit | e289fcf81a22f1dc6ebcb87861877b463af04b7c (patch) | |
tree | ef88a6dfdfc68d57025eb98ab6fe8d237c3adccd /lib/rss/parser.rb | |
parent | 9800838ff02369fa9e393b70f40b6083af0ce595 (diff) | |
download | ruby-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.rb | 32 |
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 |