lib/dru/argv.rb in dru-0.6.0 vs lib/dru/argv.rb in dru-1.0.0

- old
+ new

@@ -1,27 +1,66 @@ # frozen_string_literal: true +require 'shellwords' + module Dru class Argv attr_reader :argv + def self.parse(*args) + new(*args).parse + end + def initialize(argv = ARGV) - @argv = argv + @argv = argv.dup end def parse - return argv unless docker_compose_command_index + return argv unless known_command - argv.dup.insert(docker_compose_command_index, Thor::Options::OPTS_END) + if dru_command?(known_command) + parse_dru_command + elsif docker_compose_command?(known_command) + parse_docker_compose_command + else + parse_alias_command + end end private - def docker_compose_command_index - argv.index { |arg| docker_compose_command?(arg) } + def parse_docker_compose_command + argv.insert(known_command_index, Thor::Options::OPTS_END) end - def docker_compose_command?(arg) - Dru::DOCKER_COMPOSE_COMMANDS.include?(arg) + def parse_dru_command + argv.unshift(argv.delete(known_command)) + end + + def parse_alias_command + argv[known_command_index] = Shellwords.split(Dru.config.alias[known_command]) + @argv = self.class.parse(argv.flatten) + end + + def known_command + argv[known_command_index] if known_command_index + end + + def known_command_index + @known_command_index ||= argv.index do |arg| + dru_command?(arg) || docker_compose_command?(arg) || alias_command?(arg) + end + end + + def docker_compose_command?(command) + Dru::DOCKER_COMPOSE_COMMANDS.include?(command) + end + + def dru_command?(command) + Dru::CLI.commands.keys.push('help').include?(command) + end + + def alias_command?(command) + Dru.config.alias.respond_to?(command) end end end