Sha256: 441900a2a90781113c4c55329ed559b5cbd60a20393e2eba7dc47274e67312e2

Contents?: true

Size: 1.7 KB

Versions: 3

Compression:

Stored size: 1.7 KB

Contents

# frozen_string_literal: true

begin
  require "rainbow"
rescue LoadError
end

module SiteMaps
  module Primitives
    module Output
      module_function

      def formatted_runtime(number)
        colorize(sprintf("%.3f ms", number), :lightgray)
      end

      def runtime_padding(number, extra = 2)
        " " * (extra + sprintf("%.3f ms", number).size)
      end

      def colorize(text, *attributes)
        if defined? Rainbow
          attributes.reduce(Rainbow(text)) { |p, a| p.public_send(a) }
        else
          text
        end
      end

      def print_error(message_or_error, backtrace: false, **options)
        options[:level] ||= :error
        message = message_or_error.to_s

        print_message(message, output: :stderr, **options)

        if message_or_error.is_a?(Exception) && backtrace
          limit = backtrace.is_a?(Integer) ? backtrace : -1
          print_backtrace(message_or_error, limit: limit, level: options[:level])
        end
      end

      def print_backtrace(error, limit: -1, **options)
        return unless error.respond_to?(:backtrace)
        return if error.backtrace.nil?

        error.backtrace[0..limit].each { |frame| print_error(frame, **options) }
      end

      def print_message(message, level: :info, output: $stdout, newline: true, **fields)
        output =
          case output
          when :stdout, "stdout"
            $stdout
          when :stderr, "stderr"
            $stderr
          when IO, StringIO
            output
          else
            raise ArgumentError, "Invalid output #{output.inspect}"
          end

        message = format(message, **fields)
        newline ? output.puts(message) : output.print(message)
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
site_maps-0.0.1.beta3 lib/site_maps/primitives/output.rb
site_maps-0.0.1.beta2 lib/site_maps/primitives/output.rb
site_maps-0.0.1.beta1 lib/site_maps/primitives/output.rb