def educate(stream = $stdout)
width
left = {}
@specs.each { |name, spec| left[name] = spec.educate }
leftcol_width = left.values.map(&:length).max || 0
rightcol_start = leftcol_width + 6
unless @order.size > 0 && @order.first.first == :text
command_name = File.basename($0).gsub(/\.[^.]+$/, '')
stream.puts "Usage: #{command_name} #{@usage}\n" if @usage
stream.puts "#{@synopsis}\n" if @synopsis
stream.puts if @usage || @synopsis
stream.puts "#{@version}\n" if @version
stream.puts "Options:"
end
@order.each do |what, opt|
if what == :text
stream.puts wrap(opt)
next
end
spec = @specs[opt]
stream.printf " %-#{leftcol_width}s ", left[opt]
desc = spec.description_with_default
stream.puts wrap(desc, :width => width - rightcol_start - 1, :prefix => rightcol_start)
end
end