From 64d557eb2f21d96526138993ba42c5701c91ad22 Mon Sep 17 00:00:00 2001 From: Jinkyou Son Date: Fri, 5 Jul 2024 16:08:22 +0900 Subject: [PATCH 1/2] Add quote_boundary opt to content_type/3 --- lib/multipart.ex | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/lib/multipart.ex b/lib/multipart.ex index 4433c6c..873fce2 100644 --- a/lib/multipart.ex +++ b/lib/multipart.ex @@ -70,9 +70,17 @@ defmodule Multipart do iex> Multipart.content_type(multipart, "multipart/mixed") "multipart/mixed; boundary=\\"==abc123==\\"" """ - @spec content_type(Multipart.t(), String.t()) :: String.t() - def content_type(%__MODULE__{boundary: boundary}, mime_type) do - [mime_type, "boundary=\"#{boundary}\""] + @spec content_type(Multipart.t(), String.t(), Keyword.t()) :: String.t() + def content_type(%__MODULE__{boundary: boundary}, mime_type, opts \\ []) do + quote_boundary = opts |> Keyword.get(:quote_boundary, true) + + boundary = + case quote_boundary do + true -> "\"#{boundary}\"" + false -> boundary + end + + [mime_type, "boundary=#{boundary}"] |> Enum.join("; ") end From 2486dfe70ed7f50cdae001708f2ae9a9518de892 Mon Sep 17 00:00:00 2001 From: Jinkyou Son Date: Tue, 20 Jan 2026 09:11:32 +0900 Subject: [PATCH 2/2] Add unit tests for contet_type/3 --- test/multipart_test.exs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/test/multipart_test.exs b/test/multipart_test.exs index c4b5311..f2698cd 100644 --- a/test/multipart_test.exs +++ b/test/multipart_test.exs @@ -124,6 +124,20 @@ defmodule MultipartTest do assert output == expected_output end + describe "content_type/3" do + test "returns Content-Type header with quoted boundary by default" do + multipart = Multipart.new("myboundary") + content_type = Multipart.content_type(multipart, "multipart/form-data") + assert content_type == "multipart/form-data; boundary=\"myboundary\"" + end + + test "returns Content-Type header with unquoted boundary when specified" do + multipart = Multipart.new("myboundary") + content_type = Multipart.content_type(multipart, "multipart/form-data", quote_boundary: false) + assert content_type == "multipart/form-data; boundary=myboundary" + end + end + defp file_path(path) do Path.join(__DIR__, path) end