module Sinatras::Command::Options

Public Class Methods

parse!(argv) click to toggle source
# File lib/sinatras/command/options.rb, line 8
def self.parse!(argv)
  options = {}

  sub_command_parsers = create_sub_command_parsers(options)
  command_parser = create_command_parser


  begin
    command_parser.order!(argv)

    options[:command] = argv.shift

    sub_command_parsers[options[:command]].parse!(argv)

    if options[:command] == 'new'
      raise ArgumentError, "#{options[:command]} Appname not found." if argv.empty?
      options[:appname] = String(argv.first)
    end

  rescue OptionParser::MissingArgument, OptionParser::InvalidOption, ArgumentError => e
    abort e.message
  end

  options
end

Private Class Methods

create_command_parser() click to toggle source
# File lib/sinatras/command/options.rb, line 52
def self.create_command_parser
  command_parser = OptionParser.new do |opt|
    sub_command_help = [
      {name: 'new Appname', summary: 'create new project scalton'},
    ]
    opt.banner = "Usage: #{opt.program_name} [-h|--help][-v|--version] <command>[<args>]"
    opt.separator ''
    opt.separator "#{opt.program_name} Available Commands:"
    sub_command_help.each do |command|
      opt.separator [opt.summary_indent, command[:name].ljust(40), command[:summary]].join (' ')
    end

    opt.on_head('-h', '--help', ) do |v|
      puts opt.help
      exit
    end

    opt.on_head('-v', '--version', 'show program version') do |v|
      opt.version = Sinatras::VERSION
      puts opt.ver
      exit
    end
  end
end
create_sub_command_parsers(options) click to toggle source
# File lib/sinatras/command/options.rb, line 34
def self.create_sub_command_parsers(options)
  sub_command_parsers = Hash.new do |k, v|
    raise ArgumentError, "'#{v}' is not sinatras sub command"
  end

  sub_command_parsers['new'] = OptionParser.new do |opt|
    opt.banner = 'Usage: new <args>'
    opt.on_tail('-h', '--help', 'Show this message'){|v| help_sub_command(opt)}
  end

  sub_command_parsers
end
help_sub_command(parser) click to toggle source
# File lib/sinatras/command/options.rb, line 47
def self.help_sub_command(parser)
  puts parser.help
  exit
end