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 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