build 2.8.0 → 2.9.0

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: 9be6ae7b6f18b932ee30e00ac9951d3095215722bc8ff479a58a5c51cd7f81e5
4
- data.tar.gz: 3afcfb408bb6b50028db3454fa457d35e54a5fa28e1caec6761d32eed2c9f16f
3
+ metadata.gz: b92547e352a87437f672b77a83666f9295deebb585c8949969e377dc2325cbb5
4
+ data.tar.gz: 364a58f6aa86c31a039b7cd5b39e6706128ad46bd84912df2d48098833c260bc
5
5
  SHA512:
6
- metadata.gz: b8d546ed317a43d2f41bf5c356c84b7fcd05040993041367b3c7197334a003f5dace3866fb3133033fa0e18c0ca814c98675c7a16f82726396fd30ca587a4eb8
7
- data.tar.gz: c77c91809ebe9132923e383f618fef77e49a8571cdbd670b538625bb003cff57dd1dc0a60da5c344bb3a344326fcea7b5c4a8e35e9f92c5529ca6c8f2600ea9c
6
+ metadata.gz: 1c3583294056a16e3042a3d6ece645f326669bb5c13c0fad8507b5198d6a29e20fe82f266f8aba55787964ae1730d2e7ca021e0f9eba4d6c19666bb6594631f7
7
+ data.tar.gz: 91637b6d29d74cff4246741955d8a8b2a082510fd1a0b48ebc8228f60c48987f5a44e06718a452db3dbd4b9cadebbb04e7b0e2e628caadbbd97ee79f32a2d86d
checksums.yaml.gz.sig CHANGED
Binary file
@@ -20,15 +20,43 @@ require "console"
20
20
  module Build
21
21
  # Represents the top-level build controller that manages the walker and process group.
22
22
  class Controller
23
+ # A builder class for constructing the controller.
24
+ class Builder
25
+ # Initialize the builder with an empty list of nodes.
26
+ def initialize
27
+ @nodes = []
28
+ end
29
+
30
+ # @attribute [Array(Graph::Node)] The list of nodes to build.
31
+ attr :nodes
32
+
33
+ # Add a build environment to the controller.
34
+ def add_chain(chain, arguments = [], environment)
35
+ @nodes << ChainNode.new(chain, arguments, environment)
36
+ end
37
+ end
38
+
39
+ # Create a new controller using a builder.
40
+ def self.build(**options)
41
+ builder = Builder.new
42
+
43
+ yield builder
44
+
45
+ new(builder.nodes, **options)
46
+ end
47
+
23
48
  # Initialize the controller, yielding self to allow adding chain nodes.
24
49
  # @parameter limit [Integer | Nil] Maximum number of concurrent processes.
25
- def initialize(limit: nil)
26
- @module = Module.new
27
-
28
- # Top level nodes, for sanity this is a static list.
29
- @nodes = []
30
- yield self
31
- @nodes.freeze
50
+ def initialize(nodes = [], limit: nil)
51
+ if block_given?
52
+ warn "Passing a block to Build::Controller.new is deprecated, use Build::Controller.build instead."
53
+
54
+ builder = Builder.new
55
+ yield builder
56
+ @nodes = builder.nodes.freeze
57
+ else
58
+ @nodes = nodes.freeze
59
+ end
32
60
 
33
61
  @group = Process::Group.new(limit: limit)
34
62
 
@@ -41,6 +69,15 @@ module Build
41
69
  attr :nodes
42
70
  attr :walker
43
71
 
72
+ # Visit a task, executing its update method within the context of the task's visit method.
73
+ #
74
+ # @parameter task [Build::Task] The task to visit.
75
+ def visit(task)
76
+ task.visit do
77
+ task.update
78
+ end
79
+ end
80
+
44
81
  # Execute a single step of the build graph for the given node.
45
82
  # @parameter walker [Build::Graph::Walker] The graph walker.
46
83
  # @parameter node [Build::Graph::Node] The node to process.
@@ -49,9 +86,7 @@ module Build
49
86
  task_class = node.task_class(parent_task) || Task
50
87
  task = task_class.new(walker, node, @group)
51
88
 
52
- task.visit do
53
- task.update
54
- end
89
+ self.visit(task)
55
90
  end
56
91
 
57
92
  # @returns [Boolean] Whether the build has failed.
@@ -59,11 +94,6 @@ module Build
59
94
  @walker.failed?
60
95
  end
61
96
 
62
- # Add a build environment to the controller.
63
- def add_chain(chain, arguments = [], environment)
64
- @nodes << ChainNode.new(chain, arguments, environment)
65
- end
66
-
67
97
  # Execute all top-level nodes, waiting for each to complete.
68
98
  def update
69
99
  @nodes.each do |node|
data/lib/build/version.rb CHANGED
@@ -5,5 +5,5 @@
5
5
 
6
6
  # @namespace
7
7
  module Build
8
- VERSION = "2.8.0"
8
+ VERSION = "2.9.0"
9
9
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: build
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.0
4
+ version: 2.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
metadata.gz.sig CHANGED
Binary file