callable_tree 0.3.0 → 0.3.1
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 +4 -4
- data/CHANGELOG.md +6 -0
- data/Gemfile.lock +1 -1
- data/README.md +1 -0
- data/lib/callable_tree/node/internal/strategy/broadcast.rb +2 -0
- data/lib/callable_tree/node/internal/strategy/compose.rb +2 -0
- data/lib/callable_tree/node/internal/strategy/seek.rb +2 -0
- data/lib/callable_tree/node/internal/strategy.rb +29 -0
- data/lib/callable_tree/node/internal.rb +33 -16
- data/lib/callable_tree/node.rb +1 -1
- data/lib/callable_tree/version.rb +1 -1
- data/lib/callable_tree.rb +1 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c16eb0b2fd83ffd98d61bca938bd449dac9c004e8240c4f1a3b61242bf841163
|
4
|
+
data.tar.gz: 9919ffcda275a5a5bcf81b0bfae40087cae1f701fc0b7b915fece81c21a79d6b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 98c022cc2b12dccf2333f1a1fc079febe80f597bbbfbd4565384b88987c92c2426d7986ee80c11e1361139b95d495fdff9237e4f986d57dbb7eb355ce8244a0b
|
7
|
+
data.tar.gz: bcee44379ab11292a5c3bba4b0d37f2bdc2a6f587f9a2a757c11c6093d29fdbd1fe20bd9e0ee6561d98785121222ae1959b412ca8b4ecb5ddf579504f5a704c4
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
## [0.3.1] - 2022-01-10
|
4
|
+
|
5
|
+
- Add `CallableTree::Node::Internal#seek?` to check whether the node's strategy is `seek` or not.
|
6
|
+
- Add `CallableTree::Node::Internal#broadcast?` to check whether the node's strategy is `broadcast` or not.
|
7
|
+
- Add `CallableTree::Node::Internal#compose?` to check whether the node's strategy is `compose` or not.
|
8
|
+
|
3
9
|
## [0.3.0] - 2021-12-27
|
4
10
|
|
5
11
|
- Change `CallableTree::Node#match?` to accept inputs to the node as variable length arguments.
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# CallableTree
|
2
2
|
|
3
3
|
[](https://github.com/jsmmr/ruby_callable_tree/actions/workflows/build.yml)
|
4
|
+
[](https://github.com/jsmmr/ruby_callable_tree/actions/workflows/codeql-analysis.yml)
|
4
5
|
|
5
6
|
## Installation
|
6
7
|
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module CallableTree
|
4
|
+
module Node
|
5
|
+
module Internal
|
6
|
+
module Strategy
|
7
|
+
def call(_nodes, *_inputs, **_options)
|
8
|
+
raise ::CallableTree::Error, 'Not implemented'
|
9
|
+
end
|
10
|
+
|
11
|
+
def name
|
12
|
+
@name ||= self.class.name.split('::').last.downcase.to_sym
|
13
|
+
end
|
14
|
+
|
15
|
+
def ==(other)
|
16
|
+
name == other.name
|
17
|
+
end
|
18
|
+
|
19
|
+
def eql?(other)
|
20
|
+
instance_of?(other.class) && self == other
|
21
|
+
end
|
22
|
+
|
23
|
+
def hash
|
24
|
+
self.class.name.hash
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -25,7 +25,7 @@ module CallableTree
|
|
25
25
|
def append!(*callables)
|
26
26
|
callables
|
27
27
|
.map { |callable| nodeify(callable) }
|
28
|
-
.tap { |nodes| child_nodes.push(*nodes) }
|
28
|
+
.tap { |nodes| child_nodes.push(*nodes) }
|
29
29
|
|
30
30
|
self
|
31
31
|
end
|
@@ -63,49 +63,64 @@ module CallableTree
|
|
63
63
|
strategy.call(child_nodes, *inputs, **options)
|
64
64
|
end
|
65
65
|
|
66
|
+
def seek?
|
67
|
+
strategy.is_a?(Strategy::Seek)
|
68
|
+
end
|
69
|
+
|
66
70
|
def seek
|
67
|
-
if
|
71
|
+
if seek?
|
68
72
|
self
|
69
73
|
else
|
70
74
|
clone.tap do |node|
|
71
|
-
node.
|
75
|
+
node.strategy = Strategy::Seek.new
|
72
76
|
end
|
73
77
|
end
|
74
78
|
end
|
75
79
|
|
76
80
|
def seek!
|
77
|
-
|
78
|
-
|
81
|
+
tap do |node|
|
82
|
+
node.strategy = Strategy::Seek.new unless seek?
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def broadcast?
|
87
|
+
strategy.is_a?(Strategy::Broadcast)
|
79
88
|
end
|
80
89
|
|
81
90
|
def broadcast
|
82
|
-
if
|
91
|
+
if broadcast?
|
83
92
|
self
|
84
93
|
else
|
85
94
|
clone.tap do |node|
|
86
|
-
node.
|
95
|
+
node.strategy = Strategy::Broadcast.new
|
87
96
|
end
|
88
97
|
end
|
89
98
|
end
|
90
99
|
|
91
100
|
def broadcast!
|
92
|
-
|
93
|
-
|
101
|
+
tap do |node|
|
102
|
+
node.strategy = Strategy::Broadcast.new unless broadcast?
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def compose?
|
107
|
+
strategy.is_a?(Strategy::Compose)
|
94
108
|
end
|
95
109
|
|
96
110
|
def compose
|
97
|
-
if
|
111
|
+
if compose?
|
98
112
|
self
|
99
113
|
else
|
100
114
|
clone.tap do |node|
|
101
|
-
node.
|
115
|
+
node.strategy = Strategy::Compose.new
|
102
116
|
end
|
103
117
|
end
|
104
118
|
end
|
105
119
|
|
106
120
|
def compose!
|
107
|
-
|
108
|
-
|
121
|
+
tap do |node|
|
122
|
+
node.strategy = Strategy::Compose.new unless compose?
|
123
|
+
end
|
109
124
|
end
|
110
125
|
|
111
126
|
def outline(&block)
|
@@ -116,13 +131,15 @@ module CallableTree
|
|
116
131
|
|
117
132
|
protected
|
118
133
|
|
134
|
+
attr_writer :strategy
|
135
|
+
|
119
136
|
def child_nodes
|
120
137
|
@child_nodes ||= []
|
121
138
|
end
|
122
139
|
|
123
140
|
private
|
124
141
|
|
125
|
-
attr_writer :child_nodes
|
142
|
+
attr_writer :child_nodes
|
126
143
|
|
127
144
|
def nodeify(callable)
|
128
145
|
if callable.is_a?(Node)
|
@@ -130,7 +147,7 @@ module CallableTree
|
|
130
147
|
else
|
131
148
|
External.proxify(callable)
|
132
149
|
end
|
133
|
-
.tap { |node| node.
|
150
|
+
.tap { |node| node.parent = self }
|
134
151
|
end
|
135
152
|
|
136
153
|
def strategy
|
@@ -141,7 +158,7 @@ module CallableTree
|
|
141
158
|
super
|
142
159
|
self.parent = nil
|
143
160
|
self.child_nodes = child_nodes.map do |node|
|
144
|
-
node.clone.tap { |new_node| new_node.
|
161
|
+
node.clone.tap { |new_node| new_node.parent = self }
|
145
162
|
end
|
146
163
|
end
|
147
164
|
end
|
data/lib/callable_tree/node.rb
CHANGED
data/lib/callable_tree.rb
CHANGED
@@ -8,6 +8,7 @@ require 'forwardable'
|
|
8
8
|
require_relative 'callable_tree/version'
|
9
9
|
require_relative 'callable_tree/node'
|
10
10
|
require_relative 'callable_tree/node/hooks/call'
|
11
|
+
require_relative 'callable_tree/node/internal/strategy'
|
11
12
|
require_relative 'callable_tree/node/internal/strategy/broadcast'
|
12
13
|
require_relative 'callable_tree/node/internal/strategy/seek'
|
13
14
|
require_relative 'callable_tree/node/internal/strategy/compose'
|
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.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jsmmr
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-10 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
|
@@ -50,6 +50,7 @@ files:
|
|
50
50
|
- lib/callable_tree/node/external/verbose.rb
|
51
51
|
- lib/callable_tree/node/hooks/call.rb
|
52
52
|
- lib/callable_tree/node/internal.rb
|
53
|
+
- lib/callable_tree/node/internal/strategy.rb
|
53
54
|
- lib/callable_tree/node/internal/strategy/broadcast.rb
|
54
55
|
- lib/callable_tree/node/internal/strategy/compose.rb
|
55
56
|
- lib/callable_tree/node/internal/strategy/seek.rb
|
@@ -61,7 +62,7 @@ licenses:
|
|
61
62
|
metadata:
|
62
63
|
homepage_uri: https://github.com/jsmmr/ruby_callable_tree
|
63
64
|
source_code_uri: https://github.com/jsmmr/ruby_callable_tree
|
64
|
-
changelog_uri: https://github.com/jsmmr/ruby_callable_tree/blob/v0.3.
|
65
|
+
changelog_uri: https://github.com/jsmmr/ruby_callable_tree/blob/v0.3.1/CHANGELOG.md
|
65
66
|
post_install_message:
|
66
67
|
rdoc_options: []
|
67
68
|
require_paths:
|