Sha256: 9b1a56ae419973927e6990907b5a7c501d2faef865b05081cf7a0b5a48c5c6c4
Contents?: true
Size: 1.1 KB
Versions: 7
Compression:
Stored size: 1.1 KB
Contents
module NulogyMessageBusConsumer class Pipeline def initialize(steps) @steps = steps end def invoke convert_steps_into_lambda.call end def insert(step, after:) index = @steps.find_index { |s| s.is_a?(after) } @steps.insert(index + 1, step) end def append(step) @steps << step end private def convert_steps_into_lambda last_step = ->(**_) { raise "Handlers are the end of the line. Do not use yield." } @steps.reverse.reduce(last_step) do |composed_steps, previous_step| lambda do |**args| invoke_next = compose_with_merged_args(args, composed_steps) previous_step.call(**args, &invoke_next) end end end def compose_with_merged_args(existing_args, func) lambda do |**yielded_args| args_to_be_overridden = existing_args.keys & yielded_args.keys if args_to_be_overridden.any? raise "Cannot override existing argument(s): #{args_to_be_overridden.join(", ")}" end func.call(**existing_args.merge(yielded_args)) end end end end
Version data entries
7 entries across 7 versions & 1 rubygems