Sha256: a7b6591a9cac6dac0f27fea8d452ad94397ec74d37c36b49cb7f092f225d5285

Contents?: true

Size: 1.37 KB

Versions: 51

Compression:

Stored size: 1.37 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, options = {})
        # If already done, don't do again
        @done_once ||= Hash.new { |h, k| h[k] = {} }
        if @done_once.key?(key) && @done_once[key].key?(options[:for])
          return @done_once[key][options[:for]]
        end

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

      def done?(key, options = {})
        return false unless instance_variable_defined?(:@done_once)
        !@done_once.nil? && @done_once.key?(key) && @done_once[key].key?(options[:for])
      end
    end

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

Version data entries

51 entries across 51 versions & 2 rubygems

Version Path
ddtrace-0.45.0 lib/ddtrace/patcher.rb
ddtrace-0.44.0 lib/ddtrace/patcher.rb
ddtrace-0.43.0 lib/ddtrace/patcher.rb
ddtrace-0.42.0 lib/ddtrace/patcher.rb
ddtrace-0.41.0 lib/ddtrace/patcher.rb
ls-trace-0.2.0 lib/ddtrace/patcher.rb
ddtrace-0.40.0 lib/ddtrace/patcher.rb
ddtrace-0.39.0 lib/ddtrace/patcher.rb
ddtrace-0.38.0 lib/ddtrace/patcher.rb
ddtrace-0.37.0 lib/ddtrace/patcher.rb
ddtrace-0.36.0 lib/ddtrace/patcher.rb
ls-trace-0.1.2 lib/ddtrace/patcher.rb
ddtrace-0.35.2 lib/ddtrace/patcher.rb
ddtrace-0.35.1 lib/ddtrace/patcher.rb
ddtrace-0.35.0 lib/ddtrace/patcher.rb
ddtrace-0.34.2 lib/ddtrace/patcher.rb
ddtrace-0.34.1 lib/ddtrace/patcher.rb
ddtrace-0.34.0 lib/ddtrace/patcher.rb
ddtrace-0.33.1 lib/ddtrace/patcher.rb
ddtrace-0.33.0 lib/ddtrace/patcher.rb