123456789_123456789_123456789_123456789_123456789_

Module: ActiveSupport::Deprecation::Behavior

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

Overview

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.

Instance Attribute Summary

  • #behavior rw

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

  • #behavior=(behavior) rw

    Sets the behavior to the specified value.

  • #debug rw

    Whether to print a backtrace along with the warning.

  • #disallowed_behavior rw

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

  • #disallowed_behavior=(behavior) rw

    Sets the behavior for disallowed deprecations (those configured by ActiveSupport::Deprecation#disallowed_warnings=) to the specified value.

Instance Method Summary

Instance Attribute Details

#behavior (rw)

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

[ GitHub ]

  
# File 'activesupport/lib/active_support/deprecation/behaviors.rb', line 74

def behavior
  @behavior ||= [DEFAULT_BEHAVIORS[:stderr]]
end

#behavior=(behavior) (rw)

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. ::ActiveSupport::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.

[ GitHub ]

  
# File 'activesupport/lib/active_support/deprecation/behaviors.rb', line 111

def behavior=(behavior)
  @behavior = Array(behavior).map { |b| DEFAULT_BEHAVIORS[b] || arity_coerce(b) }
end

#debug (rw)

Whether to print a backtrace along with the warning.

[ GitHub ]

  
# File 'activesupport/lib/active_support/deprecation/behaviors.rb', line 71

attr_accessor :debug

#disallowed_behavior (rw)

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

[ GitHub ]

  
# File 'activesupport/lib/active_support/deprecation/behaviors.rb', line 79

def disallowed_behavior
  @disallowed_behavior ||= [DEFAULT_BEHAVIORS[:raise]]
end

#disallowed_behavior=(behavior) (rw)

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.

[ GitHub ]

  
# File 'activesupport/lib/active_support/deprecation/behaviors.rb', line 119

def disallowed_behavior=(behavior)
  @disallowed_behavior = Array(behavior).map { |b| DEFAULT_BEHAVIORS[b] || arity_coerce(b) }
end

Instance Method Details

#arity_coerce(behavior) (private)

[ GitHub ]

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

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) (private)

[ GitHub ]

  
# File 'activesupport/lib/active_support/deprecation/behaviors.rb', line 143

def arity_of_callable(callable)
  callable.respond_to?(:arity) ? callable.arity : callable.method(:call).arity
end