edge badge
Methods
#
D
E
I
S
W
Constants
RAILS_GEM_ROOT = File.expand_path("../../../..", __dir__) + "/"
 
Attributes
[RW] gem_name

Name of gem where method is deprecated

[RW] silenced

Whether to print a message (silent mode)

Instance Public methods
_extract_callstack(callstack)
# File activesupport/lib/active_support/deprecation/reporting.rb, line 94
def _extract_callstack(callstack)
  warn "Please pass `caller_locations` to the deprecation API" if $VERBOSE
  offending_line = callstack.find { |line| !ignored_callstack(line) } || callstack.first

  if offending_line
    if md = offending_line.match(/^(.+?):(\d+)(?::in `(.*?)')?/)
      md.captures
    else
      offending_line
    end
  end
end
deprecated_method_warning(method_name, message = nil)

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)"
# File activesupport/lib/active_support/deprecation/reporting.rb, line 59
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)
# File activesupport/lib/active_support/deprecation/reporting.rb, line 73
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)
# File activesupport/lib/active_support/deprecation/reporting.rb, line 68
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)
# File activesupport/lib/active_support/deprecation/reporting.rb, line 43
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
extract_callstack(callstack)
# File activesupport/lib/active_support/deprecation/reporting.rb, line 84
def extract_callstack(callstack)
  return _extract_callstack(callstack) if callstack.first.is_a? String

  offending_line = callstack.find { |frame|
    frame.absolute_path && !ignored_callstack(frame.absolute_path)
  } || callstack.first

  [offending_line.path, offending_line.lineno, offending_line.label]
end
ignored_callstack(path)
# File activesupport/lib/active_support/deprecation/reporting.rb, line 109
def ignored_callstack(path)
  path.start_with?(RAILS_GEM_ROOT) || path.start_with?(RbConfig::CONFIG["rubylibdir"])
end
silence()

Silence deprecation warnings within the block.

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

ActiveSupport::Deprecation.silence do
  ActiveSupport::Deprecation.warn('something broke!')
end
# => nil
# File activesupport/lib/active_support/deprecation/reporting.rb, line 36
def silence
  old_silenced, @silenced = @silenced, true
  yield
ensure
  @silenced = old_silenced
end
warn(message = nil, callstack = nil)

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

ActiveSupport::Deprecation.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 |m|
      behavior.each { |b| b.call(m, callstack, deprecation_horizon, gem_name) }
    end
  end

  # Silence deprecation warnings within the block.
  #
  #   ActiveSupport::Deprecation.warn('something broke!')
  #   # => "DEPRECATION WARNING: something broke! (called from your_code.rb:1)"
  #
  #   ActiveSupport::Deprecation.silence do
  #     ActiveSupport::Deprecation.warn('something broke!')
  #   end
  #   # => nil
  def silence
    old_silenced, @silenced = @silenced, true
    yield
  ensure
    @silenced = old_silenced
  end

  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

  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)"
    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

    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

    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

    def extract_callstack(callstack)
      return _extract_callstack(callstack) if callstack.first.is_a? String

      offending_line = callstack.find { |frame|
        frame.absolute_path && !ignored_callstack(frame.absolute_path)
      } || callstack.first

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

    def _extract_callstack(callstack)
      warn "Please pass `caller_locations` to the deprecation API" if $VERBOSE
      offending_line = callstack.find { |line| !ignored_callstack(line) } || callstack.first

      if offending_line
        if md = offending_line.match(/^(.+?):(\d+)(?::in `(.*?)')?/)
          md.captures
        else
          offending_line
        end
      end
    end

    RAILS_GEM_ROOT = File.expand_path("../../../..", __dir__) + "/"

    def ignored_callstack(path)
      path.start_with?(RAILS_GEM_ROOT) || path.start_with?(RbConfig::CONFIG["rubylibdir"])
    end
end