# File lib/bundler/dsl.rb, line 80
    def gem(name, *args)
      options = args.last.is_a?(Hash) ? args.pop : {}
      version = args.last

      keys = :vendored_at, :path, :only, :except, :git, :path, :bundle, :require_as, :tag, :branch, :ref
      unless (invalid = options.keys - keys).empty?
        raise InvalidKey, "Only #{keys.join(", ")} are valid options to #gem. You used #{invalid.join(", ")}"
      end

      if path = options.delete(:vendored_at)
        options[:path] = path
        warn "The :vendored_at option is deprecated. Use :path instead.\nFrom #{caller[0]}"
      end

      options[:only] = _combine_only(options[:only] || options["only"])
      options[:except] = _combine_except(options[:except] || options["except"])

      dep = Dependency.new(name, options.merge(:version => version))

      if options.key?(:bundle) && !options[:bundle]
        dep.source = SystemGemSource.new(@bundle)
      elsif @git || options[:git]
        dep.source = _handle_git_option(name, version, options)
      elsif @directory || options[:path]
        dep.source = _handle_vendored_option(name, version, options)
      end

      @environment.dependencies << dep
    end