Class: Op::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/op/parser.rb

Instance Method Summary collapse

Constructor Details

#initialize(klass) ⇒ Parser

Returns a new instance of Parser.



3
4
5
# File 'lib/op/parser.rb', line 3

def initialize klass
  @klass = klass
end

Instance Method Details

#parse(arguments) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/op/parser.rb', line 7

def parse arguments
  command = find_command(arguments.shift)

  result = {}
  until arguments.empty?
    part = arguments.shift
    if part.start_with?("--")
      long = part.gsub(/^\-\-/, "")
      argument = command.arguments.find {|a| a[:long] == long}
      if argument[:parameter]
        parameter = arguments.shift
        raise "Argument --#{argument[:long]} takes a parameter" if parameter.nil?
        result[argument[:name]] = parameter
      else
        result[argument[:name]] = true
      end
    elsif part.start_with?("-")
      part_parts = part.gsub(/^\-/, "").split("")
      part_parts.each_with_index do |part_part, index|
        argument = command.arguments.find{|a| a[:short] == part_part}
        if argument[:parameter]
          raise "Argument -#{argument[:short]} takes a parameter, so should come last" if index != part_parts.size - 1
          parameter = arguments.shift
          raise "Argument -#{argument[:short]} takes a parameter" if parameter.nil?
          result[argument[:name]] = parameter
        else
          result[argument[:name]] = true
        end
      end
    end
  end
  result
end