# File lib/rhc/commands/base.rb, line 22
  def validate_args_and_options(args_metadata, options_metadata, args)
    # process options
    options_metadata.each do |option_meta|
      arg = option_meta[:arg]

      context_helper = option_meta[:context_helper]
      @options.__hash__[arg] = self.send(context_helper) if @options.__hash__[arg].nil? and context_helper
      raise ArgumentError.new("Missing required option '#{arg}'.") if option_meta[:required] and @options.__hash__[arg].nil?
    end

    # process args
    arg_slots = [].fill(nil, 0, args_metadata.length)
    fill_args = args.reverse
    args_metadata.each_with_index do |arg_meta, i|
      # check options
      value = @options.__hash__[arg_meta[:name]]
      if value
        arg_slots[i] = value
      elsif arg_meta[:arg_type] == :list
        arg_slots[i] = fill_args.reverse
        fill_args = []
      else
        raise ArgumentError.new("Missing required argument '#{arg_meta[:name]}'.") if fill_args.empty?
        arg_slots[i] = fill_args.pop
      end
    end

    raise ArgumentError.new("Too many arguments passed in.") unless fill_args.empty?

    arg_slots
  end