Class: Datadog::AppSec::Instrumentation::Gateway

Inherits:
Object
  • Object
show all
Defined in:
lib/datadog/appsec/instrumentation/gateway.rb,
lib/datadog/appsec/instrumentation/gateway/argument.rb,
lib/datadog/appsec/instrumentation/gateway/middleware.rb

Overview

Instrumentation gateway implementation

Defined Under Namespace

Classes: Argument, DataContainer, Middleware, User

Instance Method Summary collapse

Constructor Details

#initialize ⇒ Gateway

Returns a new instance of Gateway.



11
12
13
# File 'lib/datadog/appsec/instrumentation/gateway.rb', line 11

def initialize
  @middlewares = Hash.new { |h, k| h[k] = [] }
end

Instance Method Details

#push(name, env, &block) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/datadog/appsec/instrumentation/gateway.rb', line 15

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

#watch(name, &block) ⇒ Object



35
36
37
# File 'lib/datadog/appsec/instrumentation/gateway.rb', line 35

def watch(name, &block)
  @middlewares[name] << Middleware.new(&block)
end