callable_tree 0.2.2 → 0.2.3

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