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 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: