Sha256: c4575f30c3016b836e2f140fb9ba29138f4e95580f651f705de8baec71e41b8c
Contents?: true
Size: 1.46 KB
Versions: 1
Compression:
Stored size: 1.46 KB
Contents
require 'byebug' require 'template' class Tabled DEFAULT_OPTIONS = { borders: false } attr_accessor :data, :columns_width, :content, :options def initialize(data, **options) @options = DEFAULT_OPTIONS.merge(options) @data = data @columns_width = [] convert_to_required_structure calculate_columns_width prepare_content end def print_to_console print content.join("\n") end private def convert_to_required_structure self.data = data.map { |row| row << {} unless row.last.is_a?(Hash) row } end def calculate_columns_width data.each do |row| row_without_params = row[0..-2] row_without_params.each_with_index { |column, index| is_column_last = row_without_params.count == index + 1 if is_column_last possible_new_value = [row.last.fetch(:footer, '').to_s.size, column.to_s.size].sort.last self.columns_width[index] = possible_new_value if possible_new_value > (self.columns_width[index] || 0) else self.columns_width[index] = column.to_s.size if column.to_s.size > (self.columns_width[index] || 0) end } end self.columns_width = columns_width.map { |column_width| column_width + 1 } end def prepare_content self.content = data.inject([]) { |enumerator, row| enumerator << Tabled::Template::Row.render(row, columns_width, options) enumerator << Tabled::Template::RowFooter.render(row) }.compact end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
tabled-0.0.1 | lib/tabled.rb |