lib/ddtrace/contrib/configuration/resolver.rb in ddtrace-0.46.0 vs lib/ddtrace/contrib/configuration/resolver.rb in ddtrace-0.47.0
- old
+ new
@@ -1,15 +1,80 @@
module Datadog
module Contrib
module Configuration
- # Resolves a configuration key to a Datadog::Contrib::Configuration:Settings object
+ # Resolves an integration-specific matcher to an associated
+ # object.
+ #
+ # Integrations that perform any configuration matching
+ # based on patterns might want to override this class
+ # to provide richer matching. For example, match configuration
+ # based on: HTTP request parameters, request headers,
+ # async queue name.
+ #
+ # When overriding this class, for simple use cases, only
+ # overriding `#parse_matcher` might suffice. See
+ # `#parse_matcher`'s documentation for more information.
class Resolver
- def resolve(key)
- key
+ attr_reader :configurations
+
+ def initialize
+ @configurations = {}
end
- def add(key)
- key
+ # Adds a new `matcher`, associating with it a `value`.
+ #
+ # This `value` is returned when `#resolve` is called
+ # with a matching value for this matcher. When multiple
+ # matchers would match, `#resolve` returns the latest
+ # added one.
+ #
+ # The `matcher` can be transformed internally by the
+ # `#parse_matcher` method before being stored.
+ #
+ # The `value` can also be retrieved by calling `#get`
+ # with the same `matcher` added by this method.
+ #
+ # @param [Object] matcher integration-specific matcher
+ # @param [Object] value arbitrary value to be associated with `matcher`
+ def add(matcher, value)
+ @configurations[parse_matcher(matcher)] = value
+ end
+
+ # Retrieves the stored value for a `matcher`
+ # previously stored by `#add`.
+ #
+ # @param [Object] matcher integration-specific matcher
+ # @return [Object] previously stored `value` from `#add`, or `nil` if not found
+ def get(matcher)
+ @configurations[parse_matcher(matcher)]
+ end
+
+ # Matches an arbitrary value against the configured
+ # matchers previously set with `#add`.
+ #
+ # If multiple matchers would match, returns the latest one.
+ #
+ # @param [Object] value integration-specific value
+ # @return [Object] matching `value` configured at `#add`, or `nil` if none match
+ def resolve(value)
+ @configurations[value]
+ end
+
+ protected
+
+ # Converts `matcher` into an appropriate key
+ # for the internal Hash storage.
+ #
+ # It's recommended to override this method,
+ # instead of the public methods, if the
+ # integration can simply convert both
+ # `matcher` (provided to `#add`) and `value`
+ # (provided to `#resolve`) to the same value.
+ #
+ # @param [Object] matcher integration-specific matcher
+ # @return [Object] processed matcher
+ def parse_matcher(matcher)
+ matcher
end
end
end
end
end