Module: ActiveSupport::Deprecation

Defined in:
lib/active_support/deprecation.rb,
lib/active_support/deprecation/behaviors.rb,
lib/active_support/deprecation/reporting.rb,
lib/active_support/deprecation/proxy_wrappers.rb

Defined Under Namespace

Classes: DeprecatedConstantProxy, DeprecatedInstanceVariableProxy, DeprecatedObjectProxy, DeprecationProxy

Constant Summary collapse

DEFAULT_BEHAVIORS =

Default warning behaviors per Rails.env.

{
  :stderr => Proc.new { |message, callstack|
     $stderr.puts(message)
     $stderr.puts callstack.join("\n  ") if debug
   },
  :log => Proc.new { |message, callstack|
     logger =
       if defined?(Rails) && Rails.logger
         Rails.logger
       else
         require 'logger'
         Logger.new($stderr)
       end
     logger.warn message
     logger.debug callstack.join("\n  ") if debug
   },
   :notify => Proc.new { |message, callstack|
      ActiveSupport::Notifications.instrument("deprecation.rails",
        :message => message, :callstack => callstack)
   }
}

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.debugObject

Whether to print a backtrace along with the warning.



8
9
10
# File 'lib/active_support/deprecation/behaviors.rb', line 8

def debug
  @debug
end

.deprecation_horizonObject

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



10
11
12
# File 'lib/active_support/deprecation.rb', line 10

def deprecation_horizon
  @deprecation_horizon
end

.silencedObject

Returns the value of attribute silenced.



4
5
6
# File 'lib/active_support/deprecation/reporting.rb', line 4

def silenced
  @silenced
end

Class Method Details

.behaviorObject

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



11
12
13
# File 'lib/active_support/deprecation/behaviors.rb', line 11

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

.behavior=(behavior) ⇒ Object

Sets the behavior to the specified value. Can be a single value or an array.

Examples

ActiveSupport::Deprecation.behavior = :stderr
ActiveSupport::Deprecation.behavior = [:stderr, :log]


21
22
23
# File 'lib/active_support/deprecation/behaviors.rb', line 21

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

.deprecate_methods(target_module, *method_names) ⇒ Object

Declare that a method has been deprecated.



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/active_support/deprecation/method_wrappers.rb', line 8

def deprecate_methods(target_module, *method_names)
  options = method_names.extract_options!
  method_names += options.keys

  method_names.each do |method_name|
    target_module.alias_method_chain(method_name, :deprecation) do |target, punctuation|
      target_module.module_eval(<<-end_eval, __FILE__, __LINE__ + 1)
        def #{target}_with_deprecation#{punctuation}(*args, &block)
          ::ActiveSupport::Deprecation.warn(
            ::ActiveSupport::Deprecation.deprecated_method_warning(
              :#{method_name},
              #{options[method_name].inspect}),
            caller
          )
          send(:#{target}_without_deprecation#{punctuation}, *args, &block)
        end
      end_eval
    end
  end
end

.deprecated_method_warning(method_name, message = nil) ⇒ Object



25
26
27
28
29
30
31
32
# File 'lib/active_support/deprecation/reporting.rb', line 25

def deprecated_method_warning(method_name, message = nil)
  warning = "#{method_name} is deprecated and will be removed from Rails #{deprecation_horizon}"
  case message
    when Symbol then "#{warning} (use #{message} instead)"
    when String then "#{warning} (#{message})"
    else warning
  end
end

.silenceObject

Silence deprecation warnings within the block.



18
19
20
21
22
23
# File 'lib/active_support/deprecation/reporting.rb', line 18

def silence
  old_silenced, @silenced = @silenced, true
  yield
ensure
  @silenced = old_silenced
end

.warn(message = nil, callstack = caller) ⇒ Object

Outputs a deprecation warning to the output configured by ActiveSupport::Deprecation.behavior

ActiveSupport::Deprecation.warn("something broke!")
# => "DEPRECATION WARNING: something broke! (called from your_code.rb:1)"


10
11
12
13
14
15
# File 'lib/active_support/deprecation/reporting.rb', line 10

def warn(message = nil, callstack = caller)
  return if silenced
  deprecation_message(callstack, message).tap do |m|
    behavior.each { |b| b.call(m, callstack) }
  end
end