Sha256: 0e1cb33f52573f91c4f5c7767698fdf5e6b478272f516e7c23e32aac592e5a8a

Contents?: true

Size: 1.28 KB

Versions: 38

Compression:

Stored size: 1.28 KB

Contents

# frozen_string_literal: true

require_relative 'address_hash'
require_relative 'subscriber'

module Datadog
  module AppSec
    module Reactive
      # Reactive Engine
      class Engine
        def initialize
          @data = {}
          @subscribers = AddressHash.new
        end

        def subscribe(*addresses, &block)
          @subscribers[addresses.freeze] << Subscriber.new(&block)
        end

        def publish(address, value)
          # check if someone has address subscribed
          if @subscribers.addresses.include?(address)

            # someone will be interested, set value
            @data[address] = value

            # find candidates i.e address groups that contain the just posted address
            @subscribers.with(address).each do |addresses|
              # find targets to the address group containing the posted address
              subscribers = @subscribers[addresses]

              # is all data for the targets available?
              if (addresses - @data.keys).empty?
                hash = addresses.each_with_object({}) { |a, h| h[a] = @data[a] }
                subscribers.each { |s| s.call(*hash.values) }
              end
            end
          end
        end

        private

        attr_reader :subscribers, :data
      end
    end
  end
end

Version data entries

38 entries across 38 versions & 2 rubygems

Version Path
datadog-2.10.0 lib/datadog/appsec/reactive/engine.rb
datadog-2.9.0 lib/datadog/appsec/reactive/engine.rb
datadog-2.8.0 lib/datadog/appsec/reactive/engine.rb
datadog-2.7.1 lib/datadog/appsec/reactive/engine.rb
datadog-2.7.0 lib/datadog/appsec/reactive/engine.rb
datadog-2.6.0 lib/datadog/appsec/reactive/engine.rb
datadog-2.5.0 lib/datadog/appsec/reactive/engine.rb
datadog-2.4.0 lib/datadog/appsec/reactive/engine.rb
datadog-2.3.0 lib/datadog/appsec/reactive/engine.rb
datadog-2.2.0 lib/datadog/appsec/reactive/engine.rb
ddtrace-1.23.3 lib/datadog/appsec/reactive/engine.rb
ddtrace-1.23.2 lib/datadog/appsec/reactive/engine.rb
datadog-2.1.0 lib/datadog/appsec/reactive/engine.rb
datadog-2.0.0 lib/datadog/appsec/reactive/engine.rb
ddtrace-1.23.1 lib/datadog/appsec/reactive/engine.rb
datadog-2.0.0.beta2 lib/datadog/appsec/reactive/engine.rb
ddtrace-1.22.0 lib/datadog/appsec/reactive/engine.rb
datadog-2.0.0.beta1 lib/datadog/appsec/reactive/engine.rb
ddtrace-1.21.1 lib/datadog/appsec/reactive/engine.rb
ddtrace-1.21.0 lib/datadog/appsec/reactive/engine.rb