# File lib/aws/s3/multipart_upload.rb, line 253
      def complete(*parts)
        parts = parts.flatten
        case parts.first
        when :remote_parts
          complete_opts = get_complete_opts
        when :local_parts, nil
          complete_opts = base_opts.merge(:parts => completed_parts)
        else
          part_numbers = parts.map do |part|
            case part
            when Integer
              part
            when UploadedPart
              raise ArgumentError.new("cannot complete an upload with parts "+
                                      "from a different upload") unless
                part.upload == self

              part.part_number
            else
              raise ArgumentError.new("expected number or UploadedPart")
            end
          end
          complete_opts = get_complete_opts(part_numbers)
        end

        raise EmptyUploadError.new("Unable to complete an empty upload.") if complete_opts[:parts].empty?

        resp = client.complete_multipart_upload(complete_opts)
        if resp.data[:version_id]
          ObjectVersion.new(object, resp.data[:version_id])
        else
          object
        end
      end