Class: NodeQuery

Inherits:
Object
  • Object
show all
Defined in:
lib/node_query.rb,
lib/node_query/version.rb

Defined Under Namespace

Modules: Compiler Classes: Adapter, Helper, MethodNotSupported, NodeRules, ParserAdapter, SyntaxTreeAdapter

Constant Summary collapse

VERSION =
"1.13.10"

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(nql_or_ruls) ⇒ NodeQuery

Initialize a NodeQuery.

Parameters:

  • nql_or_ruls (String | Hash)

    node query language or node rules



32
33
34
35
36
37
38
# File 'lib/node_query.rb', line 32

def initialize(nql_or_ruls)
  if nql_or_ruls.is_a?(String)
    @expression = NodeQueryParser.new.parse(nql_or_ruls)
  else
    @rules = NodeRules.new(nql_or_ruls)
  end
end

Class Method Details

.adapterNodeQuery::Adapter

Get the adapter

Returns:



26
27
28
# File 'lib/node_query.rb', line 26

def self.adapter
  @adapter ||= ParserAdapter.new
end

.configure(options) ⇒ Object

Configure NodeQuery

Parameters:

  • options (Hash)

    options to configure

Options Hash (options):



20
21
22
# File 'lib/node_query.rb', line 20

def self.configure(options)
  @adapter = options[:adapter]
end

Instance Method Details

#match_node?(node) ⇒ Boolean

Check if the node matches the nql or rules.

Parameters:

  • node (Node)

    the node

Returns:

  • (Boolean)


60
61
62
63
64
65
66
67
68
# File 'lib/node_query.rb', line 60

def match_node?(node)
  if @expression
    @expression.match_node?(node)
  elsif @rules
    @rules.match_node?(node)
  else
    false
  end
end

#query_nodes(node, options = {}) ⇒ Array<Node>

Query matching nodes.

Parameters:

  • node (Node)

    ast node

  • options (Hash) (defaults to: {})

    if query the current node

Options Hash (options):

  • :including_self (boolean)

    if query the current node, default is ture

  • :stop_at_first_match (boolean)

    if stop at first match, default is false

  • :recursive (boolean)

    if recursively query child nodes, default is true

Returns:

  • (Array<Node>)

    matching child nodes



47
48
49
50
51
52
53
54
55
# File 'lib/node_query.rb', line 47

def query_nodes(node, options = {})
  if @expression
    @expression.query_nodes(node, options)
  elsif @rules
    @rules.query_nodes(node, options)
  else
    []
  end
end