Sha256: c3b7487abeed5f849b1d2b5f52a88cb69ece3881d0405287fa87f3054b4e8709
Contents?: true
Size: 987 Bytes
Versions: 9
Compression:
Stored size: 987 Bytes
Contents
# typed: true module Datadog module AppSec # Instrumentation for AppSec module Instrumentation # Instrumentation gateway implementation class Gateway def initialize @middlewares = Hash.new { |h, k| h[k] = [] } end def push(name, env, &block) block ||= -> {} middlewares = @middlewares[name] return [block.call, nil] if middlewares.empty? wrapped = lambda do |_env| [block.call, nil] end # TODO: handle exceptions, except for wrapped stack = middlewares.reverse.reduce(wrapped) do |next_, middleware| lambda do |env_| middleware.call(next_, env_) end end stack.call(env) end def watch(name, &block) @middlewares[name] << block end end def self.gateway @gateway ||= Gateway.new # TODO: not thread safe end end end end
Version data entries
9 entries across 9 versions & 1 rubygems