Sha256: 0fe83c04f7ead16f7c731a8be9e37032d12118bf6b39155e9dafef95286d7be8

Contents?: true

Size: 1.05 KB

Versions: 9

Compression:

Stored size: 1.05 KB

Contents

module Datadog
  # Defines some useful patching methods for integrations
  module Patcher
    def self.included(base)
      base.send(:extend, CommonMethods)
      base.send(:include, CommonMethods)
    end

    # Defines some common methods for patching, that can be used
    # at the instance, class, or module level.
    module CommonMethods
      def without_warnings
        # This is typically used when monkey patching functions such as
        # intialize, which Ruby advices you not to. Use cautiously.
        v = $VERBOSE
        $VERBOSE = nil
        begin
          yield
        ensure
          $VERBOSE = v
        end
      end

      def do_once(key = nil)
        # If already done, don't do again
        @done_once ||= {}
        return @done_once[key] if @done_once.key?(key)

        # Otherwise 'do'
        yield.tap do
          # Then add the key so we don't do again.
          @done_once[key] = true
        end
      end
    end

    # Extend the common methods so they're available as a module function.
    extend(CommonMethods)
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
ddtrace-0.13.2 lib/ddtrace/patcher.rb
ddtrace-0.13.1 lib/ddtrace/patcher.rb
ddtrace-0.13.0 lib/ddtrace/patcher.rb
ddtrace-0.12.1 lib/ddtrace/patcher.rb
ddtrace-0.13.0.beta1 lib/ddtrace/patcher.rb
ddtrace-0.12.0 lib/ddtrace/patcher.rb
ddtrace-0.12.0.rc1 lib/ddtrace/patcher.rb
ddtrace-0.11.4 lib/ddtrace/patcher.rb
ddtrace-0.11.3 lib/ddtrace/patcher.rb