Sha256: 471d3a8d245512ad9f11d0b7f623c9c71de45ccd95fcc79cca73290a9d28b155
Contents?: true
Size: 1.11 KB
Versions: 1
Compression:
Stored size: 1.11 KB
Contents
# frozen_string_literals: true require "set" module Lumberjack class Formatter # Dereference arrays and hashes and recursively call formatters on each element. class StructuredFormatter def initialize(formatter = nil) @formatter = formatter end def call(obj) call_with_references(obj, Set.new) end private def call_with_references(obj, references) references << obj if obj.is_a?(Hash) hash = {} obj.each do |name, value| next if references.include?(value) references << value hash[name.to_s] = call_with_references(value, references) end hash elsif obj.is_a?(Enumerable) && obj.respond_to?(:size) && obj.size != Float::INFINITY array = [] obj.each do |value| next if references.include?(value) references << value array << call_with_references(value, references) end array elsif @formatter @formatter.format(obj) else obj end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
lumberjack-1.2.2 | lib/lumberjack/formatter/structured_formatter.rb |