Sha256: ed1ef6339f45fa5cff2fd63045780986cca06c8ea0504003d394939dd60b641b

Contents?: true

Size: 818 Bytes

Versions: 1

Compression:

Stored size: 818 Bytes

Contents

require_relative 'registry/registerable'

module Datadog
  # Registry provides insertion/retrieval capabilities for integrations
  class Registry
    include Enumerable

    Entry = Struct.new(:name, :klass, :auto_patch)

    def initialize
      @data = {}
      @mutex = Mutex.new
    end

    def add(name, klass, auto_patch = false)
      @mutex.synchronize do
        @data[name] = Entry.new(name, klass, auto_patch).freeze
      end
    end

    def each
      @mutex.synchronize do
        @data.each { |_, entry| yield(entry) }
      end
    end

    def [](name)
      entry = @data[name]
      entry.klass if entry
    end

    def to_h
      @mutex.synchronize do
        @data.each_with_object({}) do |(_, entry), hash|
          hash[entry.name] = entry.auto_patch
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ddtrace-0.15.0.beta1 lib/ddtrace/registry.rb