Module: Fiva

Defined in:
lib/fiva.rb,
lib/fiva/logger.rb,
lib/fiva/message.rb,
lib/fiva/version.rb,
lib/fiva/handlers.rb,
lib/fiva/text_value.rb

Defined Under Namespace

Classes: Error, Logger, Message, TextValue

Constant Summary collapse

FATAL =
6
ERROR =
5
WARNING =
4
IMPORTANT =
3
INFO =
2
IO =
1
DEBUG =
0
LEVELS =
['DBG', ' IO', 'INF', 'IMP', 'WRN', 'ERR', 'FTL']
FULL_LEVELS =
['DEBUG', 'IO', 'INFO', 'IMPORTANT', 'WARNING', 'ERROR', 'FATAL']
VERSION =
"0.1.0"
PLE =
['data', 'text', 'body', 'info', 'payload']

Class Method Summary collapse

Class Method Details

.puts_handler(**opts) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# 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) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
# 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