module RCoLi::CommandContainer
Attributes
parent[RW]
Public Instance Methods
action(&block)
click to toggle source
# File lib/rcoli/model.rb, line 17 def action(&block) @action = block end
command(nam, &block)
click to toggle source
# File lib/rcoli/model.rb, line 25 def command(nam, &block) obj = Command.new(nam) obj.parent = self block.call(obj) commands << obj end
commands()
click to toggle source
# File lib/rcoli/model.rb, line 32 def commands (@commands ||= []) end
find_command(name)
click to toggle source
# File lib/rcoli/model.rb, line 88 def find_command(name) result = commands.find{|command| command.value_of_name.to_s.eql? name} return result end
flag(names, &block)
click to toggle source
# File lib/rcoli/model.rb, line 46 def flag(names, &block) obj = Flag.new(names) block.call(obj) if block_given? options << obj end
get_action()
click to toggle source
# File lib/rcoli/model.rb, line 21 def get_action @action end
options()
click to toggle source
# File lib/rcoli/model.rb, line 36 def options (@options ||= []) end
parse_args(args, result)
click to toggle source
# File lib/rcoli/model.rb, line 52 def parse_args(args, result) return if args.empty? arg = args.delete_at(0) if (is_option? arg) if (option = find_option(arg)) if (option.is_a? Flag) raise InvalidCommand, "Flag #{arg} is missing a value" if args.empty? value = args.delete_at(0) else value = true end option.keys.each{|key| result.options[key] = value} else raise InvalidCommand, "'#{arg}' is not a valid option" end else if (cmd = find_command(arg)) result.command = cmd cmd.put_default_values(result) cmd.parse_args(args, result) cmd.validate_options(result) elsif (commands.empty?) result.arguments << arg else raise InvalidCommand, "'#{arg}' is not a valid #{@name} command" end end parse_args(args, result) end
put_default_values(result)
click to toggle source
# File lib/rcoli/model.rb, line 82 def put_default_values(result) options.find_all{|option| option.respond_to? :value_of_default_value and option.value_of_default_value}.each do |option| option.keys.each{|key| result.options[key] = option.value_of_default_value} end end
switch(names, &block)
click to toggle source
# File lib/rcoli/model.rb, line 40 def switch(names, &block) obj = Switch.new(names) block.call(obj) if block_given? options << obj end
validate_options(result)
click to toggle source
# File lib/rcoli/model.rb, line 93 def validate_options(result) if (result.command.nil? or result.command.value_of_force == true) return else self.options.find_all{|o| o.is_a? Flag and o.value_of_required}.each do |o| raise InvalidCommand, "Required option '#{o.to_s}' is missing" unless o.keys.find{|key| result.options[key]} end end end
Private Instance Methods
find_option(name)
click to toggle source
# File lib/rcoli/model.rb, line 105 def find_option(name) all_options = [] command = self begin all_options.concat(command.options) command = command.parent end while(command) all_options.find{|opt| opt.correspond?(name)} end
is_option?(value)
click to toggle source
# File lib/rcoli/model.rb, line 115 def is_option?(value) value.start_with?('-') end