module ActiveSupport::Deprecation

def behavior

Returns the set behavior or if one isn't set, defaults to +:stderr+
def behavior
  @behavior ||= [DEFAULT_BEHAVIORS[:stderr]]
end

def behavior=(behavior)

ActiveSupport::Deprecation.behavior = [:stderr, :log]
ActiveSupport::Deprecation.behavior = :stderr

Examples

Sets the behavior to the specified value. Can be a single value or an array.
def behavior=(behavior)
  @behavior = Array.wrap(behavior).map { |b| DEFAULT_BEHAVIORS[b] || b }
end

def deprecated_method_warning(method_name, message = nil)

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

def deprecation_caller_message(callstack)

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 deprecation_message(callstack, message = nil)

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

def extract_callstack(callstack)

def extract_callstack(callstack)
  rails_gem_root = File.expand_path("../../../../..", __FILE__) + "/"
  offending_line = callstack.find { |line| !line.start_with?(rails_gem_root) } || callstack.first
  if offending_line
    if md = offending_line.match(/^(.+?):(\d+)(?::in `(.*?)')?/)
      md.captures
    else
      offending_line
    end
  end
end

def silence

Silence deprecation warnings within the block.
def silence
  old_silenced, @silenced = @silenced, true
  yield
ensure
  @silenced = old_silenced
end

def warn(message = nil, callstack = caller)

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

Outputs a deprecation warning to the output configured by ActiveSupport::Deprecation.behavior
def warn(message = nil, callstack = caller)
  return if silenced
  deprecation_message(callstack, message).tap do |m|
    behavior.each { |b| b.call(m, callstack) }
  end
end