class SexpPath::RubyQueryBuilder

Public Class Methods

_assignment(name=nil, bind='assignment') click to toggle source
# File lib/sexp_path/ruby_query_builder.rb, line 25
def _assignment(name=nil, bind='assignment')
  term = v(name, bind)
  tag = variable_tag(name, :iasgn, :lasgn)

  s(tag, term)     | # declaration
  s(tag, term, _)  | # assignment
  (                  # block arument
    t(:args) & 
    ( # note this last case is wrong for regexps
      SexpPath::Matcher::Block.new{|s| s[1..-1].any?{|a| a == name}} % bind
    )
  )
end
_call(name=nil, bind='call') click to toggle source
# File lib/sexp_path/ruby_query_builder.rb, line 12
def _call(name=nil, bind='call')
  s(:call, _, v(name, bind), _)
end
_class(name=nil, bind='class') click to toggle source
# File lib/sexp_path/ruby_query_builder.rb, line 16
def _class(name=nil, bind='class')
  s(:class, v(name, bind), _, _)
end
_class_method(name=nil, bind='class_method') click to toggle source
# File lib/sexp_path/ruby_query_builder.rb, line 8
def _class_method(name=nil, bind='class_method')
  s(:defs, v(name, bind), _, _)
end
_method(name=nil, bind='method') click to toggle source
# File lib/sexp_path/ruby_query_builder.rb, line 4
def _method(name=nil, bind='method')
  s(:defn, v(name, bind), _, _)
end
_variable(name=nil, bind='variable') click to toggle source
# File lib/sexp_path/ruby_query_builder.rb, line 20
def _variable(name=nil, bind='variable')
  tag = variable_tag(name, :ivar, :lvar)
  s(tag, v(name, var))
end

Private Class Methods

v(name, bind) click to toggle source

Inserts the appropriate type of value given name. For instance:

v('/cake/') #=> /cake/ # regular expression match
v('apple')  #=> :apple # atom match
# File lib/sexp_path/ruby_query_builder.rb, line 44
def v(name, bind)
  if name.nil?
    atom % bind
  else
    m(name) % bind
  end
end
variable_tag(name, ivar, lvar) click to toggle source
# File lib/sexp_path/ruby_query_builder.rb, line 52
def variable_tag(name, ivar, lvar)
  if name.nil?
    atom
  else
    name = name.is_a?(Regexp) ? name.inspect[1..-2] : name.to_s
    name[0..0] == '@' ? ivar : lvar
  end
end