callable_tree 0.3.9 → 0.3.10

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: 1f81f9d9f97c638d350599e56656dd0430765f8ab79e572b3906963ffc94d32b
4
- data.tar.gz: 7fb4ad3eb420568d51cb3c3969969fa5c14bf82d99b6f2fb2035ce081e641d64
3
+ metadata.gz: dccb97d338f0f2d01a1986b2b0418660467fde837a79bd06b67f0df235bee5f2
4
+ data.tar.gz: 5002a705a96346ea92704eea7c8282beead6d4ef62c7ff2a9865f4b24e629faa
5
5
  SHA512:
6
- metadata.gz: cdf78b08f6d7b6ea112b510ac564724b7c15842bc44ccf4e603bc17083f0a0999705656e37277729006f8f955340f21e0191af720b474492d97e74b6cd6c2a51
7
- data.tar.gz: c0fd6fed3b3ec188b51375558a202543d72ee70aaffe25489dd1cf99c6f8882377e61868e32dc07eed43947cb85248c419c35ebbc89f2ca326f829a0bdb533cd
6
+ metadata.gz: 1d16dd16df13a3c5f5b6a4c5292d50acbf571482dbde0496e29d69d745ad887b4274e84edd5ace4707fe2bdf54d324389a2d1b662ffb94d1e430e5819762f40d
7
+ data.tar.gz: f531ae0eaaf51065f69e61a8eb4e70b83ba32bc280d699c2fce00b4b4a9c1ac3d8fb5fe61bcb3a7c40805edae1a26c4943bd9d09a4d4760a4e0f67a3dd4f62e9
@@ -5,13 +5,13 @@ jobs:
5
5
  runs-on: ubuntu-latest
6
6
  strategy:
7
7
  matrix:
8
- ruby: ['2.4', '2.5', '2.6', '2.7', '3.0', '3.1', '3.2.0-preview1']
8
+ ruby: ['2.4', '2.5', '2.6', '2.7', '3.0', '3.1', '3.2']
9
9
  steps:
10
10
  - uses: actions/checkout@v3
11
11
  - uses: ruby/setup-ruby@v1
12
12
  with:
13
13
  ruby-version: ${{ matrix.ruby }}
14
- - run: gem install bundler:2.3.7
14
+ - run: gem install bundler:2.3.26
15
15
  - uses: actions/cache@v3
16
16
  with:
17
17
  path: vendor/bundle
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.1.2
1
+ 3.2.0
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.3.10] - 2022-12-30
4
+
5
+ - Change `CallableTree::Node::Internal#broadcastable` to take `matchable` keyword parameter as boolean. It defaults to `true`, which is the same behavior as before.
6
+ - Change `CallableTree::Node::Internal#composable` to take `matchable` keyword parameter as boolean. It defaults to `true`, which is the same behavior as before.
7
+ - Change `CallableTree::Node::Internal#seekable` to take `matchable` keyword parameter as boolean. It defaults to `true`, which is the same behavior as before.
8
+
3
9
  ## [0.3.9] - 2022-11-06
4
10
 
5
11
  - Change `CallableTree::Node::Internal#broadcastable` to take `terminable` keyword parameter as boolean. It defaults to `false`, which is the same behavior as before.
data/Gemfile.lock CHANGED
@@ -1,29 +1,29 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- callable_tree (0.3.9)
4
+ callable_tree (0.3.10)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
9
  diff-lcs (1.5.0)
10
10
  rake (13.0.6)
11
- rspec (3.11.0)
12
- rspec-core (~> 3.11.0)
13
- rspec-expectations (~> 3.11.0)
14
- rspec-mocks (~> 3.11.0)
15
- rspec-core (3.11.0)
16
- rspec-support (~> 3.11.0)
17
- rspec-expectations (3.11.1)
11
+ rspec (3.12.0)
12
+ rspec-core (~> 3.12.0)
13
+ rspec-expectations (~> 3.12.0)
14
+ rspec-mocks (~> 3.12.0)
15
+ rspec-core (3.12.0)
16
+ rspec-support (~> 3.12.0)
17
+ rspec-expectations (3.12.1)
18
18
  diff-lcs (>= 1.2.0, < 2.0)
19
- rspec-support (~> 3.11.0)
20
- rspec-mocks (3.11.1)
19
+ rspec-support (~> 3.12.0)
20
+ rspec-mocks (3.12.1)
21
21
  diff-lcs (>= 1.2.0, < 2.0)
22
- rspec-support (~> 3.11.0)
23
- rspec-support (3.11.1)
22
+ rspec-support (~> 3.12.0)
23
+ rspec-support (3.12.0)
24
24
 
25
25
  PLATFORMS
26
- x86_64-darwin-21
26
+ x86_64-darwin-22
27
27
 
28
28
  DEPENDENCIES
29
29
  callable_tree!
@@ -31,4 +31,4 @@ DEPENDENCIES
31
31
  rspec (~> 3.0)
32
32
 
33
33
  BUNDLED WITH
34
- 2.3.7
34
+ 2.3.26
data/README.md CHANGED
@@ -659,19 +659,19 @@ module Logging
659
659
  matched
660
660
  end
661
661
 
662
- if node.external?
663
- node
664
- .before_caller! do |input, *, _node_:, **|
665
- input_prefix = INPUT_LABEL.rjust((_node_.depth * INDENT_SIZE) + INPUT_LABEL.length, BLANK)
666
- puts "#{input_prefix} #{input}"
667
- input
668
- end
669
- .after_caller! do |output, _node_:, **|
670
- output_prefix = OUTPUT_LABEL.rjust((_node_.depth * INDENT_SIZE) + OUTPUT_LABEL.length, BLANK)
671
- puts "#{output_prefix} #{output}"
672
- output
673
- end
674
- end
662
+ return unless node.external?
663
+
664
+ node
665
+ .before_caller! do |input, *, _node_:, **|
666
+ input_prefix = INPUT_LABEL.rjust((_node_.depth * INDENT_SIZE) + INPUT_LABEL.length, BLANK)
667
+ puts "#{input_prefix} #{input}"
668
+ input
669
+ end
670
+ .after_caller! do |output, _node_:, **|
671
+ output_prefix = OUTPUT_LABEL.rjust((_node_.depth * INDENT_SIZE) + OUTPUT_LABEL.length, BLANK)
672
+ puts "#{output_prefix} #{output}"
673
+ output
674
+ end
675
675
  end
676
676
  end
677
677
 
@@ -778,7 +778,7 @@ end
778
778
  ...
779
779
  ```
780
780
 
781
- Run `examples/class/identity.rb`:
781
+ Run `examples/builder/identity.rb`:
782
782
  ```sh
783
783
  % ruby examples/builder/identity.rb
784
784
  #<struct CallableTree::Node::External::Output
@@ -12,7 +12,7 @@ JSONParser =
12
12
  end
13
13
  .caller do |input, **options, &block|
14
14
  File.open(input) do |file|
15
- json = ::JSON.load(file)
15
+ json = JSON.load(file)
16
16
  # The following block call is equivalent to calling `super` in the class style.
17
17
  block.call(json, **options)
18
18
  end
@@ -12,7 +12,7 @@ JSONParser =
12
12
  end
13
13
  .caller do |input, **options, &block|
14
14
  File.open(input) do |file|
15
- json = ::JSON.load(file)
15
+ json = JSON.load(file)
16
16
  # The following block call is equivalent to calling `super` in the class style.
17
17
  block.call(json, **options)
18
18
  end
@@ -12,7 +12,7 @@ JSONParser =
12
12
  end
13
13
  .caller do |input, **options, &original|
14
14
  File.open(input) do |file|
15
- json = ::JSON.load(file)
15
+ json = JSON.load(file)
16
16
  # The following block call is equivalent to calling `super` in the class style.
17
17
  original.call(json, **options)
18
18
  end
@@ -12,7 +12,7 @@ JSONParser =
12
12
  end
13
13
  .caller do |input, **options, &original|
14
14
  File.open(input) do |file|
15
- json = ::JSON.load(file)
15
+ json = JSON.load(file)
16
16
  # The following block call is equivalent to calling `super` in the class style.
17
17
  original.call(json, **options)
18
18
  end
@@ -87,19 +87,19 @@ module Logging
87
87
  matched
88
88
  end
89
89
 
90
- if node.external?
91
- node
92
- .before_caller! do |input, *, _node_:, **|
93
- input_prefix = INPUT_LABEL.rjust((_node_.depth * INDENT_SIZE) + INPUT_LABEL.length, BLANK)
94
- puts "#{input_prefix} #{input}"
95
- input
96
- end
97
- .after_caller! do |output, _node_:, **|
98
- output_prefix = OUTPUT_LABEL.rjust((_node_.depth * INDENT_SIZE) + OUTPUT_LABEL.length, BLANK)
99
- puts "#{output_prefix} #{output}"
100
- output
101
- end
102
- end
90
+ return unless node.external?
91
+
92
+ node
93
+ .before_caller! do |input, *, _node_:, **|
94
+ input_prefix = INPUT_LABEL.rjust((_node_.depth * INDENT_SIZE) + INPUT_LABEL.length, BLANK)
95
+ puts "#{input_prefix} #{input}"
96
+ input
97
+ end
98
+ .after_caller! do |output, _node_:, **|
99
+ output_prefix = OUTPUT_LABEL.rjust((_node_.depth * INDENT_SIZE) + OUTPUT_LABEL.length, BLANK)
100
+ puts "#{output_prefix} #{output}"
101
+ output
102
+ end
103
103
  end
104
104
  end
105
105
 
@@ -124,19 +124,19 @@ module Logging
124
124
  matched
125
125
  end
126
126
 
127
- if node.external?
128
- node
129
- .before_caller! do |input, *, _node_:, **|
130
- input_prefix = INPUT_LABEL.rjust((_node_.depth * INDENT_SIZE) + INPUT_LABEL.length, BLANK)
131
- puts "#{input_prefix} #{input}"
132
- input
133
- end
134
- .after_caller! do |output, _node_:, **|
135
- output_prefix = OUTPUT_LABEL.rjust((_node_.depth * INDENT_SIZE) + OUTPUT_LABEL.length, BLANK)
136
- puts "#{output_prefix} #{output}"
137
- output
138
- end
139
- end
127
+ return unless node.external?
128
+
129
+ node
130
+ .before_caller! do |input, *, _node_:, **|
131
+ input_prefix = INPUT_LABEL.rjust((_node_.depth * INDENT_SIZE) + INPUT_LABEL.length, BLANK)
132
+ puts "#{input_prefix} #{input}"
133
+ input
134
+ end
135
+ .after_caller! do |output, _node_:, **|
136
+ output_prefix = OUTPUT_LABEL.rjust((_node_.depth * INDENT_SIZE) + OUTPUT_LABEL.length, BLANK)
137
+ puts "#{output_prefix} #{output}"
138
+ output
139
+ end
140
140
  end
141
141
  end
142
142
 
@@ -6,10 +6,10 @@ module CallableTree
6
6
  include Node
7
7
 
8
8
  def self.included(mod)
9
- if mod.include?(Internal)
10
- raise ::CallableTree::Error,
11
- "#{mod} cannot include #{self} together with #{Internal}"
12
- end
9
+ return unless mod.include?(Internal)
10
+
11
+ raise ::CallableTree::Error,
12
+ "#{mod} cannot include #{self} together with #{Internal}"
13
13
  end
14
14
 
15
15
  def self.proxify(callable)
@@ -7,26 +7,19 @@ module CallableTree
7
7
  class Broadcast
8
8
  include Strategy
9
9
 
10
- def initialize(terminable: false)
10
+ def initialize(matchable: true, terminable: false)
11
+ self.matchable = matchable
11
12
  self.terminable = terminable
12
- @terminator =
13
- if terminable
14
- proc { |node, output, *inputs, **options| node.terminate?(output, *inputs, **options) }
15
- else
16
- proc { false }
17
- end
18
13
  end
19
14
 
20
15
  def call(nodes, *inputs, **options)
21
- nodes.reduce([]) do |outputs, node|
22
- output = (node.call(*inputs, **options) if node.match?(*inputs, **options))
16
+ nodes.each_with_object([]) do |node, outputs|
17
+ output = (node.call(*inputs, **options) if matcher.call(node, *inputs, **options))
23
18
  outputs << output
24
19
 
25
- if @terminator.call(node, output, *inputs, **options)
26
- break outputs
27
- else
28
- outputs
29
- end
20
+ break outputs if terminator.call(node, output, *inputs, **options)
21
+
22
+ outputs
30
23
  end
31
24
  end
32
25
  end
@@ -7,22 +7,17 @@ module CallableTree
7
7
  class Compose
8
8
  include Strategy
9
9
 
10
- def initialize(terminable: false)
10
+ def initialize(matchable: true, terminable: false)
11
+ self.matchable = matchable
11
12
  self.terminable = terminable
12
- @terminator =
13
- if terminable
14
- proc { |node, output, *inputs, **options| node.terminate?(output, *inputs, **options) }
15
- else
16
- proc { false }
17
- end
18
13
  end
19
14
 
20
15
  def call(nodes, *inputs, **options)
21
16
  head, *tail = inputs
22
17
  nodes.reduce(head) do |input, node|
23
- if node.match?(input, *tail, **options)
18
+ if matcher.call(node, input, *tail, **options)
24
19
  output = node.call(input, *tail, **options)
25
- break output if @terminator.call(node, output, input, *tail, **options)
20
+ break output if terminator.call(node, output, input, *tail, **options)
26
21
 
27
22
  output
28
23
  else
@@ -7,23 +7,18 @@ module CallableTree
7
7
  class Seek
8
8
  include Strategy
9
9
 
10
- def initialize(terminable: true)
10
+ def initialize(matchable: true, terminable: true)
11
+ self.matchable = matchable
11
12
  self.terminable = terminable
12
- @terminator =
13
- if terminable
14
- proc { |node, output, *inputs, **options| node.terminate?(output, *inputs, **options) }
15
- else
16
- proc { false }
17
- end
18
13
  end
19
14
 
20
15
  def call(nodes, *inputs, **options)
21
16
  nodes
22
17
  .lazy
23
- .select { |node| node.match?(*inputs, **options) }
18
+ .select { |node| matcher.call(node, *inputs, **options) }
24
19
  .map do |node|
25
20
  output = node.call(*inputs, **options)
26
- terminated = @terminator.call(node, output, *inputs, **options)
21
+ terminated = terminator.call(node, output, *inputs, **options)
27
22
  [output, terminated]
28
23
  end
29
24
  .select { |_output, terminated| terminated }
@@ -13,7 +13,7 @@ module CallableTree
13
13
  end
14
14
 
15
15
  def ==(other)
16
- name == other.name && terminable? == other.terminable?
16
+ name == other.name && matchable? == other.matchable? && terminable? == other.terminable?
17
17
  end
18
18
 
19
19
  def eql?(other)
@@ -21,7 +21,11 @@ module CallableTree
21
21
  end
22
22
 
23
23
  def hash
24
- [self.class.name, terminable].join('-').hash
24
+ [self.class.name, matchable, terminable].join('-').hash
25
+ end
26
+
27
+ def matchable?
28
+ matchable
25
29
  end
26
30
 
27
31
  def terminable?
@@ -30,7 +34,25 @@ module CallableTree
30
34
 
31
35
  private
32
36
 
33
- attr_accessor :terminable
37
+ attr_accessor :matchable, :terminable
38
+
39
+ def matcher
40
+ @matcher ||=
41
+ if matchable
42
+ proc { |node, *inputs, **options| node.match?(*inputs, **options) }
43
+ else
44
+ proc { false }
45
+ end
46
+ end
47
+
48
+ def terminator
49
+ @terminator ||=
50
+ if terminable
51
+ proc { |node, output, *inputs, **options| node.terminate?(output, *inputs, **options) }
52
+ else
53
+ proc { false }
54
+ end
55
+ end
34
56
  end
35
57
  end
36
58
  end
@@ -0,0 +1,117 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CallableTree
4
+ module Node
5
+ module Internal
6
+ module Strategyable
7
+ def self.included(mod)
8
+ mod.extend ClassMethods
9
+ end
10
+
11
+ DEFAUTL_FACTORY = proc do |klass, *_args, matchable:, terminable:, **_kwargs|
12
+ klass.new(matchable: matchable, terminable: terminable)
13
+ end
14
+
15
+ @@strategy_configs = {
16
+ seek: {
17
+ klass: Strategy::Seek,
18
+ alias: :seekable,
19
+ matchable: true,
20
+ terminable: true,
21
+ factory: DEFAUTL_FACTORY
22
+ },
23
+ broadcast: {
24
+ klass: Strategy::Broadcast,
25
+ alias: :broadcastable,
26
+ matchable: true,
27
+ terminable: false,
28
+ factory: DEFAUTL_FACTORY
29
+ },
30
+ compose: {
31
+ klass: Strategy::Compose,
32
+ alias: :composable,
33
+ matchable: true,
34
+ terminable: false,
35
+ factory: DEFAUTL_FACTORY
36
+ }
37
+ }
38
+
39
+ class << self
40
+ private
41
+
42
+ def strategy_configs
43
+ @@strategy_configs
44
+ end
45
+
46
+ def define_strategy_methods(key, config)
47
+ define_method(:"#{config[:alias]}?") { strategy.is_a?(config[:klass]) }
48
+
49
+ define_method(config[:alias]) do |*args, matchable: config[:matchable], terminable: config[:terminable], **kwargs|
50
+ # TODO: Modify to use strategize method
51
+ if strategy == config[:factory].call(
52
+ config[:klass], *args, matchable: matchable, terminable: terminable, **kwargs
53
+ )
54
+ self
55
+ else
56
+ clone.__send__(:"#{config[:alias]}!", *args, matchable: matchable, terminable: terminable, **kwargs)
57
+ end
58
+ end
59
+
60
+ define_method(:"#{config[:alias]}!") do |*args, matchable: config[:matchable], terminable: config[:terminable], **kwargs|
61
+ strategize!(key, *args, matchable: matchable, terminable: terminable, **kwargs)
62
+ end
63
+ end
64
+ end
65
+
66
+ module ClassMethods
67
+ def store_strategy(key, config)
68
+ raise ::CallableTree::Error, 'Strategy class is required. [:klass]' unless config[:klass]
69
+
70
+ key = key.to_sym
71
+ config[:alias] = key unless config[:alias]
72
+ config[:factory] = DEFAUTL_FACTORY unless config[:factory]
73
+ Strategyable.__send__(:strategy_configs)[key] = config
74
+ Strategyable.__send__(:define_strategy_methods, key, config)
75
+ end
76
+ end
77
+
78
+ @@strategy_configs.each { |key, config| define_strategy_methods(key, config) }
79
+
80
+ # Backward compatibility
81
+ alias seek? seekable?
82
+ alias seek seekable
83
+ alias seek! seekable!
84
+ alias broadcast? broadcastable?
85
+ alias broadcast broadcastable
86
+ alias broadcast! broadcastable!
87
+ alias compose? composable?
88
+ alias compose composable
89
+ alias compose! composable!
90
+
91
+ protected
92
+
93
+ attr_writer :strategy
94
+
95
+ private
96
+
97
+ def strategize(name, *args, matchable:, terminable:, **kwargs)
98
+ clone.strategy!(name, *args, matchable: matchable, terminable: terminable, **kwargs)
99
+ end
100
+
101
+ def strategize!(name, *args, matchable:, terminable:, **kwargs)
102
+ config = @@strategy_configs[name.to_sym]
103
+ raise ::CallableTree::Error, "Strategy is not found. [#{name}]" unless config
104
+
105
+ self.strategy = config[:factory].call(
106
+ config[:klass], *args, matchable: matchable, terminable: terminable, **kwargs
107
+ )
108
+ self
109
+ end
110
+
111
+ def strategy
112
+ @strategy ||= @@strategy_configs[:seek][:klass].new
113
+ end
114
+ end
115
+ end
116
+ end
117
+ end
@@ -5,12 +5,13 @@ module CallableTree
5
5
  module Internal
6
6
  extend ::Forwardable
7
7
  include Node
8
+ include Strategyable
8
9
 
9
10
  def self.included(mod)
10
- if mod.include?(External)
11
- raise ::CallableTree::Error,
12
- "#{mod} cannot include #{self} together with #{External}"
13
- end
11
+ return unless mod.include?(External)
12
+
13
+ raise ::CallableTree::Error,
14
+ "#{mod} cannot include #{self} together with #{External}"
14
15
  end
15
16
 
16
17
  def_delegators :child_nodes, :[], :at
@@ -39,14 +40,14 @@ module CallableTree
39
40
  node = child_nodes.find(&block)
40
41
  return node if node
41
42
 
42
- if recursive
43
- child_nodes
44
- .lazy
45
- .select(&:internal?)
46
- .map { |node| node.find(recursive: true, &block) }
47
- .reject(&:nil?)
48
- .first
49
- end
43
+ return unless recursive
44
+
45
+ child_nodes
46
+ .lazy
47
+ .select(&:internal?)
48
+ .map { |node| node.find(recursive: true, &block) }
49
+ .reject(&:nil?)
50
+ .first
50
51
  end
51
52
 
52
53
  def reject(recursive: false, &block)
@@ -85,72 +86,6 @@ module CallableTree
85
86
  strategy.call(child_nodes, *inputs, **options)
86
87
  end
87
88
 
88
- def seek?
89
- strategy.is_a?(Strategy::Seek)
90
- end
91
-
92
- def seek(terminable: true)
93
- if strategy == Strategy::Seek.new(terminable: terminable)
94
- self
95
- else
96
- clone.seek!(terminable: terminable)
97
- end
98
- end
99
-
100
- def seek!(terminable: true)
101
- self.strategy = Strategy::Seek.new(terminable: terminable)
102
-
103
- self
104
- end
105
-
106
- alias seekable? seek?
107
- alias seekable seek
108
- alias seekable! seek!
109
-
110
- def broadcast?
111
- strategy.is_a?(Strategy::Broadcast)
112
- end
113
-
114
- def broadcast(terminable: false)
115
- if strategy == Strategy::Broadcast.new(terminable: terminable)
116
- self
117
- else
118
- clone.broadcast!(terminable: terminable)
119
- end
120
- end
121
-
122
- def broadcast!(terminable: false)
123
- self.strategy = Strategy::Broadcast.new(terminable: terminable)
124
-
125
- self
126
- end
127
-
128
- alias broadcastable? broadcast?
129
- alias broadcastable broadcast
130
- alias broadcastable! broadcast!
131
-
132
- def compose?
133
- strategy.is_a?(Strategy::Compose)
134
- end
135
-
136
- def compose(terminable: false)
137
- if strategy == Strategy::Compose.new(terminable: terminable)
138
- self
139
- else
140
- clone.compose!(terminable: terminable)
141
- end
142
- end
143
-
144
- def compose!(terminable: false)
145
- self.strategy = Strategy::Compose.new(terminable: terminable)
146
-
147
- self
148
- end
149
-
150
- alias composable? compose?
151
- alias composable compose
152
- alias composable! compose!
153
-
154
89
  def outline(&block)
155
90
  key = block ? block.call(self) : identity
156
91
  value = child_nodes.reduce({}) { |memo, node| memo.merge!(node.outline(&block)) }
@@ -165,10 +100,6 @@ module CallableTree
165
100
  false
166
101
  end
167
102
 
168
- protected
169
-
170
- attr_writer :strategy
171
-
172
103
  def child_nodes
173
104
  @child_nodes ||= []
174
105
  end
@@ -186,10 +117,6 @@ module CallableTree
186
117
  .tap { |node| node.parent = self }
187
118
  end
188
119
 
189
- def strategy
190
- @strategy ||= Strategy::Seek.new
191
- end
192
-
193
120
  def initialize_copy(_node)
194
121
  super
195
122
  self.parent = nil
@@ -13,7 +13,7 @@ module CallableTree
13
13
  node = self
14
14
  loop do
15
15
  y << node
16
- break unless node = node.parent
16
+ break unless (node = node.parent)
17
17
  end
18
18
  end
19
19
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CallableTree
4
- VERSION = '0.3.9'
4
+ VERSION = '0.3.10'
5
5
  end
data/lib/callable_tree.rb CHANGED
@@ -14,6 +14,7 @@ require_relative 'callable_tree/node/internal/strategy'
14
14
  require_relative 'callable_tree/node/internal/strategy/broadcast'
15
15
  require_relative 'callable_tree/node/internal/strategy/seek'
16
16
  require_relative 'callable_tree/node/internal/strategy/compose'
17
+ require_relative 'callable_tree/node/internal/strategyable'
17
18
  require_relative 'callable_tree/node/external/verbose'
18
19
  require_relative 'callable_tree/node/external'
19
20
  require_relative 'callable_tree/node/internal'
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.9
4
+ version: 0.3.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - jsmmr
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-11-06 00:00:00.000000000 Z
11
+ date: 2022-12-30 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
@@ -68,6 +68,7 @@ files:
68
68
  - lib/callable_tree/node/internal/strategy/broadcast.rb
69
69
  - lib/callable_tree/node/internal/strategy/compose.rb
70
70
  - lib/callable_tree/node/internal/strategy/seek.rb
71
+ - lib/callable_tree/node/internal/strategyable.rb
71
72
  - lib/callable_tree/node/root.rb
72
73
  - lib/callable_tree/version.rb
73
74
  homepage: https://github.com/jsmmr/ruby_callable_tree
@@ -76,7 +77,7 @@ licenses:
76
77
  metadata:
77
78
  homepage_uri: https://github.com/jsmmr/ruby_callable_tree
78
79
  source_code_uri: https://github.com/jsmmr/ruby_callable_tree
79
- changelog_uri: https://github.com/jsmmr/ruby_callable_tree/blob/v0.3.9/CHANGELOG.md
80
+ changelog_uri: https://github.com/jsmmr/ruby_callable_tree/blob/v0.3.10/CHANGELOG.md
80
81
  rubygems_mfa_required: 'true'
81
82
  post_install_message:
82
83
  rdoc_options: []
@@ -93,7 +94,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
93
94
  - !ruby/object:Gem::Version
94
95
  version: '0'
95
96
  requirements: []
96
- rubygems_version: 3.3.7
97
+ rubygems_version: 3.4.1
97
98
  signing_key:
98
99
  specification_version: 4
99
100
  summary: Builds a tree by linking callable nodes. The nodes that match the conditions