class MrLogaLoga::Context

Description

This class provides a fluent interface to attach contextual information to log messages.

Public Class Methods

new(logger, context = {}) click to toggle source
# File lib/mr_loga_loga/context.rb, line 10
def initialize(logger, context = {})
  @logger = logger
  @context = context
end

Public Instance Methods

add(severity, message = nil, **context, &block) click to toggle source

Log a message with the current context

@param context [Hash] the new context @yield the new context @return [Context] a new context object

# File lib/mr_loga_loga/context.rb, line 31
def add(severity, message = nil, **context, &block)
  severity ||= UNKNOWN
  return true unless @logger.log?(severity)

  context = merge_context(@context, context)
  context = context.call if context.is_a?(Proc)

  @logger.add(severity, message, **context, &block)
end
Also aliased as: log
context(context = {}, &block) click to toggle source

Add a new context to the log message

@param context [Hash] the new context @yield the new context @return [Context] a new context object

# File lib/mr_loga_loga/context.rb, line 20
def context(context = {}, &block)
  @context = merge_context(@context, context)
  @context = merge_context(@context, block)
  self
end
log(severity, message = nil, **context, &block)
Alias for: add
method_missing(symbol, *args, &block) click to toggle source
# File lib/mr_loga_loga/context.rb, line 54
def method_missing(symbol, *args, &block)
  context = block ? -> { { symbol => block.call } } : { symbol => unwrap(args) }
  @context = merge_context(@context, context)
  self
end
respond_to_missing?(name, include_private = false) click to toggle source
Calls superclass method
# File lib/mr_loga_loga/context.rb, line 60
def respond_to_missing?(name, include_private = false)
  super(name, include_private)
end

Private Instance Methods

merge_blocks(original, new) click to toggle source
# File lib/mr_loga_loga/context.rb, line 82
def merge_blocks(original, new)
  return -> { original.merge(new.call) } if original.is_a?(Hash) && new.is_a?(Proc)

  return -> { original.call.merge(new) } if original.is_a?(Proc) && new.is_a?(Hash)

  -> { original.call.merge(new.call) }
end
merge_context(original, new) click to toggle source
# File lib/mr_loga_loga/context.rb, line 74
def merge_context(original, new)
  return original unless new

  return original.merge(new) if original.is_a?(Hash) && new.is_a?(Hash)

  merge_blocks(original, new)
end
unwrap(args) click to toggle source
# File lib/mr_loga_loga/context.rb, line 66
def unwrap(args)
  if args.size == 1
    args[0]
  else
    args
  end
end