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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a837fb2321275845b5c51622079d41896966145e
4
- data.tar.gz: 5e1deb643c9233e5d376839948ac74a369bb5e13
3
+ metadata.gz: 1450e6fa82ffadb91424237f6c9527bc0e9bd9d2
4
+ data.tar.gz: ec8325c5dc3bde7784651b4d5039edcb7f694631
5
5
  SHA512:
6
- metadata.gz: 9622068a5b9e8d56dddd96b87e7553d377390b7cfc25d14154dbe4255a30fc6f83f260cf2c8f038728aed4a77f893e161588e475b96de40dfd86f9f86e916ce8
7
- data.tar.gz: 8b7b017668323e9c00544518944fdbf1cf7595cdb08b33986d119bf52add39da096cbf3372c73bd4c2b2f7c31631c90a330aa3e3946ce3e93930798eead421a6
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-26'
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"]
@@ -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 values_by_field(options)
29
+ def search(options)
26
30
  default_options = {
27
- field_to_search: 'name',
28
- search_keyword: :missing_search_keyword,
29
- values_key: :missing_values_key,
30
- include_descendants: false,
31
- assume_uniqueness: false
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[:field_to_search], options[:search_keyword])
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
- # When assuming that node names are unique,
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[:include_descendants]
44
- node.own_and_descendants(options[:values_key])
46
+ if options[:of_subtree]
47
+ node.own_and_descendants(options[:then_get])
45
48
  else
46
- node.get(options[:values_key])
49
+ node.get(options[:then_get])
47
50
  end
48
51
  end
49
52
 
@@ -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)
@@ -1,6 +1,6 @@
1
1
  module Forester
2
2
  class Version
3
- MAJOR = 2
3
+ MAJOR = 3
4
4
  MINOR = 0
5
5
  PATCH = 0
6
6
  PRE = nil
@@ -33,27 +33,38 @@ class TestTreeNode < Minitest::Test
33
33
 
34
34
 
35
35
  expected_value = [7]
36
- actual_value = tree.values_by_field({
37
- field_to_search: 'name',
38
- search_keyword: 'Second node of level 3',
39
- values_key: 'value'
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.values_by_field({
45
- field_to_search: 'name',
46
- search_keyword: 'Second node of level 3',
47
- values_key: 'value',
48
- include_descendants: true
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.values_by_field({
54
- field_to_search: 'strings',
55
- search_keyword: 'A hidden secret lies in the deepest leaves...',
56
- values_key: 'value'
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: 2.0.0
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-26 00:00:00.000000000 Z
11
+ date: 2016-07-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubytree