This DeprecatedInstanceVariableProxy transforms instance variable to deprecated instance variable.
class Example def initialize(deprecator) @request = ActiveSupport::Deprecation::DeprecatedInstanceVariableProxy.new(self, :request, :@request, deprecator) @_request = :a_request end def request @_request end def old_request @request end end
When someone execute any method on @request variable this will trigger
warn
method on deprecator_instance
and will fetch
@_request
variable via request
method and execute
the same method on non-proxy instance variable.
Default deprecator is ActiveSupport::Deprecation
.
# File lib/active_support/deprecation/proxy_wrappers.rb, line 79 def initialize(instance, method, var = "@#{method}", deprecator = ActiveSupport::Deprecation.instance) @instance = instance @method = method @var = var @deprecator = deprecator end
# File lib/active_support/deprecation/proxy_wrappers.rb, line 87 def target @instance.__send__(@method) end
# File lib/active_support/deprecation/proxy_wrappers.rb, line 91 def warn(callstack, called, args) @deprecator.warn("#{@var} is deprecated! Call #{@method}.#{called} instead of #{@var}.#{called}. Args: #{args.inspect}", callstack) end