callable_tree 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![build](https://github.com/jsmmr/ruby_callable_tree/actions/workflows/build.yml/badge.svg)](https://github.com/jsmmr/ruby_callable_tree/actions/workflows/build.yml)
|
4
|
+
[![CodeQL](https://github.com/jsmmr/ruby_callable_tree/actions/workflows/codeql-analysis.yml/badge.svg)](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:
|