hpricot:Hpricot::Container::Trav#filter

さっぱり分からず…

>> require "hpricot"
=> true
>> doc = Hpricot('<p>foo1</p><p>foo2</p>')
=> #<Hpricot::Doc {elem <p> "foo1" </p>} {elem <p> "foo2" </p>}>
>> doc.filter {|x| x == "p"}
NameError: undefined local variable or method `to_node' for #<Hpricot::Doc {elem <p> "foo1" </p>} {elem <p> "foo2" </p>}>
	from /usr/local/ruby-1.8.7/lib/ruby/gems/1.8/gems/hpricot-0.8.2/lib/hpricot/traverse.rb:732:in `filter'
	from (irb):3
>> doc.filter {|x| true }
NameError: undefined local variable or method `to_node' for {elem <p> "foo1" </p>}:Hpricot::Elem
	from /usr/local/ruby-1.8.7/lib/ruby/gems/1.8/gems/hpricot-0.8.2/lib/hpricot/traverse.rb:732:in `filter'
	from /usr/local/ruby-1.8.7/lib/ruby/gems/1.8/gems/hpricot-0.8.2/lib/hpricot/traverse.rb:724:in `filter'
	from (irb):4:in `each_with_index'
	from /usr/local/ruby-1.8.7/lib/ruby/gems/1.8/gems/hpricot-0.8.2/lib/hpricot/traverse.rb:505:in `each'
	from /usr/local/ruby-1.8.7/lib/ruby/gems/1.8/gems/hpricot-0.8.2/lib/hpricot/traverse.rb:505:in `each_with_index'
	from /usr/local/ruby-1.8.7/lib/ruby/gems/1.8/gems/hpricot-0.8.2/lib/hpricot/traverse.rb:505:in `each_child_with_index'
	from /usr/local/ruby-1.8.7/lib/ruby/gems/1.8/gems/hpricot-0.8.2/lib/hpricot/traverse.rb:721:in `filter'
	from (irb):4
>> doc.search("*").filter {|x| true }
ArgumentError: wrong number of arguments (0 for 1)
	from (irb):5:in `filter'
	from (irb):5
>> doc.at("*").filter {|x| true }
NameError: undefined local variable or method `to_node' for {elem <p> "foo1" </p>}:Hpricot::Elem
	from /usr/local/ruby-1.8.7/lib/ruby/gems/1.8/gems/hpricot-0.8.2/lib/hpricot/traverse.rb:732:in `filter'
	from (irb):6


Hpricot::Container::Trav#filter の定義は以下のようになっていた

    def filter(&block)
      subst = {}
      each_child_with_index {|descendant, i|
        if yield descendant
          if descendant.elem?
            subst[i] = descendant.filter(&block)
          else
            subst[i] = descendant
          end
        else
          subst[i] = nil
        end
      }
      to_node.subst_subnode(subst)
    end
  end

to_node って何?ソースを grep してもそれっぽいものが出てこないのだけど