Module: Sequel::PrettyTable

Defined in:
lib/sequel_core/pretty_table.rb

Class Method Summary collapse

Class Method Details

.column_sizes(records, columns) ⇒ Object

Hash of the maximum size of the value for each column



26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/sequel_core/pretty_table.rb', line 26

def self.column_sizes(records, columns) # :nodoc:
  sizes = Hash.new {0}
  columns.each do |c|
    s = c.to_s.size
    sizes[c.to_sym] = s if s > sizes[c.to_sym]
  end
  records.each do |r|
    columns.each do |c|
      s = r[c].to_s.size
      sizes[c.to_sym] = s if s > sizes[c.to_sym]
    end
  end
  sizes
end

.data_line(columns, sizes, record) ⇒ Object

String for each data line



42
43
44
# File 'lib/sequel_core/pretty_table.rb', line 42

def self.data_line(columns, sizes, record) # :nodoc:
  '|' << columns.map {|c| format_cell(sizes[c], record[c])}.join('|') << '|'
end

.format_cell(size, v) ⇒ Object

Format the value so it takes up exactly size characters



47
48
49
50
51
52
53
54
55
56
# File 'lib/sequel_core/pretty_table.rb', line 47

def self.format_cell(size, v) # :nodoc:
  case v
  when Bignum, Fixnum
    "%#{size}d" % v
  when Float
    "%#{size}g" % v
  else
    "%-#{size}s" % v.to_s
  end
end

.header_line(columns, sizes) ⇒ Object

String for header line



59
60
61
# File 'lib/sequel_core/pretty_table.rb', line 59

def self.header_line(columns, sizes) # :nodoc:
  '|' << columns.map {|c| "%-#{sizes[c]}s" % c.to_s}.join('|') << '|'
end

Prints nice-looking plain-text tables via puts

+--+-------+
|id|name   |
|--+-------|
|1 |fasdfas|
|2 |test   |
+--+-------+


11
12
13
14
15
16
17
18
19
20
21
# File 'lib/sequel_core/pretty_table.rb', line 11

def self.print(records, columns = nil) # records is an array of hashes
  columns ||= records.first.keys.sort_by{|x|x.to_s}
  sizes = column_sizes(records, columns)
  sep_line = separator_line(columns, sizes)

  puts sep_line
  puts header_line(columns, sizes)
  puts sep_line
  records.each {|r| puts data_line(columns, sizes, r)}
  puts sep_line
end

.separator_line(columns, sizes) ⇒ Object

String for separtor line



64
65
66
# File 'lib/sequel_core/pretty_table.rb', line 64

def self.separator_line(columns, sizes) # :nodoc:
  '+' << columns.map {|c| '-' * sizes[c]}.join('+') << '+'
end