diff options
Diffstat (limited to 'lib/rss/parser.rb')
-rw-r--r-- | lib/rss/parser.rb | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/lib/rss/parser.rb b/lib/rss/parser.rb index f5ea2bbc03..b7a76397b8 100644 --- a/lib/rss/parser.rb +++ b/lib/rss/parser.rb @@ -222,25 +222,22 @@ module RSS @@accessor_bases[uri][tag_name] = accessor_base.chomp("=") end - def def_get_text_element(uri, name, file, line) - register_uri(uri, name) - unless private_instance_methods(false).include?("start_#{name}".to_sym) - module_eval(<<-EOT, file, line) - def start_#{name}(name, prefix, attrs, ns) + def def_get_text_element(uri, element_name, file, line) + register_uri(uri, element_name) + method_name = "start_#{element_name}" + unless private_method_defined?(method_name) + define_method(method_name) do |name, prefix, attrs, ns| uri = _ns(ns, prefix) - if self.class.uri_registered?(uri, #{name.inspect}) + if self.class.uri_registered?(uri, element_name) start_get_text_element(name, prefix, ns, uri) else start_else_element(name, prefix, attrs, ns) end end - EOT - __send!("private", "start_#{name}") + private(method_name) end end - end - end module ListenerMixin @@ -368,10 +365,10 @@ module RSS def start_else_element(local, prefix, attrs, ns) class_name = self.class.class_name(_ns(ns, prefix), local) current_class = @last_element.class - if current_class.const_defined?(class_name) + next_class = nil + begin next_class = current_class.const_get(class_name) - start_have_something_element(local, prefix, attrs, ns, next_class) - else + rescue NameError if !@do_validate or @ignore_unknown_element @proc_stack.push(nil) else @@ -382,6 +379,9 @@ module RSS raise NotExpectedTagError.new(local, _ns(ns, prefix), parent) end end + if next_class + start_have_something_element(local, prefix, attrs, ns, next_class) + end end NAMESPLIT = /^(?:([\w:][-\w\d.]*):)?([\w:][-\w\d.]*)/ @@ -460,7 +460,7 @@ module RSS previous = @last_element next_element = klass.new(@do_validate, attributes) - previous.__send!(:set_next_element, tag_name, next_element) + previous.set_next_element(tag_name, next_element) @last_element = next_element @last_element.parent = previous if klass.need_parent? @xml_child_mode = @last_element.have_xml_content? |