Class: CovLoupe::TableFormatter
- Inherits:
-
Object
- Object
- CovLoupe::TableFormatter
- Defined in:
- lib/cov_loupe/formatters/table_formatter.rb
Overview
General-purpose table formatter with Unicode box-drawing or ASCII characters.
Used by CLI subcommands (summary, raw, uncovered, detailed) to format per-file data as aligned tables. Column widths are computed from content. Supports horizontal alignment per column (left, right, center).
Class Method Summary collapse
-
.format(headers:, rows:, alignments: nil, output_chars: :default) ⇒ String
Format data as a table with box-drawing or ASCII characters.
-
.format_vertical(data, output_chars: :default) ⇒ String
Format a single key-value table (vertical layout).
Class Method Details
.format(headers:, rows:, alignments: nil, output_chars: :default) ⇒ String
Format data as a table with box-drawing or ASCII characters.
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 44 45 46 47 |
# File 'lib/cov_loupe/formatters/table_formatter.rb', line 18 def self.format(headers:, rows:, alignments: nil, output_chars: :default) return 'No data to display' if rows.empty? # Resolve mode and get appropriate charset resolved_mode = OutputChars.resolve_mode(output_chars) charset = OutputChars.charset_for(resolved_mode) # Convert cell contents to ASCII if needed convert = ->(text) { OutputChars.convert(text.to_s, resolved_mode) } alignments ||= [:left] * headers.size converted_headers = headers.map(&convert) converted_rows = rows.map { |row| row.map(&convert) } all_rows = [converted_headers] + converted_rows # Calculate column widths widths = headers.size.times.map do |col| all_rows.map { |row| row[col].to_s.length }.max end lines = [] lines << border_line(widths, charset[:top_left], charset[:top_tee], charset[:top_right], charset) lines << data_row(converted_headers, widths, alignments, charset) lines << border_line(widths, charset[:left_tee], charset[:cross], charset[:right_tee], charset) converted_rows.each { |row| lines << data_row(row, widths, alignments, charset) } lines << border_line(widths, charset[:bottom_left], charset[:bottom_tee], charset[:bottom_right], charset) lines.join("\n") end |
.format_vertical(data, output_chars: :default) ⇒ String
Format a single key-value table (vertical layout)
53 54 55 56 |
# File 'lib/cov_loupe/formatters/table_formatter.rb', line 53 def self.format_vertical(data, output_chars: :default) rows = data.map { |k, v| [k.to_s, v.to_s] } format(headers: %w[Key Value], rows: rows, alignments: %i[left left], output_chars: output_chars) end |