callable_tree 0.1.3 → 0.2.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
  SHA256:
3
- metadata.gz: 8fa06f3d5119313cc62468deec9349bb902f92ff6267f9b0051d5625eea8a866
4
- data.tar.gz: 8679ef5bd22e419d6379b18fdc0a509074938073c9edaff37b4a7bee6029cda8
3
+ metadata.gz: 9213a2a82a38c85e401f291bf2d37e60210bf167c765576033eed93fb1d7cbbd
4
+ data.tar.gz: 4a3f2fce73c82b8e5b7e537d21eeedc500e84dbe9f3c972c596701b654a9f234
5
5
  SHA512:
6
- metadata.gz: 6ccdf3baffda301532c51510b84d066cec428961f773618ddc8d344917c9af26ca3da3d6186d6748585a8eceb0eabac0d7e652bcbcafb28b3a4a9e74622eb98f
7
- data.tar.gz: e1aa253c87040bebc9f03080ad25f704c1cbde0410355b4ffb70bbe969338d3ec7a88804abe856d582b9e351a182db43a7abe4b2f0b89c3f7d97fc6bb64bf1eb
6
+ metadata.gz: 72ccbffb1ffe2e66ddf41b2f29c715c9cda1d6a91dc8ee5ef493bcaa531b2c1c99ee9024b1776a8c9ecad6e82b84b051d0121c55e9abc26a1ba3d4bb449dced2
7
+ data.tar.gz: 243f05208c10de0a60af884479f8a2a9d3edc5735b16fece2994b694d0734bf75f57f1dfc57afc8c265df038fe736fd86e063042362d495140410819f47bbc70
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.2.0] - 2021-06-15
4
+ - Change `CallableTree::Node::Internal#append` to return a new instance.
5
+ To keep the same behavior as the older version, use `CallableTree::Node::External#append!` that make destructive change.
6
+ - Remove `CallableTree::Node::Internal#<<`. Use `CallableTree::Node::External#append!` instead.
7
+ - Change `CallableTree::Node::External#verbosify` to return a new instance.
8
+ To keep the same behavior as the older version, use `CallableTree::Node::External#verbosify!` that make destructive change.
9
+
3
10
  ## [0.1.3] - 2021-06-12
4
11
  - Minor improvements
5
12
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- callable_tree (0.1.3)
4
+ callable_tree (0.2.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -158,7 +158,7 @@ Run `examples/internal-seek.rb`:
158
158
  ---
159
159
  ```
160
160
 
161
- #### `CallableTree::Node::Internal#broadcast` (experimental)
161
+ #### `CallableTree::Node::Internal#broadcast`
162
162
 
163
163
  This strategy calls all child nodes of the internal node and ignores their `terminate?` methods, and then outputs their results as array.
164
164
 
@@ -212,7 +212,7 @@ Run `examples/internal-broadcast.rb`:
212
212
  10 -> [nil, nil]
213
213
  ```
214
214
 
215
- #### `CallableTree::Node::Internal#compose` (experimental)
215
+ #### `CallableTree::Node::Internal#compose`
216
216
 
217
217
  This strategy calls all child nodes of the internal node in order to input the output of the previous node to the next node and ignores their `terminate?` methods, and then outputs a single result.
218
218
 
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
9
9
  spec.email = ['jsmmr@icloud.com']
10
10
 
11
11
  spec.summary = 'Builds a tree by linking callable nodes. The nodes that match the conditions are called in a chain from the root node to the leaf node. These are like nested `if` or `case` expressions.'
12
- spec.description = 'Builds a tree by linking callable nodes. The nodes that match the conditiosn are called in a chain from the root node to the leaf node. These are like nested `if` or `case` expressions.'
12
+ spec.description = 'Builds a tree by linking callable nodes. The nodes that match the conditions are called in a chain from the root node to the leaf node. These are like nested `if` or `case` expressions.'
13
13
  spec.homepage = 'https://github.com/jsmmr/ruby_callable_tree'
14
14
  spec.license = 'MIT'
15
15
  spec.required_ruby_version = Gem::Requirement.new('>= 2.4.0')
@@ -18,6 +18,12 @@ module CallableTree
18
18
  end
19
19
 
20
20
  def verbosify
21
+ clone.tap do |node|
22
+ node.extend Verbose
23
+ end
24
+ end
25
+
26
+ def verbosify!
21
27
  extend Verbose
22
28
  self
23
29
  end
@@ -31,6 +37,13 @@ module CallableTree
31
37
  .class
32
38
  end
33
39
 
40
+ private
41
+
42
+ def initialize_copy(_node)
43
+ super
44
+ send(:parent=, nil)
45
+ end
46
+
34
47
  class Proxy
35
48
  extend ::Forwardable
36
49
  include External
@@ -9,20 +9,17 @@ module CallableTree
9
9
  @children ||= []
10
10
  end
11
11
 
12
- def <<(callable)
13
- children <<
14
- if callable.is_a?(Node)
15
- callable.clone
16
- else
17
- External.proxify(callable)
18
- end
19
- .tap { |node| node.send(:parent=, self) }
20
-
21
- self
12
+ def append(*callables)
13
+ clone.tap do |node|
14
+ node.append!(*callables)
15
+ end
22
16
  end
23
17
 
24
- def append(*callables)
25
- callables.each { |callable| self.<<(callable) }
18
+ def append!(*callables)
19
+ callables
20
+ .map { |callable| nodeify(callable) }
21
+ .tap { |nodes| children.push(*nodes) } # Use Array#push for Ruby 2.4
22
+
26
23
  self
27
24
  end
28
25
 
@@ -68,12 +65,22 @@ module CallableTree
68
65
 
69
66
  attr_writer :children, :strategy
70
67
 
68
+ def nodeify(callable)
69
+ if callable.is_a?(Node)
70
+ callable.clone
71
+ else
72
+ External.proxify(callable)
73
+ end
74
+ .tap { |node| node.send(:parent=, self) }
75
+ end
76
+
71
77
  def strategy
72
78
  @strategy ||= Seek.new
73
79
  end
74
80
 
75
81
  def initialize_copy(_node)
76
82
  super
83
+ send(:parent=, nil)
77
84
  self.children = children.map do |node|
78
85
  node.clone.tap { |new_node| new_node.send(:parent=, self) }
79
86
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CallableTree
4
- VERSION = '0.1.3'
4
+ VERSION = '0.2.0'
5
5
  end
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: callable_tree
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - jsmmr
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-06-12 00:00:00.000000000 Z
11
+ date: 2021-06-14 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: Builds a tree by linking callable nodes. The nodes that match the conditiosn
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
15
15
  `if` or `case` expressions.
16
16
  email:
@@ -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.1.3/CHANGELOG.md
63
+ changelog_uri: https://github.com/jsmmr/ruby_callable_tree/blob/v0.2.0/CHANGELOG.md
64
64
  post_install_message:
65
65
  rdoc_options: []
66
66
  require_paths: