Skip to content

Commit 2f5434d

Browse files
authored
Supported to the URL Scheme as static parameter and function (#18)
* Supported to the `HttpRequest` method as static parameter (#16) * Wip * Update README.md * Increased test coverage
1 parent f195f10 commit 2f5434d

File tree

7 files changed

+158
-118
lines changed

7 files changed

+158
-118
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ DerivedData/
77
.swiftpm/config/registries.json
88
.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
99
.netrc
10+
*.xcuserstate

.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata

Lines changed: 0 additions & 7 deletions
This file was deleted.
Binary file not shown.

.swiftpm/xcode/xcuserdata/ijaewon.xcuserdatad/xcschemes/xcschememanagement.plist

Lines changed: 0 additions & 42 deletions
This file was deleted.

README.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,31 @@ Router {
167167
}
168168
// https://www.overrideurl.com/comments?postId=1
169169
```
170+
171+
#### URL Scheme declaration
172+
- Using `Scheme(_ scheme:)` to `Scheme` declaration.
173+
```swift
174+
Request {
175+
...
176+
URL {
177+
Scheme(.https)
178+
...
179+
}
180+
...
181+
}
182+
```
183+
- Using `static let scheme:` to `Scheme` declaration.
184+
```swift
185+
Request {
186+
...
187+
URL {
188+
Scheme.https
189+
...
190+
}
191+
...
192+
}
193+
```
194+
170195
---
171196
### How to configure and use ***APIRouter*** in a real project?
172197
- Just create APIRouter.swift in your project! Happy hacking! 😁

Sources/APIRouter/URLBuilder.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,18 @@ public extension URL {
6868

6969
public struct Scheme: HttpUrlProtocol {
7070
private let scheme: URLScheme
71+
72+
static let http = Self(.http)
73+
74+
static let https = Self(.https)
75+
76+
static let mqtt = Self(.mqtt)
77+
78+
static let mqtts = Self(.mqtts)
79+
80+
static func custom(_ value: String) -> Self {
81+
Self(.custom(value))
82+
}
7183

7284
public init(_ scheme: URLScheme) {
7385
self.scheme = scheme

Tests/APIRouterTests/URLBuilderTests.swift

Lines changed: 120 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,58 @@ final class URLBuilderTests: XCTestCase {
2929
Scheme(.custom("custom"))
3030
}
3131
}
32-
33-
guard let httpUrlString = httpUrlRequest.urlRequest?.url?.absoluteString else { return }
34-
guard let httpsUrlString = httpsUrlRequest.urlRequest?.url?.absoluteString else { return }
35-
guard let mqttUrlString = mqttUrlRequest.urlRequest?.url?.absoluteString else { return }
36-
guard let mqttsUrlString = mqttsUrlRequest.urlRequest?.url?.absoluteString else { return }
37-
guard let customUrlString = customUrlRequest.urlRequest?.url?.absoluteString else { return }
38-
39-
XCTAssertEqual(httpUrlString, "http:")
40-
XCTAssertEqual(httpsUrlString, "https:")
41-
XCTAssertEqual(mqttUrlString, "mqtt:")
42-
XCTAssertEqual(mqttsUrlString, "mqtts:")
43-
XCTAssertEqual(customUrlString, "custom:")
32+
33+
if let httpUrlString = httpUrlRequest.urlRequest?.url?.absoluteString,
34+
let httpsUrlString = httpsUrlRequest.urlRequest?.url?.absoluteString,
35+
let mqttUrlString = mqttUrlRequest.urlRequest?.url?.absoluteString,
36+
let mqttsUrlString = mqttsUrlRequest.urlRequest?.url?.absoluteString,
37+
let customUrlString = customUrlRequest.urlRequest?.url?.absoluteString {
38+
XCTAssertEqual(httpUrlString, "http:")
39+
XCTAssertEqual(httpsUrlString, "https:")
40+
XCTAssertEqual(mqttUrlString, "mqtt:")
41+
XCTAssertEqual(mqttsUrlString, "mqtts:")
42+
XCTAssertEqual(customUrlString, "custom:")
43+
}
44+
}
45+
46+
func testGeneratedUrlSchemeWithStaticParameterAndFunctionOfUrlBuilder() {
47+
let httpUrlRequest = Request {
48+
URL {
49+
Scheme.http
50+
}
51+
}
52+
let httpsUrlRequest = Request {
53+
URL {
54+
Scheme.https
55+
}
56+
}
57+
let mqttUrlRequest = Request {
58+
URL {
59+
Scheme.mqtt
60+
}
61+
}
62+
let mqttsUrlRequest = Request {
63+
URL {
64+
Scheme.mqtts
65+
}
66+
}
67+
let customUrlRequest = Request {
68+
URL {
69+
Scheme.custom("custom")
70+
}
71+
}
72+
73+
if let httpUrlString = httpUrlRequest.urlRequest?.url?.absoluteString,
74+
let httpsUrlString = httpsUrlRequest.urlRequest?.url?.absoluteString,
75+
let mqttUrlString = mqttUrlRequest.urlRequest?.url?.absoluteString,
76+
let mqttsUrlString = mqttsUrlRequest.urlRequest?.url?.absoluteString,
77+
let customUrlString = customUrlRequest.urlRequest?.url?.absoluteString {
78+
XCTAssertEqual(httpUrlString, "http:")
79+
XCTAssertEqual(httpsUrlString, "https:")
80+
XCTAssertEqual(mqttUrlString, "mqtt:")
81+
XCTAssertEqual(mqttsUrlString, "mqtts:")
82+
XCTAssertEqual(customUrlString, "custom:")
83+
}
4484
}
4585

4686
func testGeneratedUrlHostWithURLBuilder() {
@@ -49,10 +89,10 @@ final class URLBuilderTests: XCTestCase {
4989
Host("host.com")
5090
}
5191
}
52-
53-
guard let urlString = request.urlRequest?.url?.absoluteString else { return }
54-
55-
XCTAssertEqual(urlString, "//host.com")
92+
93+
if let urlString = request.urlRequest?.url?.absoluteString {
94+
XCTAssertEqual(urlString, "//host.com")
95+
}
5696
}
5797

5898
func testGeneratedUrlPathWithURLBuilder() {
@@ -61,10 +101,10 @@ final class URLBuilderTests: XCTestCase {
61101
Path("test/path")
62102
}
63103
}
64-
65-
guard let pathString = request.urlRequest?.url?.absoluteString else { return }
66-
67-
XCTAssertEqual(pathString, "/test/path")
104+
105+
if let pathString = request.urlRequest?.url?.absoluteString {
106+
XCTAssertEqual(pathString, "/test/path")
107+
}
68108
}
69109

70110
func testGeneratedUrlQueryWithURLBuilder() {
@@ -73,10 +113,10 @@ final class URLBuilderTests: XCTestCase {
73113
Query("test", value: "query")
74114
}
75115
}
76-
77-
guard let queryString = request.urlRequest?.url?.absoluteString else { return }
78-
79-
XCTAssertEqual(queryString, "?test=query")
116+
117+
if let queryString = request.urlRequest?.url?.absoluteString {
118+
XCTAssertEqual(queryString, "?test=query")
119+
}
80120
}
81121

82122
func testGeneratedMultyUrlQueryWithURLBuilder() {
@@ -90,13 +130,13 @@ final class URLBuilderTests: XCTestCase {
90130
)
91131
}
92132
}
93-
94-
guard let queryString = request.urlRequest?.url?.absoluteString else { return }
95-
96-
XCTAssertEqual(queryString.first, "?")
97-
XCTAssertEqual(queryString.contains("first=firstQuery"), true)
98-
XCTAssertEqual(queryString.contains("second=secondQuery"), true)
99-
XCTAssertEqual(queryString.split(separator: "&").count, 2)
133+
134+
if let queryString = request.urlRequest?.url?.absoluteString {
135+
XCTAssertEqual(queryString.first, "?")
136+
XCTAssertEqual(queryString.contains("first=firstQuery"), true)
137+
XCTAssertEqual(queryString.contains("second=secondQuery"), true)
138+
XCTAssertEqual(queryString.split(separator: "&").count, 2)
139+
}
100140
}
101141

102142
func testGeneratedURLWithURLBuilder() {
@@ -108,64 +148,75 @@ final class URLBuilderTests: XCTestCase {
108148
Query("test", value: "query")
109149
}
110150
}
111-
112-
guard let url = request.urlRequest?.url?.absoluteString else { return }
113151

114-
XCTAssertEqual(url, "https://www.urltest.com/test/path?test=query")
152+
if let url = request.urlRequest?.url?.absoluteString {
153+
XCTAssertEqual(url, "https://www.urltest.com/test/path?test=query")
154+
}
115155
}
116156

117157
func testSwitchConditionalStatementWorkingForBuildEitherInUrlBuilder() {
118158
enum SchemeOptions {
119159
case https
120160
case http
121-
}
122-
123-
let options: SchemeOptions = .http
124-
125-
let request = Request {
126-
URL {
127-
switch options {
128-
case .https:
129-
Scheme(.https)
130-
case .http:
131-
Scheme(.http)
132-
}
133-
Host("www.urltest.com")
161+
162+
var request: Request {
163+
Request {
164+
URL {
165+
switch self {
166+
case .https:
167+
Scheme(.https)
168+
case .http:
169+
Scheme(.http)
170+
}
171+
Host("www.urltest.com")
172+
}
173+
}
134174
}
135175
}
136176

137-
guard let url = request.urlRequest?.url?.absoluteString else { return }
138-
139-
XCTAssertEqual(url, "http://www.urltest.com")
177+
if let httpUrl = SchemeOptions.http.request.urlRequest?.url?.absoluteString {
178+
XCTAssertEqual(httpUrl, "http://www.urltest.com")
179+
}
180+
if let httpsUrl = SchemeOptions.https.request.urlRequest?.url?.absoluteString {
181+
XCTAssertEqual(httpsUrl, "https://www.urltest.com")
182+
}
140183
}
141184

142185
func testIfConditionalStatementWorkingForBuildEitherInUrlBuilder() {
143-
let conditional = true
144-
145-
let request = Request {
146-
URL {
147-
if conditional == true {
148-
Scheme(.http)
149-
} else {
150-
Scheme(.https)
151-
}
152-
Host("www.urltest.com")
186+
enum SchemeOptions {
187+
case https
188+
case http
189+
190+
var request: Request {
191+
Request {
192+
URL {
193+
if self == .http {
194+
Scheme(.http)
195+
} else {
196+
Scheme(.https)
197+
}
198+
Host("www.urltest.com")
199+
}
200+
}
153201
}
154202
}
155203

156-
guard let url = request.urlRequest?.url?.absoluteString else { return }
157-
158-
XCTAssertEqual(url, "http://www.urltest.com")
204+
if let httpUrl = SchemeOptions.http.request.urlRequest?.url?.absoluteString {
205+
XCTAssertEqual(httpUrl, "http://www.urltest.com")
206+
}
207+
if let httpsUrl = SchemeOptions.https.request.urlRequest?.url?.absoluteString {
208+
XCTAssertEqual(httpsUrl, "https://www.urltest.com")
209+
}
159210
}
160211

161212
/// #1: https://github.com/devyhan/APIRouter/issues/1
162213
#warning("#1 change after issue resolution.")
163214
func testForLoopStatementWorkingForBuildEitherInUrlBuilder() {
164215
let queries = [
165216
"query1": "value1"//,
166-
// "query2": "value2",
167-
// "query3": "value3",
168-
// "query4": "value4",
217+
// "query2": "value2",
218+
// "query3": "value3",
219+
// "query4": "value4",
169220
]
170221

171222
let request = Request {
@@ -179,8 +230,8 @@ final class URLBuilderTests: XCTestCase {
179230
}
180231
}
181232

182-
guard let url = request.urlRequest?.url?.absoluteString else { return }
183-
184-
XCTAssertEqual(url, "https://www.urltest.com?query1=value1")
233+
if let url = request.urlRequest?.url?.absoluteString {
234+
XCTAssertEqual(url, "https://www.urltest.com?query1=value1")
235+
}
185236
}
186237
}

0 commit comments

Comments
 (0)