Module: ActiveSupport::Deprecation::Reporting
Relationships & Source Files | |
Extension / Inclusion / Inheritance Descendants | |
Included In:
| |
Defined in: | activesupport/lib/active_support/deprecation/reporting.rb |
Constant Summary
-
LIB_DIR =
Internal use only
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 153 -
RAILS_GEM_ROOT =
Internal use only
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 152File. ("../../../..", __dir__) + "/"
Instance Attribute Summary
-
#gem_name
rw
Name of gem where method is deprecated.
- #silenced rw
-
#silenced=(value)
rw
Whether to print a message (silent mode).
Instance Method Summary
-
#allow(allowed_warnings = :all, if: true, &block)
Allow previously disallowed deprecation warnings within the block.
- #deprecation_warning(deprecated_method_name, message = nil, caller_backtrace = nil)
-
#silence(&block)
Silence deprecation warnings within the block.
-
#warn(message = nil, callstack = nil)
Outputs a deprecation warning to the output configured by
ActiveSupport::Deprecation#behavior
. -
#deprecated_method_warning(method_name, message = nil)
private
Outputs a deprecation warning message.
- #deprecation_caller_message(callstack) private
- #deprecation_message(callstack, message = nil) private
- #extract_callstack(callstack) private
- #ignored_callstack?(path) ⇒ Boolean private
- #begin_silence Internal use only
- #end_silence Internal use only
Instance Attribute Details
#gem_name (rw)
Name of gem where method is deprecated
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 11
attr_accessor :gem_name
#silenced (rw)
[ GitHub ]# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 56
def silenced @silenced || @silence_counter.value.nonzero? end
#silenced=(value) (rw)
Whether to print a message (silent mode)
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 9
attr_writer :silenced
Instance Method Details
#allow(allowed_warnings = :all, if: true, &block)
Allow previously disallowed deprecation warnings within the block. allowed_warnings
can be an array containing strings, symbols, or regular expressions. (Symbols are treated as strings). These are compared against the text of deprecation warning messages generated within the block. Matching warnings will be exempt from the rules set by ActiveSupport::Deprecation#disallowed_warnings
.
The optional if:
argument accepts a truthy/falsy value or an object that responds to .call
. If truthy, then matching warnings will be allowed. If falsey then the method yields to the block without allowing the warning.
deprecator = ActiveSupport::Deprecation.new
deprecator.disallowed_behavior = :raise
deprecator.disallowed_warnings = [
"something broke"
]
deprecator.warn('something broke!')
# => ActiveSupport::DeprecationException
deprecator.allow ['something broke'] do
deprecator.warn('something broke!')
end
# => nil
deprecator.allow ['something broke'], if: Rails.env.production? do
deprecator.warn('something broke!')
end
# => ActiveSupport::DeprecationException for dev/test, nil for production
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 89
def allow(allowed_warnings = :all, if: true, &block) conditional = binding.local_variable_get(:if) conditional = conditional.call if conditional.respond_to?(:call) if conditional @explicitly_allowed_warnings.bind(allowed_warnings, &block) else yield end end
#begin_silence
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 48
def begin_silence # :nodoc: @silence_counter.value += 1 end
#deprecated_method_warning(method_name, message = nil) (private)
Outputs a deprecation warning message
deprecated_method_warning(:method_name)
# => "method_name is deprecated and will be removed from Rails #{deprecation_horizon}"
deprecated_method_warning(:method_name, :another_method)
# => "method_name is deprecated and will be removed from Rails #{deprecation_horizon} (use another_method instead)"
deprecated_method_warning(:method_name, "Optional message")
# => "method_name is deprecated and will be removed from Rails #{deprecation_horizon} (Optional message)"
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 115
def deprecated_method_warning(method_name, = nil) warning = "#{method_name} is deprecated and will be removed from #{gem_name} #{deprecation_horizon}" case when Symbol then "#{warning} (use #{} instead)" when String then "#{warning} (#{})" else warning end end
#deprecation_caller_message(callstack) (private)
[ GitHub ]# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 129
def (callstack) file, line, method = extract_callstack(callstack) if file if line && method "(called from #{method} at #{file}:#{line})" else "(called from #{file}:#{line})" end end end
#deprecation_message(callstack, message = nil) (private)
[ GitHub ]# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 124
def (callstack, = nil) ||= "You are using deprecated behavior which will be removed from the next major or minor release." "DEPRECATION WARNING: #{} #{ (callstack)}" end
#deprecation_warning(deprecated_method_name, message = nil, caller_backtrace = nil)
[ GitHub ]# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 99
def deprecation_warning(deprecated_method_name, = nil, caller_backtrace = nil) caller_backtrace ||= caller_locations(2) deprecated_method_warning(deprecated_method_name, ).tap do |msg| warn(msg, caller_backtrace) end end
#end_silence
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 52
def end_silence # :nodoc: @silence_counter.value -= 1 end
#extract_callstack(callstack) (private)
[ GitHub ]# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 140
def extract_callstack(callstack) return [] if callstack.empty? offending_line = callstack.find { |frame| # Code generated with `eval` doesn't have an `absolute_path`, e.g. templates. path = frame.absolute_path || frame.path path && !ignored_callstack?(path) } || callstack.first [offending_line.path, offending_line.lineno, offending_line.label] end
#ignored_callstack?(path) ⇒ Boolean
(private)
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 155
def ignored_callstack?(path) path.start_with?(RAILS_GEM_ROOT, LIB_DIR) || path.include?("<internal:") end
#silence(&block)
Silence deprecation warnings within the block.
deprecator = ActiveSupport::Deprecation.new
deprecator.warn('something broke!')
# => "DEPRECATION WARNING: something broke! (called from your_code.rb:1)"
deprecator.silence do
deprecator.warn('something broke!')
end
# => nil
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 41
def silence(&block) begin_silence block.call ensure end_silence end
#warn(message = nil, callstack = nil)
Outputs a deprecation warning to the output configured by ActiveSupport::Deprecation#behavior
.
ActiveSupport::Deprecation.new.warn('something broke!')
# => "DEPRECATION WARNING: something broke! (called from your_code.rb:1)"
# File 'activesupport/lib/active_support/deprecation/reporting.rb', line 18
def warn( = nil, callstack = nil) return if silenced callstack ||= caller_locations(2) (callstack, ).tap do || if deprecation_disallowed?( ) disallowed_behavior.each { |b| b.call(, callstack, self) } else behavior.each { |b| b.call(, callstack, self) } end end end