Skip to content

Commit 83ca160

Browse files
authored
Merge pull request #35 from amingolmahalle/refactor/HCG-25
Used Builder Pattern
2 parents cddc637 + 519f5e4 commit 83ca160

File tree

20 files changed

+328
-380
lines changed

20 files changed

+328
-380
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
using System.Text;
2+
3+
namespace HttpClientToCurl.Builder.Concrete.Common;
4+
5+
public abstract class BaseBuilder
6+
{
7+
protected readonly StringBuilder _stringBuilder = new();
8+
}

src/HttpClientToCurl/Builder.cs renamed to src/HttpClientToCurl/Builder/Concrete/Common/Extensions.cs

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
using System.Net;
22
using System.Text;
3+
using System.Web;
34
using HttpClientToCurl.Utility;
45

5-
namespace HttpClientToCurl;
6+
namespace HttpClientToCurl.Builder.Concrete.Common;
67

7-
internal static class Builder
8+
internal static class Extensions
89
{
9-
internal static StringBuilder Initialize(HttpMethod httpMethod)
10+
internal static StringBuilder Initialize(this StringBuilder stringBuilder, HttpMethod httpMethod)
1011
{
11-
var stringBuilder = new StringBuilder("curl");
12+
stringBuilder.Append("curl");
1213

1314
if (httpMethod != HttpMethod.Get)
1415
{
@@ -40,7 +41,7 @@ internal static StringBuilder AddAbsoluteUrl(this StringBuilder stringBuilder, s
4041

4142
string address = GetAbsoluteAddress(baseAddressUri, baseAddressIsAbsoluteUri, requestUri, requestUriIsAbsoluteUri);
4243

43-
var encodedAddress = ApplyEncodeUri(address);
44+
var encodedAddress = address.ApplyEncodeUri();
4445

4546
return stringBuilder
4647
.Append($"{AddSingleQuotationMark(encodedAddress ?? address)}")
@@ -82,7 +83,7 @@ private static string GetAbsoluteAddress(Uri baseAddressUri, bool baseAddressIsA
8283
return $"{baseAddressUri}{requestUri}";
8384
}
8485

85-
private static string ApplyEncodeUri(string address)
86+
private static string ApplyEncodeUri(this string address)
8687
{
8788
string result = null;
8889

@@ -195,4 +196,26 @@ internal static StringBuilder AddBody(this StringBuilder stringBuilder, HttpCont
195196

196197
return stringBuilder;
197198
}
199+
200+
private static void AppendBodyItem(this StringBuilder stringBuilder, object body)
201+
=> stringBuilder
202+
.Append("-d")
203+
.Append(' ')
204+
.Append('\'')
205+
.Append(body)
206+
.Append('\'')
207+
.Append(' ');
208+
209+
private static void AddFormUrlEncodedContentBody(this StringBuilder stringBuilder, string body)
210+
{
211+
string decodedBody = HttpUtility.UrlDecode(body);
212+
string[] splitBodyArray = decodedBody.Split('&');
213+
if (splitBodyArray.Any())
214+
{
215+
foreach (string item in splitBodyArray)
216+
{
217+
stringBuilder.AppendBodyItem(item);
218+
}
219+
}
220+
}
198221
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using HttpClientToCurl.Builder.Concrete.Common;
2+
using HttpClientToCurl.Config;
3+
using HttpClientToCurl.Builder.Interface;
4+
5+
namespace HttpClientToCurl.Builder.Concrete;
6+
7+
public sealed class HttpDeleteBuilder : BaseBuilder, IBuilder
8+
{
9+
public string Create(HttpClient httpClient, HttpRequestMessage httpRequestMessage, BaseConfig config)
10+
{
11+
return _stringBuilder
12+
.Initialize(httpRequestMessage.Method)
13+
.AddAbsoluteUrl(httpClient.BaseAddress?.AbsoluteUri, httpRequestMessage.RequestUri)
14+
.AddHeaders(httpClient, httpRequestMessage, config?.NeedAddDefaultHeaders ?? new BaseConfig().NeedAddDefaultHeaders)?
15+
.Finalize(config?.EnableCompression ?? new BaseConfig().EnableCompression);
16+
}
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using HttpClientToCurl.Builder.Concrete.Common;
2+
using HttpClientToCurl.Config;
3+
using HttpClientToCurl.Builder.Interface;
4+
5+
namespace HttpClientToCurl.Builder.Concrete;
6+
7+
public sealed class HttpGetBuilder : BaseBuilder, IBuilder
8+
{
9+
public string Create(HttpClient httpClient, HttpRequestMessage httpRequestMessage, BaseConfig config)
10+
{
11+
return _stringBuilder
12+
.Initialize(httpRequestMessage.Method)
13+
.AddAbsoluteUrl(httpClient.BaseAddress?.AbsoluteUri, httpRequestMessage.RequestUri)
14+
.AddHeaders(httpClient, httpRequestMessage, config?.NeedAddDefaultHeaders ?? new BaseConfig().NeedAddDefaultHeaders)?
15+
.Finalize(config?.EnableCompression ?? new BaseConfig().EnableCompression);
16+
}
17+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using HttpClientToCurl.Builder.Concrete.Common;
2+
using HttpClientToCurl.Config;
3+
using HttpClientToCurl.Builder.Interface;
4+
5+
namespace HttpClientToCurl.Builder.Concrete;
6+
7+
public sealed class HttpPatchBuilder : BaseBuilder, IBuilder
8+
{
9+
public string Create(HttpClient httpClient, HttpRequestMessage httpRequestMessage, BaseConfig config)
10+
{
11+
return _stringBuilder
12+
.Initialize(httpRequestMessage.Method)
13+
.AddAbsoluteUrl(httpClient.BaseAddress?.AbsoluteUri, httpRequestMessage.RequestUri)
14+
.AddHeaders(httpClient, httpRequestMessage, config?.NeedAddDefaultHeaders ?? new BaseConfig().NeedAddDefaultHeaders)?
15+
.AddBody(httpRequestMessage.Content)?
16+
.Finalize(config?.EnableCompression ?? new BaseConfig().EnableCompression);
17+
}
18+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using HttpClientToCurl.Builder.Concrete.Common;
2+
using HttpClientToCurl.Config;
3+
using HttpClientToCurl.Builder.Interface;
4+
5+
namespace HttpClientToCurl.Builder.Concrete;
6+
7+
public sealed class HttpPostBuilder : BaseBuilder, IBuilder
8+
{
9+
public string Create(HttpClient httpClient, HttpRequestMessage httpRequestMessage, BaseConfig config)
10+
{
11+
return _stringBuilder
12+
.Initialize(httpRequestMessage.Method)
13+
.AddAbsoluteUrl(httpClient.BaseAddress?.AbsoluteUri, httpRequestMessage.RequestUri)
14+
.AddHeaders(httpClient, httpRequestMessage, config?.NeedAddDefaultHeaders ?? new BaseConfig().NeedAddDefaultHeaders)?
15+
.AddBody(httpRequestMessage.Content)?
16+
.Finalize(config?.EnableCompression ?? new BaseConfig().EnableCompression);
17+
}
18+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using HttpClientToCurl.Builder.Concrete.Common;
2+
using HttpClientToCurl.Config;
3+
using HttpClientToCurl.Builder.Interface;
4+
5+
namespace HttpClientToCurl.Builder.Concrete;
6+
7+
public sealed class HttpPutBuilder : BaseBuilder, IBuilder
8+
{
9+
public string Create(HttpClient httpClient, HttpRequestMessage httpRequestMessage, BaseConfig config)
10+
{
11+
return _stringBuilder
12+
.Initialize(httpRequestMessage.Method)
13+
.AddAbsoluteUrl(httpClient.BaseAddress?.AbsoluteUri, httpRequestMessage.RequestUri)
14+
.AddHeaders(httpClient, httpRequestMessage, config?.NeedAddDefaultHeaders ?? new BaseConfig().NeedAddDefaultHeaders)?
15+
.AddBody(httpRequestMessage.Content)?
16+
.Finalize(config?.EnableCompression ?? new BaseConfig().EnableCompression);
17+
}
18+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using HttpClientToCurl.Config;
2+
using HttpClientToCurl.Builder.Interface;
3+
4+
namespace HttpClientToCurl.Builder.Director;
5+
6+
public class Creator(IBuilder builder)
7+
{
8+
public string CreateCurl(HttpClient httpClient, HttpRequestMessage httpRequestMessage, BaseConfig config)
9+
{
10+
return builder.Create(httpClient, httpRequestMessage, config);
11+
}
12+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
using System.Data;
2+
using HttpClientToCurl.Builder.Concrete;
3+
using HttpClientToCurl.Builder.Director;
4+
using HttpClientToCurl.Config;
5+
6+
namespace HttpClientToCurl.Builder;
7+
8+
public static class Generator
9+
{
10+
public static string GenerateCurl(HttpClient httpClient, HttpRequestMessage httpRequestMessage, BaseConfig config)
11+
{
12+
string script;
13+
14+
try
15+
{
16+
if (httpRequestMessage.Method == HttpMethod.Get)
17+
{
18+
var instance = new Creator(new HttpGetBuilder());
19+
script = instance.CreateCurl(httpClient, httpRequestMessage, config);
20+
}
21+
else if (httpRequestMessage.Method == HttpMethod.Post)
22+
{
23+
var instance = new Creator(new HttpPostBuilder());
24+
script = instance.CreateCurl(httpClient, httpRequestMessage, config);
25+
}
26+
else if (httpRequestMessage.Method == HttpMethod.Put)
27+
{
28+
var instance = new Creator(new HttpPutBuilder());
29+
script = instance.CreateCurl(httpClient, httpRequestMessage, config);
30+
}
31+
else if (httpRequestMessage.Method == HttpMethod.Patch)
32+
{
33+
var instance = new Creator(new HttpPatchBuilder());
34+
script = instance.CreateCurl(httpClient, httpRequestMessage, config);
35+
}
36+
else if (httpRequestMessage.Method == HttpMethod.Delete)
37+
{
38+
var instance = new Creator(new HttpDeleteBuilder());
39+
script = instance.CreateCurl(httpClient, httpRequestMessage, config);
40+
}
41+
else
42+
{
43+
throw new DataException($"not supported {httpRequestMessage.Method.Method} by HttpClientToCurl!");
44+
}
45+
}
46+
catch (Exception exception)
47+
{
48+
script = $"GenerateCurlError => {exception.Message} {exception.InnerException}";
49+
}
50+
51+
return script;
52+
}
53+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
using HttpClientToCurl.Config;
2+
3+
namespace HttpClientToCurl.Builder.Interface;
4+
5+
public interface IBuilder
6+
{
7+
string Create(HttpClient httpClient, HttpRequestMessage httpRequestMessage, BaseConfig config);
8+
}

0 commit comments

Comments
 (0)