Sha256: 95e105e2eb5dc1859936618d2966389ba775e722a2bc883f46c84c4d5a4803d5

Contents?: true

Size: 1.56 KB

Versions: 4

Compression:

Stored size: 1.56 KB

Contents

module Datadog
  module Contrib
    # Base provides features that are shared across all integrations
    module Patchable
      def self.included(base)
        base.send(:extend, ClassMethods)
        base.send(:include, InstanceMethods)
      end

      # Class methods for integrations
      module ClassMethods
        def version
          nil
        end

        # Is the target available? (e.g. gem installed?)
        def available?
          !version.nil?
        end

        # Is the target loaded into the application? (e.g. constants defined?)
        def loaded?
          true
        end

        # Is the loaded code compatible with this integration? (e.g. minimum version met?)
        def compatible?
          available? && Gem::Version.new(RUBY_VERSION) >= Gem::Version.new(VERSION::MINIMUM_RUBY_VERSION)
        end

        # Can the patch for this integration be applied?
        def patchable?
          available? && loaded? && compatible?
        end
      end

      # Instance methods for integrations
      module InstanceMethods
        def patcher
          nil
        end

        def patch
          if !self.class.patchable? || patcher.nil?
            desc = "Available?: #{self.class.available?}"
            desc += ", Loaded? #{self.class.loaded?}"
            desc += ", Compatible? #{self.class.compatible?}"
            desc += ", Patchable? #{self.class.patchable?}"

            Datadog::Logger.log.warn("Unable to patch #{self.class.name} (#{desc})")
            return
          end

          patcher.patch
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
ddtrace-0.34.2 lib/ddtrace/contrib/patchable.rb
ddtrace-0.34.1 lib/ddtrace/contrib/patchable.rb
ddtrace-0.34.0 lib/ddtrace/contrib/patchable.rb
ddtrace-0.33.1 lib/ddtrace/contrib/patchable.rb