Skip to content

Commit f195f10

Browse files
authored
Supported to the HttpRequest method as static parameter (#16)
* Wip * Update README.md
1 parent 18041f8 commit f195f10

File tree

4 files changed

+98
-24
lines changed

4 files changed

+98
-24
lines changed
Binary file not shown.

README.md

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,14 @@ Request {
111111
...
112112
}
113113
```
114+
- Using `static let method:` to `httpMethod` declaration.
115+
```swift
116+
Request {
117+
...
118+
Method.get
119+
...
120+
}
121+
```
114122
---
115123
### URL declaration
116124
- Using `URL(_ url:)` to `URL` declaration.
@@ -189,7 +197,7 @@ enum APIs: RouterProtocol {
189197
switch self {
190198
case let .listOrganizationRepositories(organizationName):
191199
Request {
192-
Method(.post)
200+
Method.post
193201
Header {
194202
Field("application/vnd.github+json", forKey: "Accept")
195203
Field("Bearer <YOUR-TOKEN>", forKey: "Authorization")
@@ -201,7 +209,7 @@ enum APIs: RouterProtocol {
201209
}
202210
case let .createAnOrganizationRepository(organizationName, repositoryInfo):
203211
Request {
204-
Method(.post)
212+
Method.post
205213
Header {
206214
Field("application/vnd.github+json", forKey: "Accept")
207215
Field("Bearer <YOUR-TOKEN>", forKey: "Authorization")
@@ -222,7 +230,7 @@ enum APIs: RouterProtocol {
222230
}
223231
case let .searchRepositories(query):
224232
Request {
225-
Method(.get)
233+
Method.get
226234
Header {
227235
Field("application/vnd.github+json", forKey: "Accept")
228236
Field("Bearer <YOUR-TOKEN>", forKey: "Authorization")

Sources/APIRouter/RequestBuilder.swift

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import Foundation
22

3+
/// [HttpMethod Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods#:~:text=HTTP%20request%20methods,-HTTP%20defines%20a)
34
public enum HttpMethod: String {
45
case options = "OPTIONS"
56
case get = "GET"
@@ -50,6 +51,33 @@ public extension Request {
5051
public struct Method: RequestProtocol {
5152
private let method: HttpMethod
5253

54+
/// A parser of OPTIONS request method.
55+
public static let options = Self(.options)
56+
57+
/// A parser of GET request method.
58+
public static let get = Self(.get)
59+
60+
/// A parser of HEAD request method.
61+
public static let head = Self(.head)
62+
63+
/// A parser of POST requests.
64+
public static let post = Self(.post)
65+
66+
/// A parser of PUT requests.
67+
public static let put = Self(.put)
68+
69+
/// A parser of PATCH requests.
70+
public static let patch = Self(.patch)
71+
72+
/// A parser of DELETE requests.
73+
public static let delete = Self(.delete)
74+
75+
/// A parser of TRACE requests.
76+
public static let trace = Self(.trace)
77+
78+
/// A parser of CONNECT requests.
79+
public static let connect = Self(.connect)
80+
5381
public init(_ method: HttpMethod) {
5482
self.method = method
5583
}

Tests/APIRouterTests/RequestBuilderTests.swift

Lines changed: 59 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,23 @@ final class RequestBuilderTests: XCTestCase {
1010
}
1111
}
1212

13-
guard
14-
let requestBody = request.urlRequest?.httpBody,
15-
let bodyString = String(data: requestBody, encoding: .utf8)
16-
else { return }
17-
18-
XCTAssertEqual(bodyString, "{\"KEY\":\"VALUE\"}")
13+
if let requestBody = request.urlRequest?.httpBody,
14+
let bodyString = String(data: requestBody, encoding: .utf8)
15+
{
16+
XCTAssertEqual(bodyString, "{\"KEY\":\"VALUE\"}")
17+
}
1918
}
2019

2120
func testGeneratedHttpRequestBodyWithObjectThroughInitializer() {
2221
let request = Request {
2322
Body(["KEY": "VALUE"])
2423
}
25-
26-
guard
27-
let requestBody = request.urlRequest?.httpBody,
28-
let bodyString = String(data: requestBody, encoding: .utf8)
29-
else { return }
3024

31-
XCTAssertEqual(bodyString, "{\"KEY\":\"VALUE\"}")
25+
if let requestBody = request.urlRequest?.httpBody,
26+
let bodyString = String(data: requestBody, encoding: .utf8)
27+
{
28+
XCTAssertEqual(bodyString, "{\"KEY\":\"VALUE\"}")
29+
}
3230
}
3331

3432
func testGeneratedHttpRequestHeaderWithHeaderBuilder() {
@@ -38,19 +36,19 @@ final class RequestBuilderTests: XCTestCase {
3836
}
3937
}
4038

41-
guard let requestHeader = request.urlRequest?.value(forHTTPHeaderField: "JSON_KEY") else { return }
42-
43-
XCTAssertEqual(requestHeader, "JSON_VALUE")
39+
if let requestHeader = request.urlRequest?.value(forHTTPHeaderField: "JSON_KEY") {
40+
XCTAssertEqual(requestHeader, "JSON_VALUE")
41+
}
4442
}
4543

4644
func testGeneratedHttpRequestHeaderWithRequestBuilder() {
4745
let request = Request {
4846
Header(["KEY": "VALUE"])
4947
}
5048

51-
guard let requestHeader = request.urlRequest?.value(forHTTPHeaderField: "KEY") else { return }
52-
53-
XCTAssertEqual(requestHeader, "VALUE")
49+
if let requestHeader = request.urlRequest?.value(forHTTPHeaderField: "KEY") {
50+
XCTAssertEqual(requestHeader, "VALUE")
51+
}
5452
}
5553

5654
func testGeneratedMethodProtocolWithRequestBuilder() {
@@ -93,6 +91,46 @@ final class RequestBuilderTests: XCTestCase {
9391
XCTAssertEqual(connectUrlRequest.urlRequest?.httpMethod, "CONNECT")
9492
}
9593

94+
func testGeneratedMethodProtocolWithStaticParameterOfRequestBuilder() {
95+
let optionsUrlRequest = Request {
96+
Method.options
97+
}
98+
let getUrlRequest = Request {
99+
Method.get
100+
}
101+
let headUrlRequest = Request {
102+
Method.head
103+
}
104+
let postUrlRequest = Request {
105+
Method.post
106+
}
107+
let putUrlRequest = Request {
108+
Method.put
109+
}
110+
let patchUrlRequest = Request {
111+
Method.patch
112+
}
113+
let deleteUrlRequest = Request {
114+
Method.delete
115+
}
116+
let traceUrlRequest = Request {
117+
Method.trace
118+
}
119+
let connectUrlRequest = Request {
120+
Method.connect
121+
}
122+
123+
XCTAssertEqual(optionsUrlRequest.urlRequest?.httpMethod, "OPTIONS")
124+
XCTAssertEqual(getUrlRequest.urlRequest?.httpMethod, "GET")
125+
XCTAssertEqual(headUrlRequest.urlRequest?.httpMethod, "HEAD")
126+
XCTAssertEqual(postUrlRequest.urlRequest?.httpMethod, "POST")
127+
XCTAssertEqual(putUrlRequest.urlRequest?.httpMethod, "PUT")
128+
XCTAssertEqual(patchUrlRequest.urlRequest?.httpMethod, "PATCH")
129+
XCTAssertEqual(deleteUrlRequest.urlRequest?.httpMethod, "DELETE")
130+
XCTAssertEqual(traceUrlRequest.urlRequest?.httpMethod, "TRACE")
131+
XCTAssertEqual(connectUrlRequest.urlRequest?.httpMethod, "CONNECT")
132+
}
133+
96134
func testGeneratedAssembleURLRequestWithRequestBuilder() {
97135
let request = Request {
98136
Body(["KEY": "VALUE"])
@@ -110,9 +148,9 @@ final class RequestBuilderTests: XCTestCase {
110148
urlRequest.httpBody = body
111149
urlRequest.httpMethod = "GET"
112150
urlRequest.allHTTPHeaderFields = header
113-
114-
guard let request = request.urlRequest else { return }
115151

116-
XCTAssertEqual(request, urlRequest)
152+
if let request = request.urlRequest {
153+
XCTAssertEqual(request, urlRequest)
154+
}
117155
}
118156
}

0 commit comments

Comments
 (0)