Sha256: 9e7b8c09dfcad01ee1cdd2b26219c5e0d4343107d154d8f382a0ef9d52fc355b

Contents?: true

Size: 1.46 KB

Versions: 2

Compression:

Stored size: 1.46 KB

Contents

require 'cxxproject/utils/printer'
require 'cxxproject/utils/exit_helper'

module Cxxproject


class Option
  attr_reader :param, :arg, :block
  def initialize(param, arg, &f)
    @param = param
    @arg = arg # true / false
    @block = f
    f
    
  end
end


class Parser
  
  def initialize(argv)
    @options = {}
    @argv = argv
    @default = nil
  end
  
  def add_option(opt)
    @options[opt.param] = opt
  end
  
  def add_default(opt)
    @default = opt
  end
  
  def parse_internal(ignoreInvalid = true)
    pos = 0
    begin
      while pos < @argv.length do
        if not @options.include?@argv[pos]
          if @default
            if not @default.call(@argv[pos])
              raise "Option #{@argv[pos]} unknown"
            end
          elsif not ignoreInvalid 
            raise "Option #{@argv[pos]} unknown"
          end
        else
          option = @options[@argv[pos]]
          if option.arg
            if pos+1 < @argv.length and @argv[pos+1][0] != "-"
              option.block.call(@argv[pos+1])
              pos = pos + 1
            else
              raise "Argument for option #{@argv[pos]} missing" 
            end
          else
            option.block.call()
          end
        end
        pos = pos + 1
      end
    rescue SystemExit => e
      raise
    rescue Exception => e
      Printer.printError e.message
      ExitHelper.exit(1)
    end
    
  end

end


end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
bake-toolkit-1.0.11 lib/option/parser.rb
bake-toolkit-1.0.10 lib/option/parser.rb