# frozen_string_literal: true module Wayfarer module Middleware Chain = Struct.new(:middlewares) do def call(task) traverse = lambda do |i| if middlewares[i] middlewares[i].call(task) { traverse.call(i + 1) } elsif block_given? yield end end traverse.call(0) end end end end