Sha256: 39e99a56cbfdc567137b86ae2546f761ee3360395a4a41ef3617919467c4ed23

Contents?: true

Size: 1.76 KB

Versions: 9

Compression:

Stored size: 1.76 KB

Contents

# frozen_string_literal: true

module Datadog
  module Core
    # Contains behavior for handling deprecated functions in the codebase.
    module Deprecations
      # Records the occurrence of a deprecated operation in this library.
      #
      # Currently, these operations are logged to `Datadog.logger` at `warn` level.
      #
      # `disallowed_next_major` adds a message informing that the deprecated operation
      # won't be allowed in the next major release.
      #
      # @yieldreturn [String] a String with the lazily evaluated deprecation message.
      # @param [Boolean] disallowed_next_major whether this deprecation will be enforced in the next major release.
      # @param [Object] key A unique key for the deprecation. Only the first message with the same key will be logged.
      def log_deprecation(disallowed_next_major: true, key: nil)
        return unless log_deprecation?(key)

        Datadog.logger.warn do
          message = yield
          message += ' This will be enforced in the next major release.' if disallowed_next_major
          message
        end

        # Track the deprecation being logged.
        deprecation_logged!(key)

        nil
      end

      private

      # Determines whether a deprecation message should be logged.
      #
      # Internal use only.
      def log_deprecation?(key)
        return true if key.nil?

        # Only allow a deprecation to be logged once.
        !logged_deprecations.key?(key)
      end

      def deprecation_logged!(key)
        return if key.nil?

        logged_deprecations[key] += 1
      end

      # Tracks what deprecation warnings have already been logged
      #
      # Internal use only.
      def logged_deprecations
        @logged_deprecations ||= Hash.new(0)
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
datadog-2.9.0 lib/datadog/core/deprecations.rb
datadog-2.8.0 lib/datadog/core/deprecations.rb
datadog-2.7.1 lib/datadog/core/deprecations.rb
datadog-2.7.0 lib/datadog/core/deprecations.rb
datadog-2.6.0 lib/datadog/core/deprecations.rb
datadog-2.5.0 lib/datadog/core/deprecations.rb
datadog-2.4.0 lib/datadog/core/deprecations.rb
datadog-2.3.0 lib/datadog/core/deprecations.rb
datadog-2.2.0 lib/datadog/core/deprecations.rb