# File lib/puppet/util/docs.rb, line 33
33:     def doctable(headers, data)
34:         str = "\n\n"
35: 
36:         lengths = []
37:         # Figure out the longest field for all columns
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:         # The headers could also be longest
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:         # Add the top header row
51:         str += lengths.collect { |num| "=" * num }.join(" ") + "\n"
52: 
53:         # And the header names
54:         str += headers.zip(lengths).collect { |value, num| pad(value, num) }.join(" ") + "\n"
55: 
56:         # And the second header row
57:         str += lengths.collect { |num| "=" * num }.join(" ") + "\n"
58: 
59:         # Now each data row
60:         data.sort { |a, b| a[0].to_s <=> b[0].to_s }.each do |name, rows|
61:             str += [name, rows].flatten.zip(lengths).collect do |value, length|
62:                 pad(value, length)
63:             end.join(" ") + "\n"
64:         end
65: 
66:         # And the bottom line row
67:         str += lengths.collect { |num| "=" * num }.join(" ") + "\n"
68: 
69:         str + "\n"
70:     end