forester 2.0.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|