module ActiveSupport::Deprecation::Reporting
def allow(allowed_warnings = :all, if: true, &block)
end
deprecator.warn('something broke!')
deprecator.allow ['something broke'], if: Rails.env.production? do
# => nil
end
deprecator.warn('something broke!')
deprecator.allow ['something broke'] do
# => ActiveSupport::DeprecationException
deprecator.warn('something broke!')
]
"something broke"
deprecator.disallowed_warnings = [
deprecator.disallowed_behavior = :raise
deprecator = ActiveSupport::Deprecation.new
If falsey then the method yields to the block without allowing the warning.
responds to .call. If truthy, then matching warnings will be allowed.
The optional if: argument accepts a truthy/falsy value or an object that
ActiveSupport::Deprecation#disallowed_warnings.
Matching warnings will be exempt from the rules set by
the text of deprecation warning messages generated within the block.
expressions. (Symbols are treated as strings). These are compared against
allowed_warnings can be an array containing strings, symbols, or regular
Allow previously disallowed deprecation warnings within the block.
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
def begin_silence # :nodoc:
def begin_silence # :nodoc: @silence_counter.value += 1 end
def deprecated_method_warning(method_name, message = nil)
deprecated_method_warning(:method_name, "Optional message")
# => "method_name is deprecated and will be removed from Rails #{deprecation_horizon} (use another_method instead)"
deprecated_method_warning(:method_name, :another_method)
# => "method_name is deprecated and will be removed from Rails #{deprecation_horizon}"
deprecated_method_warning(:method_name)
Outputs a deprecation warning message
def deprecated_method_warning(method_name, message = nil) warning = "#{method_name} is deprecated and will be removed from #{gem_name} #{deprecation_horizon}" case message when Symbol then "#{warning} (use #{message} instead)" when String then "#{warning} (#{message})" else warning end end
def deprecation_caller_message(callstack)
def deprecation_caller_message(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
def deprecation_message(callstack, message = nil)
def deprecation_message(callstack, message = nil) message ||= "You are using deprecated behavior which will be removed from the next major or minor release." "DEPRECATION WARNING: #{message} #{deprecation_caller_message(callstack)}" end
def deprecation_warning(deprecated_method_name, message = nil, caller_backtrace = nil)
def deprecation_warning(deprecated_method_name, message = nil, caller_backtrace = nil) caller_backtrace ||= caller_locations(2) deprecated_method_warning(deprecated_method_name, message).tap do |msg| warn(msg, caller_backtrace) end end
def end_silence # :nodoc:
def end_silence # :nodoc: @silence_counter.value -= 1 end
def extract_callstack(callstack)
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
def ignored_callstack?(path)
def ignored_callstack?(path) path.start_with?(RAILS_GEM_ROOT, LIB_DIR) || path.include?("<internal:") end
def silence(&block)
end
deprecator.warn('something broke!')
deprecator.silence do
# => "DEPRECATION WARNING: something broke! (called from your_code.rb:1)"
deprecator.warn('something broke!')
deprecator = ActiveSupport::Deprecation.new
Silence deprecation warnings within the block.
def silence(&block) begin_silence block.call ensure end_silence end
def silenced
def silenced @silenced || @silence_counter.value.nonzero? end
def warn(message = nil, callstack = nil)
ActiveSupport::Deprecation.new.warn('something broke!')
ActiveSupport::Deprecation#behavior.
Outputs a deprecation warning to the output configured by
def warn(message = nil, callstack = nil) return if silenced callstack ||= caller_locations(2) deprecation_message(callstack, message).tap do |full_message| if deprecation_disallowed?(message) disallowed_behavior.each { |b| b.call(full_message, callstack, self) } else behavior.each { |b| b.call(full_message, callstack, self) } end end end