lib/vaulty/output/table.rb
module Vaulty
module Output
class HighlightFilter
attr_reader :matching, :color
def initialize(matching: [], color: :red)
@matching = matching
@color = color
end
def call(val, _row, _column)
matching.include?(val.strip) ? pastel.decorate(val, color) : val
end
def pastel
Pastel::Color.new(enabled: true)
end
end
class Table
DEFAULT_HEADER = %w(Key Value).freeze
attr_reader :data, :prompt, :header
def initialize(data, header: DEFAULT_HEADER, highlight: {}, prompt:)
@data = data
@filter = HighlightFilter.new(**highlight)
@header = header
@prompt = prompt
end
def render
table = TTY::Table.new(data, header: header, style: :markdown)
renderer = table.render(:ascii, column_widths: [30, 80]) do |render|
render.padding = [0, 2, 0, 2]
render.filter = @filter
end
prompt.say renderer
end
def self.render(*args)
new(*args).render
end
end
end
end