Module: Kumi::Dev::Printer::WidthAwareJson

Defined in:
lib/kumi/dev/printer/width_aware_json.rb

Class Method Summary collapse

Class Method Details

.dump(obj, max: 120, indent: 0) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/kumi/dev/printer/width_aware_json.rb', line 9

def dump(obj, max: 120, indent: 0)
  # First try a compact one-liner
  one = JSON.generate(obj)
  return one if one.size <= max

  case obj
  when Array
    items = obj.map { |v| dump(v, max: max, indent: indent + 2) }
    join_multiline("[", items, "]", indent)
  when Hash
    items = obj.map do |k, v|
      key = JSON.generate(k)
      val = dump(v, max: max, indent: indent + 2)
      "#{key}: #{val}"
    end
    join_multiline("{", items, "}", indent)
  else
    one # scalars just return compact
  end
end

.join_multiline(open, items, close, indent) ⇒ Object



30
31
32
33
34
35
36
37
# File 'lib/kumi/dev/printer/width_aware_json.rb', line 30

def join_multiline(open, items, close, indent)
  pad = " " * (indent + 2)
  [
    open,
    pad + items.join(",\n" + pad),
    (" " * indent) + close
  ].join("\n")
end