class Motoko::Formatter

Attributes

columns[RW]
columns_spec[R]
count[RW]
mono[RW]
nodes[RW]
options[R]
shortcuts[R]
sort_by[RW]
wide[RW]

Public Class Methods

new() click to toggle source
# File lib/motoko/formatter.rb, line 15
def initialize
  config = Config.new
  @nodes = []
  @columns = config.columns
  @mono = false
  @wide = false
  @count = false
  @sort_by = config.sort_by
  @columns_spec = config.columns_spec
  @shortcuts = config.shortcuts
end

Public Instance Methods

column_resolvers() click to toggle source
# File lib/motoko/formatter.rb, line 42
def column_resolvers
  @column_resolvers ||= columns.map do |column|
    klass = columns_spec[column].delete('resolver') || 'Fact'

    Object.const_get("Motoko::Resolvers::#{snake_to_camel_case(klass)}").new(column, columns_spec[column])
  end
end
data() click to toggle source
# File lib/motoko/formatter.rb, line 50
def data
  return @data if @data

  @data = sorted_nodes.map! do |node|
    column_resolvers.map do |column|
      column.value(node)
    end
  end

  @data.skittlize!(split: "\n", join: ', ') unless mono

  @data
end
headings() click to toggle source
# File lib/motoko/formatter.rb, line 64
def headings
  column_resolvers.each_with_index.map do |column, idx|
    name = column.human_name
    if count
      different_values = data.map { |line| line[idx] }.uniq.compact.count
      name += " (#{different_values})" if different_values > 1
    end
    {
      value: mono ? name : "\e[1m#{name}\e[0m",
      alignment: :center,
    }
  end
end
sorted_nodes() click to toggle source
# File lib/motoko/formatter.rb, line 78
def sorted_nodes
  nodes.sort_by { |a| sort_by.map { |c| a.fact(c) || '' } + [a.identity] }
end
to_s() click to toggle source
# File lib/motoko/formatter.rb, line 27
def to_s
  return '' if nodes.empty?

  @rows = nil
  @column_resolvers = nil

  columns.uniq!

  table = ::Terminal::Table.new headings: headings, rows: data
  column_resolvers.each_with_index do |column, idx|
    table.align_column(idx, column.align) if column.align
  end
  table.to_s
end