From ae037fddccfd39f0ac7bd28534c1061abe08b798 Mon Sep 17 00:00:00 2001 From: Muhammad Ilham Date: Wed, 1 Sep 2021 15:07:46 +0700 Subject: [PATCH 1/5] feat(#432): Implement Easier Adding of Multiple Value HTTP Header Implement easier adding of multiple value HTTP Header with function `SetMultiValueHeaders` --- request.go | 26 ++++++++++++++++++++++++++ request_test.go | 12 ++++++++++++ 2 files changed, 38 insertions(+) diff --git a/request.go b/request.go index 41709cf9..51acabf4 100644 --- a/request.go +++ b/request.go @@ -117,6 +117,32 @@ func (r *Request) SetHeaders(headers map[string]string) *Request { return r } +// SetMultiValueHeaders sets multiple headers fields and its values is list of strings at one go in the current request. +// +// For Example: To set `Accept` as `text/html, application/xhtml+xml, application/xml;q=0.9, image/webp, */*;q=0.8` +// +// client.R(). +// SetMultiValueHeaders(map[string][]string{ +// "Accept": []string{"text/html", "application/xhtml+xml", "application/xml;q=0.9", "image/webp", "*/*;q=0.8"}, +// }) +// Also you can override header value, which was set at client instance level. +func (r *Request) SetMultiValueHeaders(headers map[string][]string) *Request { + for key, values := range headers { + var headerValue string + + if len(values) > 1 { + headerValue = strings.Join(values, ", ") + } + + if len(values) == 1 { + headerValue = values[0] + } + + r.SetHeader(key, headerValue) + } + return r +} + // SetHeaderVerbatim method is to set a single header field and its value verbatim in the current request. // // For Example: To set `all_lowercase` and `UPPERCASE` as `available`. diff --git a/request_test.go b/request_test.go index 368463ac..ff557aa9 100644 --- a/request_test.go +++ b/request_test.go @@ -1371,6 +1371,18 @@ func TestSetHeaderVerbatim(t *testing.T) { assertEqual(t, "value_standard", r.Header.Get("Header-Lowercase")) } +func TestSetHeaderMultipleValue(t *testing.T) { + ts := createPostServer(t) + defer ts.Close() + + r := dclr(). + SetMultiValueHeaders(map[string][]string{ + "Content": []string{"text/*", "text/html", "*"}, + "Authorization": []string{"Bearer xyz"}, + }) + assertEqual(t, "text/*, text/html, *", r.Header.Get("content")) +} + func TestOutputFileWithBaseDirAndRelativePath(t *testing.T) { ts := createGetServer(t) defer ts.Close() From f16905b7e02fc3acf9327b2b3ae7e7e11a2aba84 Mon Sep 17 00:00:00 2001 From: Muhammad Ilham Date: Thu, 2 Sep 2021 10:31:25 +0700 Subject: [PATCH 2/5] refactor(#432): Change The Second If Statement To Else Statement --- request.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/request.go b/request.go index 51acabf4..7ed964d3 100644 --- a/request.go +++ b/request.go @@ -132,9 +132,7 @@ func (r *Request) SetMultiValueHeaders(headers map[string][]string) *Request { if len(values) > 1 { headerValue = strings.Join(values, ", ") - } - - if len(values) == 1 { + } else { headerValue = values[0] } From a22f51a653dcdbc3f8eedbbecd34c76de205f567 Mon Sep 17 00:00:00 2001 From: Muhammad Ilham Date: Tue, 7 Sep 2021 13:09:44 +0700 Subject: [PATCH 3/5] refactor(#432): Remove If-Else --- request.go | 10 +--------- request_test.go | 1 + 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/request.go b/request.go index 7ed964d3..cbe19d34 100644 --- a/request.go +++ b/request.go @@ -128,15 +128,7 @@ func (r *Request) SetHeaders(headers map[string]string) *Request { // Also you can override header value, which was set at client instance level. func (r *Request) SetMultiValueHeaders(headers map[string][]string) *Request { for key, values := range headers { - var headerValue string - - if len(values) > 1 { - headerValue = strings.Join(values, ", ") - } else { - headerValue = values[0] - } - - r.SetHeader(key, headerValue) + r.SetHeader(key, strings.Join(values, ", ")) } return r } diff --git a/request_test.go b/request_test.go index ff557aa9..01b8c527 100644 --- a/request_test.go +++ b/request_test.go @@ -1381,6 +1381,7 @@ func TestSetHeaderMultipleValue(t *testing.T) { "Authorization": []string{"Bearer xyz"}, }) assertEqual(t, "text/*, text/html, *", r.Header.Get("content")) + assertEqual(t, "Bearer xyz", r.Header.Get("authorization")) } func TestOutputFileWithBaseDirAndRelativePath(t *testing.T) { From c86aa8f87becfc31fb27b9257a8556fe450cee4f Mon Sep 17 00:00:00 2001 From: Muhammad Ilham Date: Sun, 12 Sep 2021 15:51:42 +0700 Subject: [PATCH 4/5] refactor(#432): Update The Method To SetHeaderMultiValues --- request.go | 2 +- request_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/request.go b/request.go index cbe19d34..d8c3280c 100644 --- a/request.go +++ b/request.go @@ -126,7 +126,7 @@ func (r *Request) SetHeaders(headers map[string]string) *Request { // "Accept": []string{"text/html", "application/xhtml+xml", "application/xml;q=0.9", "image/webp", "*/*;q=0.8"}, // }) // Also you can override header value, which was set at client instance level. -func (r *Request) SetMultiValueHeaders(headers map[string][]string) *Request { +func (r *Request) SetHeaderMultiValues(headers map[string][]string) *Request { for key, values := range headers { r.SetHeader(key, strings.Join(values, ", ")) } diff --git a/request_test.go b/request_test.go index 01b8c527..e0b6065b 100644 --- a/request_test.go +++ b/request_test.go @@ -1376,7 +1376,7 @@ func TestSetHeaderMultipleValue(t *testing.T) { defer ts.Close() r := dclr(). - SetMultiValueHeaders(map[string][]string{ + SetHeaderMultiValues(map[string][]string{ "Content": []string{"text/*", "text/html", "*"}, "Authorization": []string{"Bearer xyz"}, }) From 30e96aeea9a12d783d0086fc7dfdb1c7a8790126 Mon Sep 17 00:00:00 2001 From: Jeevanandam M Date: Sun, 12 Sep 2021 09:35:46 -0700 Subject: [PATCH 5/5] godoc update with correct method name --- request.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/request.go b/request.go index d8c3280c..b9d01847 100644 --- a/request.go +++ b/request.go @@ -117,12 +117,12 @@ func (r *Request) SetHeaders(headers map[string]string) *Request { return r } -// SetMultiValueHeaders sets multiple headers fields and its values is list of strings at one go in the current request. +// SetHeaderMultiValues sets multiple headers fields and its values is list of strings at one go in the current request. // // For Example: To set `Accept` as `text/html, application/xhtml+xml, application/xml;q=0.9, image/webp, */*;q=0.8` // // client.R(). -// SetMultiValueHeaders(map[string][]string{ +// SetHeaderMultiValues(map[string][]string{ // "Accept": []string{"text/html", "application/xhtml+xml", "application/xml;q=0.9", "image/webp", "*/*;q=0.8"}, // }) // Also you can override header value, which was set at client instance level.