module ActiveSupport::Deprecation::Behavior

Behavior module allows to determine how to display deprecation messages. You can create a custom behavior or set any from the DEFAULT_BEHAVIORS constant. Available behaviors are:

raise

Raise ActiveSupport::DeprecationException.

stderr

Log all deprecation warnings to $stderr.

log

Log all deprecation warnings to Rails.logger.

notify

Use ActiveSupport::Notifications to notify deprecation.rails.

report

Use ActiveSupport::ErrorReporter to report deprecations.

silence

Do nothing. On Rails, set config.active_support.report_deprecations = false to disable all behaviors.

Setting behaviors only affects deprecations that happen after boot time. For more information you can read the documentation of the behavior= method.

Attributes

debug[RW]

Whether to print a backtrace along with the warning.

Public Instance Methods

behavior() click to toggle source

Returns the current behavior or if one isn’t set, defaults to :stderr.

# File lib/active_support/deprecation/behaviors.rb, line 74
def behavior
  @behavior ||= [DEFAULT_BEHAVIORS[:stderr]]
end
behavior=(behavior) click to toggle source

Sets the behavior to the specified value. Can be a single value, array, or an object that responds to call.

Available behaviors:

raise

Raise ActiveSupport::DeprecationException.

stderr

Log all deprecation warnings to $stderr.

log

Log all deprecation warnings to Rails.logger.

notify

Use ActiveSupport::Notifications to notify deprecation.rails.

report

Use ActiveSupport::ErrorReporter to report deprecations.

silence

Do nothing.

Setting behaviors only affects deprecations that happen after boot time. Deprecation warnings raised by gems are not affected by this setting because they happen before Rails boots up.

deprecator = ActiveSupport::Deprecation.new
deprecator.behavior = :stderr
deprecator.behavior = [:stderr, :log]
deprecator.behavior = MyCustomHandler
deprecator.behavior = ->(message, callstack, deprecation_horizon, gem_name) {
  # custom stuff
}

If you are using Rails, you can set config.active_support.report_deprecations = false to disable all deprecation behaviors. This is similar to the silence option but more performant.

# File lib/active_support/deprecation/behaviors.rb, line 109
def behavior=(behavior)
  @behavior = Array(behavior).map { |b| DEFAULT_BEHAVIORS[b] || arity_coerce(b) }
end
disallowed_behavior() click to toggle source

Returns the current behavior for disallowed deprecations or if one isn’t set, defaults to :raise.

# File lib/active_support/deprecation/behaviors.rb, line 79
def disallowed_behavior
  @disallowed_behavior ||= [DEFAULT_BEHAVIORS[:raise]]
end
disallowed_behavior=(behavior) click to toggle source

Sets the behavior for disallowed deprecations (those configured by ActiveSupport::Deprecation#disallowed_warnings=) to the specified value. As with behavior=, this can be a single value, array, or an object that responds to call.

# File lib/active_support/deprecation/behaviors.rb, line 117
def disallowed_behavior=(behavior)
  @disallowed_behavior = Array(behavior).map { |b| DEFAULT_BEHAVIORS[b] || arity_coerce(b) }
end

Private Instance Methods

arity_coerce(behavior) click to toggle source
# File lib/active_support/deprecation/behaviors.rb, line 122
def arity_coerce(behavior)
  unless behavior.respond_to?(:call)
    raise ArgumentError, "#{behavior.inspect} is not a valid deprecation behavior."
  end

  case arity_of_callable(behavior)
  when 2
    ->(message, callstack, deprecator) do
      behavior.call(message, callstack)
    end
  when -2..3
    behavior
  else
    ->(message, callstack, deprecator) do
      behavior.call(message, callstack, deprecator.deprecation_horizon, deprecator.gem_name)
    end
  end
end
arity_of_callable(callable) click to toggle source
# File lib/active_support/deprecation/behaviors.rb, line 141
def arity_of_callable(callable)
  callable.respond_to?(:arity) ? callable.arity : callable.method(:call).arity
end