Module: Igniter::Extensions::Contracts::Provenance::TextFormatter
- Defined in:
- lib/igniter/extensions/contracts/provenance/text_formatter.rb
Constant Summary collapse
- VALUE_MAX_LENGTH =
60
Class Method Summary collapse
- .format(trace) ⇒ Object
- .format_value(value) ⇒ Object
- .render(trace, lines, prefix:, is_root:, is_last:) ⇒ Object
Class Method Details
.format(trace) ⇒ Object
12 13 14 15 16 |
# File 'lib/igniter/extensions/contracts/provenance/text_formatter.rb', line 12 def format(trace) lines = [] render(trace, lines, prefix: "", is_root: true, is_last: true) lines.join("\n") end |
.format_value(value) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/igniter/extensions/contracts/provenance/text_formatter.rb', line 45 def format_value(value) rendered = case value when nil then "nil" when String, Symbol then value.inspect when Hash then "{#{value.map { |key, entry| "#{key}: #{entry.inspect}" }.join(", ")}}" when Array then "[#{value.map(&:inspect).join(", ")}]" else value.inspect end return rendered if rendered.length <= VALUE_MAX_LENGTH "#{rendered[0, VALUE_MAX_LENGTH - 3]}..." end |
.render(trace, lines, prefix:, is_root:, is_last:) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/igniter/extensions/contracts/provenance/text_formatter.rb', line 18 def render(trace, lines, prefix:, is_root:, is_last:) if is_root connector = "" child_padding = "" elsif is_last connector = "└─ " child_padding = " " else connector = "├─ " child_padding = "│ " end child_prefix = prefix + child_padding lines << "#{prefix}#{connector}#{trace.name} = #{format_value(trace.value)} [#{trace.kind}]" dependencies = trace.contributing.values dependencies.each_with_index do |dependency, index| render( dependency, lines, prefix: child_prefix, is_root: false, is_last: index == dependencies.length - 1 ) end end |