Module: Datadog::Patcher::CommonMethods

Included in:
Datadog::Patcher
Defined in:
lib/ddtrace/patcher.rb

Overview

Defines some common methods for patching, that can be used at the instance, class, or module level.

Instance Method Summary collapse

Instance Method Details

#do_once(key = nil, options = {}) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/ddtrace/patcher.rb', line 24

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

#done?(key, options = {}) ⇒ Boolean

Returns:

  • (Boolean)


38
39
40
41
# File 'lib/ddtrace/patcher.rb', line 38

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

#without_warningsObject



12
13
14
15
16
17
18
19
20
21
22
# File 'lib/ddtrace/patcher.rb', line 12

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