callable_tree 0.2.2 → 0.2.3

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
  SHA256:
3
- metadata.gz: 8e5f087271cbaf840a0cb6557126331b67487c4f87e5843e3bcf900c54dc6e84
4
- data.tar.gz: d1d1e0ac4a085dc26d1a2f6bec141ea92ea80efbfb43c8738e34d9ae9280836c
3
+ metadata.gz: df7b380d00c1a56530ddd6fc4ee7159ca4f1fc14d3418c2f567f43ff6d176553
4
+ data.tar.gz: 9e2d706c5d50ae1350dfdcf92951678e7284a83fba5a71e9f8f13ffcb58c4db7
5
5
  SHA512:
6
- metadata.gz: 0a342b5fff3ce51c36bd4e4e1977f2023db7045bab0f19e794bc8a1c48442c184cedfcadad5a0b9956fe146a0904aaca584a6d23c5ac23c063dc53d8d260978a
7
- data.tar.gz: 6fd3e33d25e549774488967d600ef236bff9e74bc750741eff9e5c6d3e5c59b15f2c956c1f25b97f5e9cd16becb7004e6df298adf04c01844aa300dc1e2e42b3
6
+ metadata.gz: 9cd503091f5ba29c416120bdf5eca39535048c920721d0e4180cbfa95b3eb4d40ea77e2f28a9a8f4cb271adbd11050ad6a4a33313a80baf5cfa587a4e81365a1
7
+ data.tar.gz: 1948d9a3f5ec7a8ed17030436e513f253c2f1d1e24719f8813128bdb7e3db68f6a6d573cf2dc5e155177c4c1558b0aaf4cf9befbaf0d2a7c71b3ce6b92d3b668
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.2.3] - 2021-11-07
4
+ - Add `CallableTree::Node::Internal#shake` to recursively execute `CallableTree::Node::Internal#reject`, including child nodes. The child nodes that are empty because their children have been rejected will also be rejected.
5
+ - Add `CallableTree::Node::Internal#shake!` that make destructive change.
6
+ - Add `CallableTree::Node#outline` that may be useful for writing the specs.
7
+
3
8
  ## [0.2.2] - 2021-10-24
4
9
  - Add `CallableTree::Node::Internal#reject` to return a new node instance without rejected child nodes.
5
10
  - Add `CallableTree::Node::Internal#reject!` to destructively reject child nodes.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- callable_tree (0.2.2)
4
+ callable_tree (0.2.3)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -20,7 +20,7 @@ GEM
20
20
  rspec-mocks (3.10.2)
21
21
  diff-lcs (>= 1.2.0, < 2.0)
22
22
  rspec-support (~> 3.10.0)
23
- rspec-support (3.10.2)
23
+ rspec-support (3.10.3)
24
24
 
25
25
  PLATFORMS
26
26
  x86_64-darwin-19
@@ -37,6 +37,10 @@ module CallableTree
37
37
  .class
38
38
  end
39
39
 
40
+ def outline
41
+ { identity => nil }
42
+ end
43
+
40
44
  private
41
45
 
42
46
  def initialize_copy(_node)
@@ -35,6 +35,20 @@ module CallableTree
35
35
  self
36
36
  end
37
37
 
38
+ def shake(&block)
39
+ clone.tap do |node|
40
+ node.shake!(&block)
41
+ end
42
+ end
43
+
44
+ def shake!(&block)
45
+ reject!(&block) if block_given?
46
+
47
+ reject! do |node|
48
+ node.is_a?(Internal) && node.shake!(&block).child_nodes.empty?
49
+ end
50
+ end
51
+
38
52
  def match?(_input = nil, **_options)
39
53
  !child_nodes.empty?
40
54
  end
@@ -88,21 +102,29 @@ module CallableTree
88
102
  self
89
103
  end
90
104
 
91
- private
105
+ def outline(&block)
106
+ key = block ? block.call(self) : identity
107
+ value = child_nodes.reduce({}) { |memo, node| memo.merge!(node.outline(&block)) }
108
+ { key => value }
109
+ end
92
110
 
93
- attr_writer :child_nodes, :strategy
111
+ protected
94
112
 
95
113
  def child_nodes
96
114
  @child_nodes ||= []
97
115
  end
98
116
 
117
+ private
118
+
119
+ attr_writer :child_nodes, :strategy
120
+
99
121
  def nodeify(callable)
100
122
  if callable.is_a?(Node)
101
123
  callable.clone
102
124
  else
103
125
  External.proxify(callable)
104
126
  end
105
- .tap { |node| node.send(:parent=, self) }
127
+ .tap { |node| node.send(:parent=, self) }
106
128
  end
107
129
 
108
130
  def strategy
@@ -30,6 +30,10 @@ module CallableTree
30
30
  root? ? 0 : parent.depth + 1
31
31
  end
32
32
 
33
+ def outline
34
+ raise ::CallableTree::Error, 'Not implemented'
35
+ end
36
+
33
37
  def match?(_input = nil, **_options)
34
38
  true
35
39
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CallableTree
4
- VERSION = '0.2.2'
4
+ VERSION = '0.2.3'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: callable_tree
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - jsmmr
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-10-24 00:00:00.000000000 Z
11
+ date: 2021-11-07 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Builds a tree by linking callable nodes. The nodes that match the conditions
14
14
  are called in a chain from the root node to the leaf node. These are like nested
@@ -60,7 +60,7 @@ licenses:
60
60
  metadata:
61
61
  homepage_uri: https://github.com/jsmmr/ruby_callable_tree
62
62
  source_code_uri: https://github.com/jsmmr/ruby_callable_tree
63
- changelog_uri: https://github.com/jsmmr/ruby_callable_tree/blob/v0.2.2/CHANGELOG.md
63
+ changelog_uri: https://github.com/jsmmr/ruby_callable_tree/blob/v0.2.3/CHANGELOG.md
64
64
  post_install_message:
65
65
  rdoc_options: []
66
66
  require_paths: