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-next 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-next 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.
34 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 |
# File 'lib/canon/diff_formatter/by_line_formatter.rb', line 34 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 |