Module: ActiveSupport::Deprecation::DeprecatedConstantAccessor
Relationships & Source Files | |
Extension / Inclusion / Inheritance Descendants | |
Included In:
::AbstractController::Helpers ,
::ActionController::Base ,
::ActionController::ContentSecurityPolicy ,
::ActionController::Helpers ,
::ActionController::RequestForgeryProtection ,
::ActionDispatch ,
::ActionMailer::Base ,
::ActionView::FileSystemResolver ,
::ActionView::FixtureResolver ,
::ActionView::NullResolver ,
::ActionView::Resolver ,
::ActionView::TestCase ,
::ActionView::TestCase::Behavior ,
::ActionView::TestCase::TestController ,
::ActiveRecord ,
Rails::ApplicationController,
::Rails::Generators::Testing ,
::Rails::HealthController ,
Rails::InfoController,
Rails::MailersController,
Rails::WelcomeController
| |
Defined in: | activesupport/lib/active_support/deprecation/constant_accessor.rb |
Overview
DeprecatedConstantAccessor
transforms a constant into a deprecated one by hooking const_missing
.
It takes the names of an old (deprecated) constant and of a new constant (both in string form) and a deprecator.
The deprecated constant now returns the same object as the new one rather than a proxy object, so it can be used transparently in rescue
blocks etc.
PLANETS = %w(mercury venus earth mars jupiter saturn uranus neptune pluto)
# (In a later update, the original implementation of {PLANETS} has been removed.)
PLANETS_POST_2006 = %w(mercury venus earth mars jupiter saturn uranus neptune)
include ActiveSupport::Deprecation::DeprecatedConstantAccessor
deprecate_constant 'PLANETS', 'PLANETS_POST_2006', deprecator: ActiveSupport::Deprecation.new
PLANETS.map { |planet| planet.capitalize }
# => DEPRECATION WARNING: PLANETS is deprecated! Use PLANETS_POST_2006 instead.
(Backtrace information…)
["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
Class Method Summary
Class Method Details
.included(base)
[ GitHub ]# File 'activesupport/lib/active_support/deprecation/constant_accessor.rb', line 28
def self.included(base) require "active_support/inflector/methods" extension = Module.new do def const_missing(missing_const_name) if class_variable_defined?(:@@_deprecated_constants) if (replacement = class_variable_get(:@@_deprecated_constants)[missing_const_name.to_s]) replacement[:deprecator].warn(replacement[: ] || "#{name}::#{missing_const_name} is deprecated! Use #{replacement[:new]} instead.", caller_locations) return ActiveSupport::Inflector.constantize(replacement[:new].to_s) end end super end def deprecate_constant(const_name, new_constant, message: nil, deprecator: nil) ActiveSupport.deprecator.warn("DeprecatedConstantAccessor.deprecate_constant without a deprecator is deprecated") unless deprecator deprecator ||= ActiveSupport::Deprecation._instance class_variable_set(:@@_deprecated_constants, {}) unless class_variable_defined?(:@@_deprecated_constants) class_variable_get(:@@_deprecated_constants)[const_name.to_s] = { new: new_constant, message: , deprecator: deprecator } end end base.singleton_class.prepend extension end