class KLog::Tools::BuildFormatterConfigurationForLogStructure

This tool will build a Log Structure Formatter configuration by working through the object graph you would like to use with Log Structure

Public Instance Methods

build_sample_config(data) click to toggle source

Build a sample configuration based on the structure

# File lib/k_log/tools/build_formatter_configuration_for_log_structure.rb, line 11
def build_sample_config(data)
  open_struct_data = KUtil.data.to_open_struct(data)

  lines = [
    '# Usage:',
    '',
    "formatter = #{infer_config(open_struct_data)}",
    '',
    "log.structure(data, heading: 'Insert Heading', line_width: 150, formatter: formatter)"
  ]
  KLog.logger.line
  puts lines
  KLog.logger.line
end

Private Instance Methods

infer_config(data) click to toggle source
# File lib/k_log/tools/build_formatter_configuration_for_log_structure.rb, line 28
def infer_config(data)
  result = {}

  data.each_pair do |key, value|
    next unless value.is_a?(Array)
    next if KUtil.data.basic_type?(value.first)

    result[key] = {
      heading: key.to_s,
      take: :all,
      array_columns: value.first.to_h.keys
    }
  end

  # This is essentially a pretty hash
  JSON.pretty_generate(result)
      .gsub(/(?:"|')(?<key>[^"]*)(?:"|')(?=:)(?::)/) do |_|
    "#{Regexp.last_match(:key)}:"
  end
      .gsub('take: "all"', 'take: :all')
end