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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d7daab378247c364839a830fd43b028fd0933cef6026a1df1a614fb4a59c7a66
4
- data.tar.gz: 66ac7c3de2198ef3acd80bddadeccc0f3ccd34e5a3d3de7d959bd43fb0801436
3
+ metadata.gz: c16eb0b2fd83ffd98d61bca938bd449dac9c004e8240c4f1a3b61242bf841163
4
+ data.tar.gz: 9919ffcda275a5a5bcf81b0bfae40087cae1f701fc0b7b915fece81c21a79d6b
5
5
  SHA512:
6
- metadata.gz: 7b15c987aeeab91a5250f48e6d429d4176478f74dc7866a0209b0cf7f82909f58fa8f96dbae30c5d37151e63f8dab6c1e8028b2faf15b3919d9afe9ed43eb4fd
7
- data.tar.gz: eb1017e10c4f94635058523979c2aeea5edd7d6899a932f2481ae72bd93b74657cd73dc2c1a12935b069e34910f9dba260ef8b62cb70e8a4f4b6dc73915ba0e5
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
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- callable_tree (0.3.0)
4
+ callable_tree (0.3.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
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
 
@@ -5,6 +5,8 @@ module CallableTree
5
5
  module Internal
6
6
  module Strategy
7
7
  class Broadcast
8
+ include Strategy
9
+
8
10
  def call(nodes, *inputs, **options)
9
11
  nodes.map do |node|
10
12
  node.call(*inputs, **options) if node.match?(*inputs, **options)
@@ -5,6 +5,8 @@ module CallableTree
5
5
  module Internal
6
6
  module Strategy
7
7
  class Compose
8
+ include Strategy
9
+
8
10
  def call(nodes, *inputs, **options)
9
11
  head, *tail = inputs
10
12
  nodes.reduce(head) do |input, node|
@@ -5,6 +5,8 @@ module CallableTree
5
5
  module Internal
6
6
  module Strategy
7
7
  class Seek
8
+ include Strategy
9
+
8
10
  def call(nodes, *inputs, **options)
9
11
  nodes
10
12
  .lazy
@@ -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) } # Use Array#push for Ruby 2.4
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 strategy.is_a?(Strategy::Seek)
71
+ if seek?
68
72
  self
69
73
  else
70
74
  clone.tap do |node|
71
- node.send(:strategy=, Strategy::Seek.new)
75
+ node.strategy = Strategy::Seek.new
72
76
  end
73
77
  end
74
78
  end
75
79
 
76
80
  def seek!
77
- self.strategy = Strategy::Seek.new unless strategy.is_a?(Strategy::Seek)
78
- self
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 strategy.is_a?(Strategy::Broadcast)
91
+ if broadcast?
83
92
  self
84
93
  else
85
94
  clone.tap do |node|
86
- node.send(:strategy=, Strategy::Broadcast.new)
95
+ node.strategy = Strategy::Broadcast.new
87
96
  end
88
97
  end
89
98
  end
90
99
 
91
100
  def broadcast!
92
- self.strategy = Strategy::Broadcast.new unless strategy.is_a?(Strategy::Broadcast)
93
- self
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 strategy.is_a?(Strategy::Compose)
111
+ if compose?
98
112
  self
99
113
  else
100
114
  clone.tap do |node|
101
- node.send(:strategy=, Strategy::Compose.new)
115
+ node.strategy = Strategy::Compose.new
102
116
  end
103
117
  end
104
118
  end
105
119
 
106
120
  def compose!
107
- self.strategy = Strategy::Compose.new unless strategy.is_a?(Strategy::Compose)
108
- self
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, :strategy
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.send(:parent=, self) }
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.send(:parent=, self) }
161
+ node.clone.tap { |new_node| new_node.parent = self }
145
162
  end
146
163
  end
147
164
  end
@@ -46,7 +46,7 @@ module CallableTree
46
46
  !output.nil?
47
47
  end
48
48
 
49
- private
49
+ protected
50
50
 
51
51
  attr_writer :parent
52
52
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CallableTree
4
- VERSION = '0.3.0'
4
+ VERSION = '0.3.1'
5
5
  end
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.0
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: 2021-12-27 00:00:00.000000000 Z
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.0/CHANGELOG.md
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: