Module: ActiveSupport::Deprecation::Reporting

Included in:
ActiveSupport::Deprecation
Defined in:
activesupport/lib/active_support/deprecation/reporting.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#gem_nameObject

Name of gem where method is deprecated



11
12
13
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 11

def gem_name
  @gem_name
end

#silencedObject



55
56
57
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 55

def silenced
  @silenced || @silence_counter.value.nonzero?
end

Instance Method Details

#allow(allowed_warnings = :all, if: true, &block) ⇒ Object

Allow previously disallowed deprecation warnings within the block. allowed_warnings can be an array containing strings, symbols, or regular expressions. (Symbols are treated as strings). These are compared against the text of deprecation warning messages generated within the block. Matching warnings will be exempt from the rules set by ActiveSupport::Deprecation#disallowed_warnings

The optional if: argument accepts a truthy/falsy value or an object that responds to .call. If truthy, then matching warnings will be allowed. If falsey then the method yields to the block without allowing the warning.

deprecator = ActiveSupport::Deprecation.new
deprecator.disallowed_behavior = :raise
deprecator.disallowed_warnings = [
  "something broke"
]

deprecator.warn('something broke!')
# => ActiveSupport::DeprecationException

deprecator.allow ['something broke'] do
  deprecator.warn('something broke!')
end
# => nil

deprecator.allow ['something broke'], if: Rails.env.production? do
  deprecator.warn('something broke!')
end
# => ActiveSupport::DeprecationException for dev/test, nil for production


88
89
90
91
92
93
94
95
96
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 88

def allow(allowed_warnings = :all, if: true, &block)
  conditional = binding.local_variable_get(:if)
  conditional = conditional.call if conditional.respond_to?(:call)
  if conditional
    @explicitly_allowed_warnings.bind(allowed_warnings, &block)
  else
    yield
  end
end

#begin_silenceObject

:nodoc:



47
48
49
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 47

def begin_silence # :nodoc:
  @silence_counter.value += 1
end

#deprecation_warning(deprecated_method_name, message = nil, caller_backtrace = nil) ⇒ Object



98
99
100
101
102
103
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 98

def deprecation_warning(deprecated_method_name, message = nil, caller_backtrace = nil)
  caller_backtrace ||= caller_locations(2)
  deprecated_method_warning(deprecated_method_name, message).tap do |msg|
    warn(msg, caller_backtrace)
  end
end

#end_silenceObject

:nodoc:



51
52
53
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 51

def end_silence # :nodoc:
  @silence_counter.value -= 1
end

#silence(&block) ⇒ Object

Silence deprecation warnings within the block.

deprecator = ActiveSupport::Deprecation.new
deprecator.warn('something broke!')
# => "DEPRECATION WARNING: something broke! (called from your_code.rb:1)"

deprecator.silence do
  deprecator.warn('something broke!')
end
# => nil


40
41
42
43
44
45
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 40

def silence(&block)
  begin_silence
  block.call
ensure
  end_silence
end

#warn(message = nil, callstack = nil) ⇒ Object

Outputs a deprecation warning to the output configured by ActiveSupport::Deprecation#behavior.

ActiveSupport::Deprecation.new.warn('something broke!')
# => "DEPRECATION WARNING: something broke! (called from your_code.rb:1)"


17
18
19
20
21
22
23
24
25
26
27
28
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 17

def warn(message = nil, callstack = nil)
  return if silenced

  callstack ||= caller_locations(2)
  deprecation_message(callstack, message).tap do |full_message|
    if deprecation_disallowed?(message)
      disallowed_behavior.each { |b| b.call(full_message, callstack, self) }
    else
      behavior.each { |b| b.call(full_message, callstack, self) }
    end
  end
end