Sha256: 729b375287474b89ac958b55cf21f6af12a7c91da508d563a4a8aa752433f8a8

Contents?: true

Size: 1.59 KB

Versions: 9

Compression:

Stored size: 1.59 KB

Contents

require 'stringio'

module Clamp

  module Help

    def usage(usage)
      @declared_usage_descriptions ||= []
      @declared_usage_descriptions << usage
    end

    attr_reader :declared_usage_descriptions

    def description=(description)
      @description = description.dup
      if @description =~ /^\A\n*( +)/
        indent = $1
        @description.gsub!(/^#{indent}/, '')
      end
      @description.strip!
    end
    
    attr_reader :description
    
    def derived_usage_description
      parts = parameters.map { |a| a.name }
      parts.unshift("[OPTIONS]") if has_options?
      parts.join(" ")
    end

    def usage_descriptions
      declared_usage_descriptions || [derived_usage_description]
    end

    def help(invocation_path)
      help = StringIO.new
      help.puts "Usage:"
      usage_descriptions.each_with_index do |usage, i|
        help.puts "    #{invocation_path} #{usage}".rstrip
      end
      if description
        help.puts ""
        help.puts description.gsub(/^/, "  ")
      end
      detail_format = "    %-29s %s"
      if has_parameters?
        help.puts "\nParameters:"
        parameters.each do |parameter|
          help.puts detail_format % parameter.help
        end
      end
      if has_subcommands?
        help.puts "\nSubcommands:"
        recognised_subcommands.each do |subcommand|
          help.puts detail_format % subcommand.help
        end
      end
      if has_options?
        help.puts "\nOptions:"
        recognised_options.each do |option|
          help.puts detail_format % option.help
        end
      end
      help.string
    end

  end

end

Version data entries

9 entries across 9 versions & 2 rubygems

Version Path
clamp-0.2.1 lib/clamp/help.rb
clamp-0.2.0 lib/clamp/help.rb
wpb-0.0.5 lib/wpb/clamp/help.rb
clamp-0.1.8 lib/clamp/help.rb
clamp-0.1.7 lib/clamp/help.rb
clamp-0.1.6 lib/clamp/help.rb
clamp-0.1.5 lib/clamp/help.rb
clamp-0.1.4 lib/clamp/help.rb
clamp-0.1.3 lib/clamp/help.rb