class Optimist::Parser

def educate(stream = $stdout)

# Print the help message to +stream+.
def educate(stream = $stdout)
  width # hack: calculate it now; otherwise we have to be careful not to
  # call this unless the cursor's at the beginning of a line.
  left = {}
  @specs.each { |name, spec| left[name] = spec.educate }
  leftcol_width = left.values.map(&:length).max || 0
  rightcol_start = leftcol_width + 6 # spaces
  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