class Sexp

SexpPath extends Sexp with Traverse. This adds support for searching S-Expressions

Public Instance Methods

satisfy?(o, data={}) click to toggle source

Extends Sexp to allow any Sexp to be used as a SexpPath matcher

# File lib/sexp_path.rb, line 53
def satisfy?(o, data={})
  return false unless o.is_a? Sexp
  return false unless length == o.length || (last.is_a?(Sexp) && last.greedy?)
  
  each_with_index do |child,i|
    if child.is_a?(Sexp)
      candidate = child.greedy? ? o[i..-1] : o[i]
      return false unless child.satisfy?( candidate, data )
    else
      return false unless child == o[i]
    end
  end

  capture_match(o, data)
end