class EacRubyUtils::ArgumentsConsumer::Parser
def add_arg(value, index)
def add_arg(value, index) arg = ::Struct.new(:value, :index).new(value, index) if arg.value.is_a?(::Hash) add_hash_arg(arg) else add_positional_arg(arg) end end
def add_hash_arg(arg)
def add_hash_arg(arg) check_no_more_arguments(arg) data.merge!(arg.value) @options_found = true end
def add_positional_arg(arg)
def add_positional_arg(arg) check_no_more_arguments(arg) invalid_argument arg, 'No more valid positional' if arg.index >= arguments_consumer.positional.count data[arguments_consumer.positional[arg.index]] = arg.value end
def check_no_more_arguments(arg)
def check_no_more_arguments(arg) return unless @options_found invalid_argument arg, 'Hash already found - no more positional allowed' end
def initialize(arguments_consumer, args)
def initialize(arguments_consumer, args) @arguments_consumer = arguments_consumer @data = ::ActiveSupport::HashWithIndifferentAccess.new @options_found = false arguments_consumer.positional.each { |key| data[key] = nil } data.merge!(arguments_consumer.default_options) args.each_with_index { |value, index| add_arg(value, index) } data.freeze end
def invalid_argument(arg, message)
def invalid_argument(arg, message) raise InvalidArgumentError.new(self, arg, message) end