Sha256: 8fc60a073d6ed072c467cea02dd8affde2c83edefb7cb1b83e6fcbc1d04705a9
Contents?: true
Size: 1.46 KB
Versions: 1
Compression:
Stored size: 1.46 KB
Contents
module NxtPipeline class Callbacks def initialize(pipeline:) @registry = build_registry @pipeline = pipeline end def register(path, callback) registry.resolve!(*path) << callback end def run(kind_of_callback, type, change_set) callbacks = registry.resolve!(kind_of_callback, type) return unless callbacks.any? callbacks.inject(change_set) do |changes, callback| run_callback(callback, changes) end end def around(type, change_set, &execution) around_callbacks = registry.resolve!(:around, type) return execution.call unless around_callbacks.any? callback_chain = around_callbacks.reverse.inject(execution) do |previous, callback| -> { callback.call(change_set, previous, pipeline) } end callback_chain.call end private attr_reader :registry, :pipeline def run_callback(callback, change_set) args = [change_set, pipeline] args = args.take(callback.arity) unless callback.arity.negative? callback.call(*args) end def build_registry NxtRegistry::Registry.new(:callbacks) do register(:before) do register(:step, []) register(:execution, []) end register(:around) do register(:step, []) register(:execution, []) end register(:after) do register(:step, []) register(:execution, []) end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
nxt_pipeline-2.0.0 | lib/nxt_pipeline/callbacks.rb |