class Kontena::Cli::TableGenerator
Constants
- DEFAULT_HEADER_FORMAT_PROC
- DEFAULT_RENDER_OPTS
Attributes
data[R]
fields[R]
header[R]
header_format_proc[R]
render_mode[R]
render_options[R]
row_format_proc[R]
Public Class Methods
new(data, fields = nil, row_format_proc: nil, header_format_proc: nil, render_options: nil)
click to toggle source
@param data [Array<Hash>,Array<Array>] an array of hashes or arrays @param fields [Array] an array of field names found in the data hashes. @param fields [Hash] a hash of field_title => field_name_in_the_data_hash, for example 'Users' => 'user_count' @param fields [NilClass] try to auto detect fields (all fields!) from the data hashes @return [TTY::Table]
# File lib/kontena/cli/table_generator.rb, line 49 def initialize(data, fields = nil, row_format_proc: nil, header_format_proc: nil, render_options: nil) @data = data @render_options = render_options || { } @render_mode = @render_options.delete(:mode) || :basic @row_format_proc = row_format_proc @header_format_proc = header_format_proc || DEFAULT_HEADER_FORMAT_PROC @fields = parse_fields(fields) @header = generate_header(fields || @fields) end
Public Instance Methods
create_table(header, rows)
click to toggle source
# File lib/kontena/cli/table_generator.rb, line 59 def create_table(header, rows) TTY::Table.new( header: header, rows: rows ) end
detect_fields()
click to toggle source
Collect all the unique keys from the hashes if the data is an array of hashes.
# File lib/kontena/cli/table_generator.rb, line 95 def detect_fields if data.first.respond_to?(:keys) data.flat_map(&:keys).uniq else [] end end
format_header_item(field_name)
click to toggle source
# File lib/kontena/cli/table_generator.rb, line 85 def format_header_item(field_name) header_format_proc.call(field_name) end
format_row(row)
click to toggle source
# File lib/kontena/cli/table_generator.rb, line 78 def format_row(row) return row if row_format_proc.nil? row_clone = row.dup row_format_proc.call(row_clone) row_clone end
generate_header(fields)
click to toggle source
# File lib/kontena/cli/table_generator.rb, line 113 def generate_header(fields) if fields.kind_of?(Hash) header = fields.keys else header = Array(fields) end if header.size < 2 nil else header.map { |head| format_header_item(head) } end end
parse_fields(fields)
click to toggle source
# File lib/kontena/cli/table_generator.rb, line 103 def parse_fields(fields) if fields.nil? || fields.empty? detect_fields elsif fields.kind_of?(Hash) fields.values else fields end end
render()
click to toggle source
# File lib/kontena/cli/table_generator.rb, line 70 def render if data.empty? fields.size > 1 ? fields.map(&method(:format_header_item)).join(' ') : '' else table.render(render_mode, render_options).gsub(/\s+$/, '') end end
rows()
click to toggle source
# File lib/kontena/cli/table_generator.rb, line 89 def rows fields.empty? ? data.map { |row| format_row(row).map(&:values) } : data.map { |row| format_row(row).values_at(*fields) } end
table()
click to toggle source
# File lib/kontena/cli/table_generator.rb, line 66 def table create_table(header, rows) end