Class: Canon::DiffFormatter::ByLineFormatter
- Inherits:
-
Object
- Object
- Canon::DiffFormatter::ByLineFormatter
- Defined in:
- lib/canon/diff_formatter/by_line_formatter.rb
Overview
Handles the by_line rendering pipeline for line-by-line diffs.
Receives preprocessed document strings from the DiffFormatter facade and delegates to format-specific ByLine formatters (XML, HTML, JSON, YAML).
Instance Method Summary collapse
-
#format(doc1, doc2, format:, html_version: nil, differences: []) ⇒ String
Format a line-by-line diff between two documents.
-
#initialize(use_color:, visualization_map:, context_lines:, diff_grouping_lines:, show_diffs:, character_visualization:, legacy_terminal:, diff_mode:) ⇒ ByLineFormatter
constructor
rubocop:disable Metrics/ParameterLists.
Constructor Details
#initialize(use_color:, visualization_map:, context_lines:, diff_grouping_lines:, show_diffs:, character_visualization:, legacy_terminal:, diff_mode:) ⇒ ByLineFormatter
rubocop:disable Metrics/ParameterLists
13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/canon/diff_formatter/by_line_formatter.rb', line 13 def initialize(use_color:, visualization_map:, context_lines:, diff_grouping_lines:, show_diffs:, character_visualization:, legacy_terminal:, diff_mode:) @use_color = use_color @visualization_map = visualization_map @context_lines = context_lines @diff_grouping_lines = diff_grouping_lines @show_diffs = show_diffs @character_visualization = character_visualization @legacy_terminal = legacy_terminal @diff_mode = diff_mode end |
Instance Method Details
#format(doc1, doc2, format:, html_version: nil, differences: []) ⇒ String
Format a line-by-line diff between two documents.
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/canon/diff_formatter/by_line_formatter.rb', line 35 def format(doc1, doc2, format:, html_version: nil, differences: []) resolved_format = format == :html && html_version ? html_version : format format_name = resolved_format.to_s.upcase output = [] output << colorize("Line-by-line diff (#{format_name} mode):", :cyan, :bold) return output.join("\n") if doc1.nil? || doc2.nil? diffs_array = extract_differences(differences) formatter = ByLine::BaseFormatter.for_format( resolved_format, use_color: @use_color, context_lines: @context_lines, diff_grouping_lines: @diff_grouping_lines, visualization_map: @visualization_map, show_diffs: @show_diffs, differences: diffs_array, diff_mode: @legacy_terminal ? :separate : @diff_mode, legacy_terminal: @legacy_terminal, equivalent: @comparison_equivalent, character_visualization: @character_visualization, ) output << formatter.format(doc1, doc2) output.join("\n") end |