Sha256: 0bf89fff865172014f70eeaab32d90e402e261645113d52da4ca3731d515fc9b
Contents?: true
Size: 1.68 KB
Versions: 2
Compression:
Stored size: 1.68 KB
Contents
require 'ostruct' module Brigadier class Runner include Helper def initialize(args) @args = args end def run(*klasses) remaining_args = [] args_to_process = [] sub_command_to_execute = false full_args = args.dup collect_execute_blocks(klasses) klasses.each do |klass| remaining_args = args.dup until remaining_args.empty? arg = remaining_args.shift klass.sub_commands.each do |names, sub_command| next unless names.include?(arg) sub_command_to_execute = sub_command break end break if sub_command_to_execute args_to_process << arg end break if sub_command_to_execute end if sub_command_to_execute args_to_process += remaining_args sub_command_to_execute.execute(args_to_process, full_args) elsif default_command default_command.execute(args, full_args, klasses) elsif help_requested?(args) $stderr.puts help(klasses) else raise Exceptions::ExecuteBlockMissing.new(self), 'There is no execute {} block defined' end rescue Exceptions::ExecuteBlockMissing, Exceptions::Base => e $stderr.puts "ERROR: #{e.message}" exit(Exceptions::ERROR_EXIT_CODE) end private attr_reader :args def default_command Brigadier.default_command end def collect_execute_blocks(klasses) klasses.each do |klass| execute_proc = klass.instance_variable_get('@execute_proc') next unless execute_proc Brigadier.set_default_command(klass, execute_proc) end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
brigadier-0.1.2 | lib/brigadier/runner.rb |
brigadier-0.1.1 | lib/brigadier/runner.rb |