123456789_123456789_123456789_123456789_123456789_

Module: ActiveSupport::Deprecation::Reporting

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Included In:
Defined in: activesupport/lib/active_support/deprecation/reporting.rb

Constant Summary

Instance Attribute Summary

Instance Method Summary

Instance Attribute Details

#gem_name (rw)

Name of gem where method is deprecated

[ GitHub ]

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

attr_accessor :gem_name

#silenced (rw)

[ GitHub ]

  
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 61

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

#silenced=(value) (rw)

Whether to print a message (silent mode)

[ GitHub ]

  
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 10

attr_writer :silenced

Instance Method Details

#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
[ GitHub ]

  
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 96

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_silence

This method is for internal use only.
[ GitHub ]

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

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

#deprecated_method_warning(method_name, message = nil) (private)

Outputs a deprecation warning message

deprecated_method_warning(:method_name)
#### => "method_name is deprecated and will be removed from Rails #{deprecation_horizon}"
deprecated_method_warning(:method_name, :another_method)
#### => "method_name is deprecated and will be removed from Rails #{deprecation_horizon} (use another_method instead)"
deprecated_method_warning(:method_name, "Optional message")
#### => "method_name is deprecated and will be removed from Rails #{deprecation_horizon} (Optional message)"
[ GitHub ]

  
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 124

def deprecated_method_warning(method_name, message = nil)
  warning = "#{method_name} is deprecated and will be removed from #{gem_name} #{deprecation_horizon}"
  case message
  when Symbol then "#{warning} (use #{message} instead)"
  when String then "#{warning} (#{message})"
  else warning
  end
end

#deprecation_caller_message(callstack) (private)

[ GitHub ]

  
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 138

def deprecation_caller_message(callstack)
  file, line, method = extract_callstack(callstack)
  if file
    if line && method
      "(called from #{method} at #{file}:#{line})"
    else
      "(called from #{file}:#{line})"
    end
  end
end

#deprecation_message(callstack, message = nil) (private)

[ GitHub ]

  
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 133

def deprecation_message(callstack, message = nil)
  message ||= "You are using deprecated behavior which will be removed from the next major or minor release."
  "DEPRECATION WARNING: #{message} #{deprecation_caller_message(callstack)}"
end

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

[ GitHub ]

  
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 106

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_silence

This method is for internal use only.
[ GitHub ]

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

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

#extract_callstack(callstack) (private)

[ GitHub ]

  
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 149

def extract_callstack(callstack)
  return [] if callstack.empty?

  offending_line = callstack.find { |frame|
    # Code generated with `eval` doesn't have an `absolute_path`, e.g. templates.
    path = frame.absolute_path || frame.path
    path && !ignored_callstack?(path)
  } || callstack.first

  [offending_line.path, offending_line.lineno, offending_line.label]
end

#ignored_callstack?(path) ⇒ Boolean (private)

[ GitHub ]

  
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 166

def ignored_callstack?(path)
  path.start_with?(RAILS_GEM_ROOT, LIB_DIR) || path.include?("<internal:")
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
[ GitHub ]

  
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 46

def silence(&block)
  begin_silence
  block.call
ensure
  end_silence
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)"
[ GitHub ]

  
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 21

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