module Eco class CLI class Scripting module ArgsHelpers def argv @argv || ARGV end def is_modifier?(value) Argument.is_modifier?(value) end def arguments @arguments ||= Arguments.new(argv) end def stop_on_unknown!(exclude: [], only_options: false) # validate only those that are options unknown = arguments.unknown(exclude: exclude) if only_options unknown = unknown..select {|arg| is_modifier?(arg)} end unless unknown.empty? raise "There are unknown options in your command line arguments: #{unknown}" end end def get_arg_index(key) return nil if !argv.include?(key) argv.index(key) end def get_arg(key, with_param: false, valid: true) # track what a known option looks like arguments.add(key, with_param: with_param) return nil unless index = get_arg_index(key) value = true if with_param value = argv[index + 1] #puts "modifier argument: #{value}" value = nil if valid && is_modifier?(value) end return value end def get_file(key, required: false, should_exist: true) filename = get_arg(key, with_param: true) if !filename && required puts "You need to specify a file '#{key} file'" exit(1) elsif !file_exists?(filename) && should_exist && required puts "This file doesn't exist '#{filename}'" exit(1) end filename = File.expand_path(filename) if filename && should_exist filename end private def file_exists?(filename) File.exists?(filename) || File.exists?(File.expand_path(filename)) end end end end end