Class: Kube::Cluster::Manifest::Stack
- Inherits:
-
Object
- Object
- Kube::Cluster::Manifest::Stack
- Defined in:
- lib/kube/cluster/manifest/stack.rb
Overview
An ordered pipeline of middleware that processes the full manifest at each stage. Each stage flat_maps individual resources through a single middleware — so generative middleware can introduce new resources that subsequent stages will see and process.
stack = Kube::Cluster::Manifest::Stack.new do
use Middleware::ServiceForDeployment # generates Services
use Middleware::Labels, app: "web" # labels everything, including generated Services
use Middleware::ResourcePreset # sizes everything
end
processed = stack.call(resources)
Instance Method Summary collapse
-
#call(resources) ⇒ Array<Kube::Schema::Resource>
Run the full resource array through every middleware stage in order.
-
#empty? ⇒ Boolean
True when no middleware has been registered.
-
#initialize(&block) ⇒ Stack
constructor
A new instance of Stack.
-
#use(klass, *args, **kwargs) ⇒ Object
Register a middleware class with optional positional and keyword arguments.
Constructor Details
#initialize(&block) ⇒ Stack
Returns a new instance of Stack.
20 21 22 23 |
# File 'lib/kube/cluster/manifest/stack.rb', line 20 def initialize(&block) @middleware = [] instance_eval(&block) if block end |
Instance Method Details
#call(resources) ⇒ Array<Kube::Schema::Resource>
Run the full resource array through every middleware stage in order. At each stage, every resource is passed individually through the middleware. Middleware can return a single resource (transform) or an array of resources (generative). The results are collected into the array for the next stage.
42 43 44 45 46 47 |
# File 'lib/kube/cluster/manifest/stack.rb', line 42 def call(resources) @middleware.reduce(resources) do |current, (klass, args, kwargs)| middleware = klass.new(*args, **kwargs) current.flat_map { |r| Array(middleware.call(r)) } end end |
#empty? ⇒ Boolean
True when no middleware has been registered.
50 51 52 |
# File 'lib/kube/cluster/manifest/stack.rb', line 50 def empty? @middleware.empty? end |
#use(klass, *args, **kwargs) ⇒ Object
Register a middleware class with optional positional and keyword arguments.
30 31 32 |
# File 'lib/kube/cluster/manifest/stack.rb', line 30 def use(klass, *args, **kwargs) @middleware << [klass, args, kwargs] end |