node_query 1.4.0 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 95dcf07d501c704e59bb792454be0bae1ddfafb915c77b6a062c6331d654564b
4
- data.tar.gz: 7b835b8479ff5239ea77dcb5ed09f4868b1a09cbdf5edc2f4ab9413d352030be
3
+ metadata.gz: 526c6ef0b0f58f1a8f1f7aff14e147ce4220cd6366bea5d5108db29591e0ab02
4
+ data.tar.gz: 347fc60e4f3629871356757349c5a126235a192049eefa713fb15890d26033d0
5
5
  SHA512:
6
- metadata.gz: e2dbea64418363ad059ea2b6e9d93b3c2d010bdba59317327904b6a48411517a511ab6737fe40bdf4847b2833ec4d81eb5d474be7db7d831a6119c89fe904fea
7
- data.tar.gz: c2cf0bfec6edfa28b644a38957dce1276cc287507c3c3034a39e0ce018f25e420faded6ad0c7c3c3838757df5107082c30d05fcf9f4323c5d5d3f32bc68337f1
6
+ metadata.gz: b94b5f913b63824d89211dc6156add8ada6963a0122cf5d6adafc60fcf20af62a4f9a239f2bd341ef12167adcf8a5785b96b9c1b6bbad41d2ebe3f0eb90b498f
7
+ data.tar.gz: 2a9613221d35553af7e91e1e2a20792dbee63572634e254633cb0951180adb48b582454dee93f6c817d870ec16962af346bb1ce4ea253b253da10cb7e78ada49
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 1.5.0 (2022-09-15)
4
+
5
+ * Add `Helper.to_string`
6
+ * Only check the current node if `including_self` is true and `recursive` is false
7
+ * Fix `Regexp#match?` and `String#match?`
8
+ * Rename `stop_on_match` to `stop_at_first_match`
9
+
3
10
  ## 1.4.0 (2022-09-14)
4
11
 
5
12
  * Add options `including_self`, `stop_on_match` and `recursive`
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- node_query (1.4.0)
4
+ node_query (1.5.0)
5
5
  activesupport (< 7.0.0)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -62,7 +62,7 @@ It provides two apis: `query_nodes` and `match_node?`
62
62
 
63
63
  ```ruby
64
64
  node_query = NodeQuery.new(nqlOrRules: String | Hash) # Initialize NodeQuery
65
- node_query.query_nodes(node: Node, options = { including_self: true, stop_on_match: false, recursive: true }): Node[] # Get the matching nodes.
65
+ node_query.query_nodes(node: Node, options = { including_self: true, stop_at_first_match: false, recursive: true }): Node[] # Get the matching nodes.
66
66
  node_query.match_node?(node: Node): boolean # Check if the node matches nql or rules.
67
67
  ```
68
68
 
@@ -15,8 +15,8 @@ module NodeQuery::Compiler
15
15
  # @param node [Node] node to match
16
16
  # @param options [Hash] if query the current node
17
17
  # @option options [boolean] :including_self if query the current node, default is ture
18
- # @option options [boolean] :stop_on_match if stop on first match, default is false
19
- # @option options [boolean] :recursive if stop on first match, default is true
18
+ # @option options [boolean] :stop_at_first_match if stop at first match, default is false
19
+ # @option options [boolean] :recursive if recursively query child nodes, default is true
20
20
  # @return [Array<Node>] matching nodes.
21
21
  def query_nodes(node, options = {})
22
22
  matching_nodes = @selector.query_nodes(node, options)
@@ -15,8 +15,8 @@ module NodeQuery::Compiler
15
15
  # @param node [Node] node to match
16
16
  # @param options [Hash] if query the current node
17
17
  # @option options [boolean] :including_self if query the current node, default is ture
18
- # @option options [boolean] :stop_on_match if stop on first match, default is false
19
- # @option options [boolean] :recursive if stop on first match, default is true
18
+ # @option options [boolean] :stop_at_first_match if stop at first match, default is false
19
+ # @option options [boolean] :recursive if recursively query child nodes, default is true
20
20
  # @return [Array<Node>] matching nodes.
21
21
  def query_nodes(node, options = {})
22
22
  matching_nodes = @expression.query_nodes(node, options)
@@ -13,13 +13,16 @@ module NodeQuery::Compiler
13
13
 
14
14
  # Check if the regexp value matches the node value.
15
15
  # @param node [Node] the node
16
- # @return [Boolean] true if the regexp value matches the node value.
17
- def is_equal?(node)
18
- if NodeQuery.adapter.is_node?(node)
19
- @value.match(NodeQuery.adapter.get_source(node))
20
- else
21
- @value.match(node.to_s)
22
- end
16
+ # @param operator [String] the operator
17
+ # @return [Boolean] true if the regexp value matches the node value, otherwise, false.
18
+ def match?(node, operator = '=~')
19
+ match =
20
+ if NodeQuery.adapter.is_node?(node)
21
+ @value.match(NodeQuery.adapter.get_source(node))
22
+ else
23
+ @value.match(node.to_s)
24
+ end
25
+ operator == '=~' ? match : !match
23
26
  end
24
27
 
25
28
  # Get valid operators.
@@ -35,11 +35,11 @@ module NodeQuery::Compiler
35
35
  # @param node [Node] node to match
36
36
  # @param options [Hash] if query the current node
37
37
  # @option options [boolean] :including_self if query the current node, default is ture
38
- # @option options [boolean] :stop_on_match if stop on first match, default is false
39
- # @option options [boolean] :recursive if stop on first match, default is true
38
+ # @option options [boolean] :stop_at_first_match if stop at first match, default is false
39
+ # @option options [boolean] :recursive if recursively query child nodes, default is true
40
40
  # @return [Array<Node>] matching nodes.
41
41
  def query_nodes(node, options = {})
42
- options = { including_self: true, stop_on_match: false, recursive: true }.merge(options)
42
+ options = { including_self: true, stop_at_first_match: false, recursive: true }.merge(options)
43
43
  return find_nodes_by_relationship(node) if @relationship
44
44
 
45
45
  if node.is_a?(::Array)
@@ -48,24 +48,28 @@ module NodeQuery::Compiler
48
48
 
49
49
  return find_nodes_by_goto_scope(node) if @goto_scope
50
50
 
51
+ if options[:including_self] && !options[:recursive]
52
+ return match?(node) ? [node] : []
53
+ end
54
+
51
55
  nodes = []
52
56
  if options[:including_self] && match?(node)
53
57
  nodes << node
54
- return matching_nodes if options[:stop_on_match]
58
+ return nodes if options[:stop_at_first_match]
55
59
  end
56
60
  if @basic_selector
57
61
  if options[:recursive]
58
62
  NodeQuery::Helper.handle_recursive_child(node) do |child_node|
59
63
  if match?(child_node)
60
64
  nodes << child_node
61
- break if options[:stop_on_match]
65
+ break if options[:stop_at_first_match]
62
66
  end
63
67
  end
64
68
  else
65
69
  NodeQuery.adapter.get_children(node).each do |child_node|
66
70
  if match?(child_node)
67
71
  nodes << child_node
68
- break if options[:stop_on_match]
72
+ break if options[:stop_at_first_match]
69
73
  end
70
74
  end
71
75
  end
@@ -27,7 +27,7 @@ module NodeQuery::Compiler
27
27
  # @param node [Node] the node
28
28
  # @return [Boolean] true if the actual value equals the node value.
29
29
  def is_equal?(node)
30
- actual_value(node).to_s == expected_value
30
+ NodeQuery::Helper.to_string(actual_value(node)) == expected_value
31
31
  end
32
32
 
33
33
  # Get valid operators.
@@ -50,9 +50,17 @@ class NodeQuery::Helper
50
50
  def evaluate_node_value(node, str)
51
51
  str.scan(/{{(.*?)}}/).each do |match_data|
52
52
  target_node = NodeQuery::Helper.get_target_node(node, match_data.first)
53
- str = str.sub("{{#{match_data.first}}}", NodeQuery.adapter.get_source(target_node))
53
+ str = str.sub("{{#{match_data.first}}}", to_string(target_node))
54
54
  end
55
55
  str
56
56
  end
57
+
58
+ def to_string(node)
59
+ if NodeQuery.adapter.is_node?(node)
60
+ return NodeQuery.adapter.get_source(node)
61
+ end
62
+
63
+ node.to_s
64
+ end
57
65
  end
58
66
  end
@@ -13,28 +13,32 @@ class NodeQuery::NodeRules
13
13
  # @param node [Node] node to query
14
14
  # @param options [Hash] if query the current node
15
15
  # @option options [boolean] :including_self if query the current node, default is ture
16
- # @option options [boolean] :stop_on_match if stop on first match, default is false
17
- # @option options [boolean] :recursive if stop on first match, default is true
16
+ # @option options [boolean] :stop_at_first_match if stop at first match, default is false
17
+ # @option options [boolean] :recursive if recursively query child nodes, default is true
18
18
  # @return [Array<Node>] matching nodes.
19
19
  def query_nodes(node, options = {})
20
- options = { including_self: true, stop_on_match: false, recursive: true }.merge(options)
20
+ options = { including_self: true, stop_at_first_match: false, recursive: true }.merge(options)
21
+ if options[:including_self] && !options[:recursive]
22
+ return match_node?(node) ? [node] : []
23
+ end
24
+
21
25
  matching_nodes = []
22
26
  if options[:including_self] && match_node?(node)
23
27
  matching_nodes.push(node)
24
- return matching_nodes if options[:stop_on_match]
28
+ return matching_nodes if options[:stop_at_first_match]
25
29
  end
26
30
  if options[:recursive]
27
31
  NodeQuery::Helper.handle_recursive_child(node) do |child_node|
28
32
  if match_node?(child_node)
29
33
  matching_nodes.push(child_node)
30
- break if options[:stop_on_match]
34
+ break if options[:stop_at_first_match]
31
35
  end
32
36
  end
33
37
  else
34
38
  NodeQuery.adapter.get_children(node).each do |child_node|
35
39
  if match_node?(child_node)
36
40
  matching_nodes.push(child_node)
37
- break if options[:stop_on_match]
41
+ break if options[:stop_at_first_match]
38
42
  end
39
43
  end
40
44
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class NodeQuery
4
- VERSION = "1.4.0"
4
+ VERSION = "1.5.0"
5
5
  end
data/lib/node_query.rb CHANGED
@@ -40,8 +40,8 @@ class NodeQuery
40
40
  # @param node [Node] ast node
41
41
  # @param options [Hash] if query the current node
42
42
  # @option options [boolean] :including_self if query the current node, default is ture
43
- # @option options [boolean] :stop_on_match if stop on first match, default is false
44
- # @option options [boolean] :recursive if stop on first match, default is true
43
+ # @option options [boolean] :stop_at_first_match if stop at first match, default is false
44
+ # @option options [boolean] :recursive if recursively query child nodes, default is true
45
45
  # @return [Array<Node>] matching child nodes
46
46
  def query_nodes(node, options = {})
47
47
  if @expression
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: node_query
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Huang
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-09-14 00:00:00.000000000 Z
11
+ date: 2022-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport