Skip to Content Skip to Search
Methods
A
D
S
W

Constants

LIB_DIR = RbConfig::CONFIG["libdir"]
 
RAILS_GEM_ROOT = File.expand_path("../../../..", __dir__) + "/"
 

Attributes

[RW] gem_name

Name of gem where method is deprecated

[W] silenced

Whether to print a message (silent mode)

Instance Public methods

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

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
# File activesupport/lib/active_support/deprecation/reporting.rb, line 89
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

deprecation_warning(deprecated_method_name, message = nil, caller_backtrace = nil)

# File activesupport/lib/active_support/deprecation/reporting.rb, line 99
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

silence(&block)

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
# File activesupport/lib/active_support/deprecation/reporting.rb, line 41
def silence(&block)
  begin_silence
  block.call
ensure
  end_silence
end

silenced()

# File activesupport/lib/active_support/deprecation/reporting.rb, line 56
def silenced
  @silenced || @silence_counter.value.nonzero?
end

warn(message = nil, callstack = nil)

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)"
# File activesupport/lib/active_support/deprecation/reporting.rb, line 18
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