class Ecu::ValuePrinter
def self.call(label)
def self.call(label) Terminal::Table.new(style: { alignment: :right }) do |t| case label when Kennfeld t << truncate(["y\\x"] + label.xvalue) t << :separator rows = label.yvalue.zip(label.value).map { |h, r| [h] + r } display_rows(rows).each do |row| t << truncate(row) end when Kennlinie t << truncate(["x"] + label.xvalue) t << :separator t << truncate(["y"] + label.value) when Stuetzstellenverteilung t << truncate(["x"] + label.xvalue) when Festwerteblock label.value.each do |row| t << truncate(row) end else fail "Cannot print value for #{label}" end end.to_s end
def self.display_rows(rows)
def self.display_rows(rows) disp = rows.uniq return rows unless rows.size > 1 && disp.size < rows.size redundant_row = rows[0].map { "" }.tap { |r| r[0] = "..." } disp.unshift(redundant_row) if disp[0] == rows[1] disp.push(redundant_row) if disp[-1] == rows[-2] disp end
def self.truncate(row, maxcols=10)
def self.truncate(row, maxcols=10) return row if row.length <= maxcols row[0..(maxcols - 1)] + ["..."] end