Class: Canon::DiffFormatter::ByObjectFormatter

Inherits:
Object
  • Object
show all
Defined in:
lib/canon/diff_formatter/by_object_formatter.rb

Overview

Handles the by_object rendering pipeline for tree-based semantic diffs.

Delegates to format-specific ByObject formatters (XML, JSON, YAML) which produce visual tree output with box-drawing characters.

Instance Method Summary collapse

Constructor Details

#initialize(use_color:, visualization_map:, show_diffs:) ⇒ ByObjectFormatter

Returns a new instance of ByObjectFormatter.



12
13
14
15
16
# File 'lib/canon/diff_formatter/by_object_formatter.rb', line 12

def initialize(use_color:, visualization_map:, show_diffs:)
  @use_color = use_color
  @visualization_map = visualization_map
  @show_diffs = show_diffs
end

Instance Method Details

#format(differences, format) ⇒ String

Format a tree-based object diff.

Parameters:

  • differences (Array, ComparisonResult)

    Differences from comparison

  • format (Symbol)

    Document format (:xml, :json, :yaml)

Returns:

  • (String)

    Formatted diff output



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/canon/diff_formatter/by_object_formatter.rb', line 23

def format(differences, format)
  output = []
  output << colorize("Visual Diff:", :cyan, :bold)

  diffs_array = if differences.is_a?(Canon::Comparison::ComparisonResult)
                  differences.differences
                else
                  differences
                end

  formatter = ByObject::BaseFormatter.for_format(
    format,
    use_color: @use_color,
    visualization_map: @visualization_map,
    show_diffs: @show_diffs,
  )

  output << formatter.format(diffs_array, format)
  output.join("\n")
end