forester 2.0.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/forester.gemspec +1 -1
- data/lib/forester/aggregators.rb +17 -14
- data/lib/forester/tree_node.rb +0 -4
- data/lib/forester/version.rb +1 -1
- data/test/test_treenode.rb +24 -13
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1450e6fa82ffadb91424237f6c9527bc0e9bd9d2
|
4
|
+
data.tar.gz: ec8325c5dc3bde7784651b4d5039edcb7f694631
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ca55344989f3b2de019c3dfc5d3cc648c745cb1d8810fc0af44c5a8723b3ad951615a6e959385271bb8d6ced06e1c43182b4efe8e9776038be2cfa39201681c
|
7
|
+
data.tar.gz: 523d4c868e6d329854a29758d29ab9ffdf8dad56daafdcd341ed9cdd5cae91921c12b1d9961e8eaec6b4f39acb418b894f4c94fc644d88ca9e8f90b05cace538
|
data/forester.gemspec
CHANGED
@@ -6,7 +6,7 @@ require 'forester/version'
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = 'forester'
|
8
8
|
s.version = Forester::Version
|
9
|
-
s.date = '2016-07-
|
9
|
+
s.date = '2016-07-27'
|
10
10
|
s.summary = "A gem to represent and interact with tree data structures"
|
11
11
|
s.description = "Based on rubytree, this gem lets you build trees and run queries against them."
|
12
12
|
s.authors = ["Eugenio Bruno"]
|
data/lib/forester/aggregators.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
module Forester
|
2
2
|
module Aggregators
|
3
3
|
|
4
|
+
def nodes_with(content_key, content_values)
|
5
|
+
each_node.select { |node| not ( Array(node.get(content_key) { :no_match }) & Array(content_values) ).empty? }
|
6
|
+
end
|
7
|
+
|
4
8
|
def with_ancestry(options = {})
|
5
9
|
default_options = {
|
6
10
|
include_root: true,
|
@@ -22,28 +26,27 @@ module Forester
|
|
22
26
|
end
|
23
27
|
end
|
24
28
|
|
25
|
-
def
|
29
|
+
def search(options)
|
26
30
|
default_options = {
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
31
|
+
single_node: true,
|
32
|
+
by_field: :name,
|
33
|
+
keywords: :missing_search_keywords,
|
34
|
+
then_get: :nodes,
|
35
|
+
of_subtree: true,
|
32
36
|
}
|
33
37
|
options = default_options.merge(options)
|
34
38
|
|
35
|
-
found_nodes = nodes_with(options[:
|
39
|
+
found_nodes = nodes_with(options[:by_field], options[:keywords])
|
40
|
+
|
41
|
+
found_nodes = found_nodes.slice(0, 1) if options[:single_node]
|
36
42
|
|
37
|
-
|
38
|
-
# if more than one node was found,
|
39
|
-
# discard all but the first one
|
40
|
-
found_nodes = found_nodes.slice(0, 1) if options[:assume_uniqueness]
|
43
|
+
return found_nodes if options[:then_get] == :nodes
|
41
44
|
|
42
45
|
found_nodes.flat_map do |node|
|
43
|
-
if options[:
|
44
|
-
node.own_and_descendants(options[:
|
46
|
+
if options[:of_subtree]
|
47
|
+
node.own_and_descendants(options[:then_get])
|
45
48
|
else
|
46
|
-
node.get(options[:
|
49
|
+
node.get(options[:then_get])
|
47
50
|
end
|
48
51
|
end
|
49
52
|
|
data/lib/forester/tree_node.rb
CHANGED
@@ -21,10 +21,6 @@ module Forester
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
def nodes_with(content_key, content_value)
|
25
|
-
each_node.select { |node| Array(node.get(content_key) { :no_match }).include? content_value }
|
26
|
-
end
|
27
|
-
|
28
24
|
alias_method :each_node, :breadth_each
|
29
25
|
|
30
26
|
def get(field, &block)
|
data/lib/forester/version.rb
CHANGED
data/test/test_treenode.rb
CHANGED
@@ -33,27 +33,38 @@ class TestTreeNode < Minitest::Test
|
|
33
33
|
|
34
34
|
|
35
35
|
expected_value = [7]
|
36
|
-
actual_value = tree.
|
37
|
-
|
38
|
-
|
39
|
-
|
36
|
+
actual_value = tree.search({
|
37
|
+
by_field: 'name',
|
38
|
+
keywords: 'Second node of level 3',
|
39
|
+
then_get: 'value',
|
40
|
+
of_subtree: false,
|
41
|
+
})
|
42
|
+
assert_equal expected_value, actual_value
|
43
|
+
|
44
|
+
expected_value = [7]
|
45
|
+
actual_value = tree.search({
|
46
|
+
by_field: 'name',
|
47
|
+
keywords: ['Second node of level 3', 'Not present name'],
|
48
|
+
then_get: 'value',
|
49
|
+
of_subtree: false,
|
40
50
|
})
|
41
51
|
assert_equal expected_value, actual_value
|
42
52
|
|
43
53
|
expected_values = [7, 8, 9]
|
44
|
-
actual_values = tree.
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
54
|
+
actual_values = tree.search({
|
55
|
+
by_field: 'name',
|
56
|
+
keywords: 'Second node of level 3',
|
57
|
+
then_get: 'value',
|
58
|
+
of_subtree: true,
|
49
59
|
})
|
50
60
|
assert_equal expected_values, actual_values
|
51
61
|
|
52
62
|
expected_value = [7]
|
53
|
-
actual_value = tree.
|
54
|
-
|
55
|
-
|
56
|
-
|
63
|
+
actual_value = tree.search({
|
64
|
+
by_field: 'strings',
|
65
|
+
keywords: 'A hidden secret lies in the deepest leaves...',
|
66
|
+
then_get: 'value',
|
67
|
+
of_subtree: false
|
57
68
|
})
|
58
69
|
assert_equal expected_value, actual_value
|
59
70
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: forester
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eugenio Bruno
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-07-
|
11
|
+
date: 2016-07-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubytree
|