Method: XPath::XPathNodeSet#funcall

Defined in:
lib/xml/xpath.rb

#funcall(name) ⇒ Object

for XPointer



2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
# File 'lib/xml/xpath.rb', line 2825

def funcall(name)   # for XPointer
  raise "BUG" unless block_given?
  func = ('f_' + name.tr('-', '_')).intern
  super unless respond_to? func, true
  size = @nodes.size
  pos = 1
  c = @context.dup
  begin
    @nodes.collect! { |node|
      c.reuse node, pos, size
      pos += 1
      args = yield(c)
      send(func, node, *args)
    }
  rescue Object::ArgumentError
    if $@[1] == "#{__FILE__}:#{__LINE__-3}:in `send'" then
      raise XPath::ArgumentError, "#{$!} for `#{name}'"
    end
    raise
  end
  self
end