class Datadog::AppSec::Instrumentation::Gateway

def push(name, env, &block)

def push(name, env, &block)
  block ||= -> {}
  middlewares_for_name = middlewares[name]
  return [block.call, nil] if middlewares_for_name.empty?
  wrapped = lambda do |_env|
    [block.call, nil]
  end
  # TODO: handle exceptions, except for wrapped
  stack = middlewares_for_name.reverse.reduce(wrapped) do |next_, middleware|
    lambda do |env_|
      middleware.call(next_, env_)
    end
  end
  stack.call(env)
end