33: def doctable(headers, data)
34: str = "\n\n"
35:
36: lengths = []
37:
38: data.each do |name, values|
39: [name, values].flatten.each_with_index do |value, i|
40: lengths[i] ||= 0
41: lengths[i] = value.to_s.length if value.to_s.length > lengths[i]
42: end
43: end
44:
45:
46: headers.each_with_index do |value, i|
47: lengths[i] = value.to_s.length if value.to_s.length > lengths[i]
48: end
49:
50:
51: str += headers.zip(lengths).collect { |value, num| pad(value, num) }.join(" | ") + " |" + "\n"
52:
53:
54: str += lengths.collect { |num| "-" * num }.join(" | ") + " |" + "\n"
55:
56:
57: data.sort { |a, b| a[0].to_s <=> b[0].to_s }.each do |name, rows|
58: str += [name, rows].flatten.zip(lengths).collect do |value, length|
59: pad(value, length)
60: end.join(" | ") + " |" + "\n"
61: end
62:
63: str + "\n"
64: end