hschne/mr-loga-loga

View on GitHub
lib/mr_loga_loga/logger_data.rb

Summary

Maintainability
A
45 mins
Test Coverage
# frozen_string_literal: true

require 'logger'

module MrLogaLoga
  # == Description
  #
  # This class separates message and contextual data from args
  class LoggerData
    class << self
      def build(*args, &block)
        args = block ? block.call : args
        msg, context = args
        if msg.nil?
          [nil, as_hash(context)]
        elsif context.nil?
          msg.is_a?(Hash) ? [nil, msg] : [msg, {}]
        else
          [msg, as_hash(context)]
        end
      end

      private

      def as_hash(data)
        if data.is_a?(Hash) || data.respond_to?(:to_hash)
          data
        elsif !data.nil?
          { context: data }
        else
          {}
        end
      end
    end
  end
end