module Fiva

Constants

DEBUG
ERROR
FATAL
FULL_LEVELS
IMPORTANT
INFO
IO
LEVELS
PLE
VERSION
WARNING

Public Class Methods

puts_handler(**opts) click to toggle source
# File lib/fiva/handlers.rb, line 4
def self.puts_handler(**opts)
  level   = opts.fetch :level,   Fiva::INFO
  padding = opts.fetch :padding, 32
  ple     = opts.fetch :ple,     Fiva::PLE
  target  = opts.fetch :target,  STDERR
  colored = opts.fetch :colored, true

  pastel = Pastel.new
  
  lc = [
    pastel.green.detach,
    pastel.cyan.detach,
    pastel.blue.detach,
    pastel.white.detach,
    pastel.yellow.detach,
    pastel.red.detach,
    pastel.magenta.detach
  ]

  gl = ->(l) {
    return (Fiva::LEVELS[l] || "UNK") unless colored
    (lc[l] || pastel.clear.detach).(Fiva::LEVELS[l] || "UNK")
  }

  cl = ->(l, t) {
    return t unless colored
    (lc[l] || pastel.clear.detach).(t)
  }

  return ->(logger, msg) {
    return if msg.level < level
    
    data = msg.data
      .filter { |k, v| not Fiva::PLE.include? k.to_s }
      .map { |k, v| "#{cl.(msg.level, k)}: #{v.inspect}" }
      .join(' ')

    str = "#{msg.timestamp.strftime} " +
      "#{gl.(msg.level)} " +
      "#{"%-#{padding}s" % msg.msg.to_s} " +
      "#{data}"
    
    msg.data
      .filter { |k, v| Fiva::PLE.include? k.to_s }
      .each_pair { |k, v| str << "\n#{cl.(msg.level, k)}:\n  #{v.to_s.gsub(/\n/, "\n  ")}" }

    target.puts(str)
  }
end
putsr_handler(**opts) click to toggle source
# File lib/fiva/handlers.rb, line 54
def self.putsr_handler(**opts)
  level  = opts.fetch :level,  Fiva::INFO
  target = opts.fetch :target, STDERR
  func   = opts.fetch :func,   ->(msg) { msg.msg.to_s }

  return ->(logger, msg) {
    return if msg.level < level

    target.puts func.(msg)
  }
end