mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* 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/branches/ruby_1_8@6601 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
037d21402b
commit
1909f5f1b1
9 changed files with 446 additions and 113 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue