Class: ActiveSupport::Deprecation

Inherits:
Object
  • Object
show all
Includes:
Behavior, Disallowed, MethodWrapper, Reporting
Defined in:
lib/active_support/deprecation.rb,
lib/active_support/deprecation/behaviors.rb,
lib/active_support/deprecation/reporting.rb,
lib/active_support/deprecation/disallowed.rb,
lib/active_support/deprecation/deprecators.rb,
lib/active_support/deprecation/proxy_wrappers.rb,
lib/active_support/deprecation/method_wrappers.rb,
lib/active_support/deprecation/constant_accessor.rb

Overview

Active Support Deprecation

Deprecation specifies the API used by Rails to deprecate methods, instance variables, objects, and constants. It’s also available for gems or applications.

For a gem, use Deprecation.new to create a Deprecation object and store it in your module or class (in order for users to be able to configure it).

module MyLibrary
  def self.deprecator
    @deprecator ||= ActiveSupport::Deprecation.new("2.0", "MyLibrary")
  end
end

For a Railtie or Engine, you may also want to add it to the application’s deprecators, so that the application’s configuration can be applied to it.

module MyLibrary
  class Railtie < Rails::Railtie
    initializer "my_library.deprecator" do |app|
      app.deprecators[:my_library] = MyLibrary.deprecator
    end
  end
end

With the above initializer, configuration settings like the following will affect MyLibrary.deprecator:

# in config/environments/test.rb
config.active_support.deprecation = :raise

Defined Under Namespace

Modules: Behavior, DeprecatedConstantAccessor, Disallowed, MethodWrapper, Reporting Classes: DeprecatedConstantProxy, DeprecatedInstanceVariableProxy, DeprecatedObjectProxy, DeprecationProxy, Deprecators

Constant Summary collapse

DEFAULT_BEHAVIORS =

Default warning behaviors per Rails.env.

{
  raise: ->(message, callstack, deprecator) do
    e = DeprecationException.new(message)
    e.set_backtrace(callstack.map(&:to_s))
    raise e
  end,

  stderr: ->(message, callstack, deprecator) do
    $stderr.puts(message)
    $stderr.puts callstack.join("\n  ") if deprecator.debug
  end,

  log: ->(message, callstack, deprecator) do
    logger =
        if defined?(Rails.logger) && Rails.logger
          Rails.logger
        else
          require "active_support/logger"
          ActiveSupport::Logger.new($stderr)
        end
    logger.warn message
    logger.debug callstack.join("\n  ") if deprecator.debug
  end,

  notify: ->(message, callstack, deprecator) do
    ActiveSupport::Notifications.instrument(
      "deprecation.#{deprecator.gem_name.underscore.tr("/", "_")}",
      message: message,
      callstack: callstack,
      gem_name: deprecator.gem_name,
      deprecation_horizon: deprecator.deprecation_horizon,
    )
  end,

  silence: ->(message, callstack, deprecator) { },

  report: ->(message, callstack, deprecator) do
    error = DeprecationException.new(message)
    error.set_backtrace(callstack.map(&:to_s))
    ActiveSupport.error_reporter.report(error)
  end
}

Instance Attribute Summary collapse

Attributes included from Disallowed

#disallowed_warnings

Attributes included from Reporting

#gem_name, #silenced

Attributes included from Behavior

#debug

Class Method Summary collapse

Instance Method Summary collapse

Methods included from MethodWrapper

#deprecate_methods

Methods included from Reporting

#allow, #begin_silence, #deprecation_warning, #end_silence, #silence, #warn

Methods included from Behavior

#behavior, #behavior=, #disallowed_behavior, #disallowed_behavior=

Constructor Details

#initialize(deprecation_horizon = "8.0", gem_name = "Rails") ⇒ Deprecation

It accepts two parameters on initialization. The first is a version of library and the second is a library name.

ActiveSupport::Deprecation.new('2.0', 'MyLibrary')


71
72
73
74
75
76
77
78
79
# File 'lib/active_support/deprecation.rb', line 71

def initialize(deprecation_horizon = "8.0", gem_name = "Rails")
  self.gem_name = gem_name
  self.deprecation_horizon = deprecation_horizon
  # By default, warnings are not silenced and debugging is off.
  self.silenced = false
  self.debug = false
  @silence_counter = Concurrent::ThreadLocalVar.new(0)
  @explicitly_allowed_warnings = Concurrent::ThreadLocalVar.new(nil)
end

Instance Attribute Details

#deprecation_horizonObject

The version number in which the deprecated behavior will be removed, by default.



65
66
67
# File 'lib/active_support/deprecation.rb', line 65

def deprecation_horizon
  @deprecation_horizon
end

Class Method Details

._instanceObject

:nodoc:



60
61
62
# File 'lib/active_support/deprecation.rb', line 60

def self._instance # :nodoc:
  @_instance ||= MUTEX.synchronize { @_instance ||= new }
end