Class: Ecu::ValuePrinter

Inherits:
Object
  • Object
show all
Defined in:
lib/ecu/labels/value_printer.rb

Class Method Summary collapse

Class Method Details

.call(label) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/ecu/labels/value_printer.rb', line 9

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

.display_rows(rows) ⇒ Object



35
36
37
38
39
40
41
42
# File 'lib/ecu/labels/value_printer.rb', line 35

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

.truncate(row, maxcols = 10) ⇒ Object



44
45
46
47
# File 'lib/ecu/labels/value_printer.rb', line 44

def self.truncate(row, maxcols=10)
  return row if row.length <= maxcols
  row[0..(maxcols - 1)] + ["..."]
end