From dbb547a0565dd216089f35d82fcf17a655897603 Mon Sep 17 00:00:00 2001 From: wycats Date: Tue, 3 Aug 2010 16:03:35 -0700 Subject: [PATCH] Fix up constant deprecation to be less dependent on load order --- railties/lib/rails/deprecation.rb | 75 +++++++++---------------------- 1 file changed, 20 insertions(+), 55 deletions(-) diff --git a/railties/lib/rails/deprecation.rb b/railties/lib/rails/deprecation.rb index 1eb6d804b6..924701a326 100644 --- a/railties/lib/rails/deprecation.rb +++ b/railties/lib/rails/deprecation.rb @@ -1,62 +1,27 @@ require "active_support/string_inquirer" -require "active_support/deprecation" +require "active_support/basic_object" -RAILS_ROOT = (Class.new(ActiveSupport::Deprecation::DeprecationProxy) do - cattr_accessor :warned - self.warned = false +module Rails + class DeprecatedConstant < ActiveSupport::BasicObject + def self.deprecate(old, new) + constant = self.new(old, new) + eval "::#{old} = constant" + end - def target - Rails.root - end + def initialize(old, new) + @old, @new = old, new + @target = eval "proc { #{new} }" + @warned = false + end - def replace(*args) - warn(caller, :replace, *args) - end - - def warn(callstack, called, args) - unless warned - ActiveSupport::Deprecation.warn("RAILS_ROOT is deprecated! Use Rails.root instead", callstack) - self.warned = true + def method_missing(meth, *args, &block) + ActiveSupport::Deprecation.warn("#{@old} is deprecated. Please use #{@new}") unless @warned + @warned = true + @target.call.send(meth, *args, &block) end end -end).new -RAILS_ENV = (Class.new(ActiveSupport::Deprecation::DeprecationProxy) do - cattr_accessor :warned - self.warned = false - - def target - Rails.env - end - - def replace(*args) - warn(caller, :replace, *args) - end - - def warn(callstack, called, args) - unless warned - ActiveSupport::Deprecation.warn("RAILS_ENV is deprecated! Use Rails.env instead", callstack) - self.warned = true - end - end -end).new - -RAILS_DEFAULT_LOGGER = (Class.new(ActiveSupport::Deprecation::DeprecationProxy) do - cattr_accessor :warned - self.warned = false - - def target - Rails.logger - end - - def replace(*args) - warn(caller, :replace, *args) - end - - def warn(callstack, called, args) - unless warned - ActiveSupport::Deprecation.warn("RAILS_DEFAULT_LOGGER is deprecated! Use Rails.logger instead", callstack) - self.warned = true - end - end -end).new + DeprecatedConstant.deprecate("RAILS_ROOT", "Rails.root") + DeprecatedConstant.deprecate("RAILS_ENV", "Rails.env") + DeprecatedConstant.deprecate("RAILS_DEFAULT_LOGGER", "Rails.logger") +end