module SilentStream::Enhanced

def silence_all(switch = true, temporary_level = Logger::ERROR, logger = nil, &block)

Other tags:
    Note: - This method is not thread-safe.

Returns:
  • (Object) - Returns the block's return value.

Other tags:
    Yield: - The work to perform while silenced.

Parameters:
  • logger (Logger, nil) -- Logger instance to adjust; defaults to Rails.logger when available.
  • temporary_level (Integer) -- Logger level to set temporarily (e.g., Logger::ERROR).
  • switch (Boolean) -- When false, do not silence. Defaults to true.
def silence_all(switch = true, temporary_level = Logger::ERROR, logger = nil, &block)
  if !switch || silent_stream_no_silence
    yield
  else
    begin
      logger ||= silent_stream_logger
      old_logger_level = silent_stream_reset_logger_level(logger, temporary_level)
      # silence STDOUT (like puts)
      silence_stream(STDOUT, &block)
    ensure
      silent_stream_reset_logger_level(logger, old_logger_level)
    end
  end
end

def silent_stream_logger

def silent_stream_logger
  (defined?(Rails) && Rails.respond_to?(:logger) && Rails.logger) ? Rails.logger : nil
end

def silent_stream_no_silence

def silent_stream_no_silence
  ENV["NO_SILENCE"] == "true"
end

def silent_stream_reset_logger_level(logger, temporary_level)

returns previous logger's level
def silent_stream_reset_logger_level(logger, temporary_level)
  logger && (old_logger_level = logger.level || true) && (logger.level = temporary_level)
  old_logger_level
end