modular_tree 0.0.1 → 0.0.2

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: 87b4426ea3d2f00ff5959831b0297d21190fee942d720f9e239cccc74e02ddcb
4
- data.tar.gz: feb82cbe67f18d2f0855f041a4612fbe023ae5564706123dee7bbef1e0d39b4a
3
+ metadata.gz: ab7be4bf786460addacf0cabad30d5b8c0f5a0aa00900e894f933fd6f53230be
4
+ data.tar.gz: 6b9c53ba9e2edccaa298bf1696e466dccfec7262c0cb5190bd82e1cf3055d60f
5
5
  SHA512:
6
- metadata.gz: ef3db04b865ec12612ccae42104bad67344892857f3bed8b523cc70b4aaab9ace7675cbb30bfab751143c741d0e45c13157cc6f8594b90f296fb4e2fb0efe15a
7
- data.tar.gz: dc1b4179bf2f46d3506af4c8660d71d552ff07567dda93403a5eca618744ca1a2aa53f8adf7f89d251d9b9f3ea4acb3080df4bd0933b4b33840656e8f874fc00
6
+ metadata.gz: 471dc9d79129be7692a3442a72ad03da18203461a7741a3815d2cb71a69c93ae68c5af787769cee2c6af14a8d787b5a1867551d681b8a88826be05227c47b2d1
7
+ data.tar.gz: 1b676cc1284e7bd48611da0cf99912262ca7f9eb4cfd8edd801e4f1ecbd5ec73941bd8cfebd069242024f71993302aa1766ef44cc38278fd0659d5791c2bec8b
@@ -63,11 +63,21 @@ module Tree
63
63
  # Implementation of Enumerable#each extended with filters. The block is
64
64
  # called with value, key, and parent as arguments (it may choose to
65
65
  # ignore key and/or parent). Returns an enumerator of values without a block
66
- def each(*filter, this: true, &block) = common_each(*filter, :value, :each_preorder, this, &block)
66
+ def each(*filter, this: true, &block) = common_each(*filter, :value, :do_each_preorder, this, &block)
67
+
68
+ # Implementation of Enumerable#select extended with a single filter. As
69
+ # #each, the block is called with value, key, and parent arguments
70
+ def select(filter = nil, this: true, &block)
71
+ if block_given?
72
+ each(block, true, this: this).to_a
73
+ else
74
+ each(filter || true, true, this: this)
75
+ end
76
+ end
67
77
 
68
78
  # Like #each but the block is called with node, key, and parent instead of
69
79
  # value, key, and parent
70
- def nodes(*filter, this: true, &block) = common_each(*filter, :node, :each_preorder, this, &block)
80
+ def nodes(*filter, this: true, &block) = common_each(*filter, :node, :do_each_preorder, this, &block)
71
81
 
72
82
  # Pre-order enumerator of selected nodes. Same as #each without a block
73
83
  def preorder(*filter, this: true) = each(*filter, this: this)
@@ -6,9 +6,9 @@ module Tree
6
6
  # traverse expression decides if the child nodes should be traversed
7
7
  # recursively
8
8
  #
9
- # The expressions can be a Proc, Symbol, or an array of classes. In
10
- # addition, +select+ can also be true, and +traverse+ can be true,
11
- # false, or nil. True, false, and nil have special meanings:
9
+ # The expressions can be a Proc, Symbol, Class, or an array of classes. In
10
+ # addition, +select+ can be true, and +traverse+ can be true, false, or
11
+ # nil. These values have special meanings:
12
12
  #
13
13
  # when +select+ is
14
14
  # true Select always. This is the default
@@ -17,14 +17,17 @@ module Tree
17
17
  # true Traverse always. This is the default
18
18
  # false Traverse only if select didn't match
19
19
  # nil Expects +select+ to return a two-tuple of booleans. Can't be
20
- # used when +select+ is true
20
+ # used when +select+ is true. TODO: Explain
21
21
  #
22
22
  # If the expression is a Proc object, it will be called with the current
23
23
  # node as argument. If the return value is true, the node is
24
24
  # selected/traversed and skipped otherwise. If the expression is a method
25
25
  # name (Symbol), the method will be called on each node with no arguments.
26
- # It is not an error if the method doesn't exists but the node is not
27
- # selected/traversed
26
+ # It is not an error if the method doesn't exists on the a given node but
27
+ # the node is not selected/traversed
28
+ #
29
+ # If the expression is a class or an array of classes, a given node matches
30
+ # if it is an instance of one of the classes or any subclass
28
31
  #
29
32
  # Filters should not have side-effects because they can be used in
30
33
  # enumerators that doesn't execute the filter unless the enumerator is
@@ -69,7 +69,7 @@ module Tree
69
69
 
70
70
  def node = array
71
71
  def this = array.first
72
- def value = array.first
72
+ def value = array.first # FIXME What is this? It is a problem several places
73
73
 
74
74
  attr_accessor :array
75
75
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Tree
4
- VERSION = "0.0.1"
4
+ VERSION = "0.0.2"
5
5
  end
data/lib/modular_tree.rb CHANGED
@@ -42,6 +42,7 @@ module Tree
42
42
  include InternalParentChildImplementation
43
43
  include UpTreeAlgorithms
44
44
  include DownTreeAlgorithms
45
+ include DownTreeFilteredAlgorithms
45
46
 
46
47
  def self.filter(*args) = DownTreeAlgorithms.filter(*args)
47
48
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: modular_tree
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Claus Rasmussen