Skip to content

Commit 87d66f9

Browse files
authored
BN-4308 [FEATURE] Add sample playground
1 parent 662df85 commit 87d66f9

File tree

11 files changed

+159
-43
lines changed

11 files changed

+159
-43
lines changed

NetworkModuleSampleApp/NetworkModuleSampleApp.xcodeproj/project.pbxproj

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
2290A8DA2994EAC500067FFC /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = "<group>"; };
5151
2290A8E02995118F00067FFC /* StringExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringExtensions.swift; sourceTree = "<group>"; };
5252
2290A8E5299A62AE00067FFC /* Logging.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logging.swift; sourceTree = "<group>"; };
53+
22BD5043299B97BA009B301C /* NgNetworkModuleShowcase.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; path = NgNetworkModuleShowcase.playground; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
5354
AD06FC25297FE93900A05C0F /* EpisodeHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EpisodeHeaderView.swift; sourceTree = "<group>"; };
5455
AD073EFE297EC3DA007B8C89 /* NetworkModuleSampleApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = NetworkModuleSampleApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
5556
AD073F01297EC3DA007B8C89 /* NetworkModuleSampleAppApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkModuleSampleAppApp.swift; sourceTree = "<group>"; };
@@ -130,10 +131,19 @@
130131
path = Logging;
131132
sourceTree = "<group>";
132133
};
134+
22BD5042299B9795009B301C /* Playground */ = {
135+
isa = PBXGroup;
136+
children = (
137+
22BD5043299B97BA009B301C /* NgNetworkModuleShowcase.playground */,
138+
);
139+
path = Playground;
140+
sourceTree = "<group>";
141+
};
133142
AD073EF5297EC3DA007B8C89 = {
134143
isa = PBXGroup;
135144
children = (
136145
AD073F0F297EC3F9007B8C89 /* Packages */,
146+
22BD5042299B9795009B301C /* Playground */,
137147
AD073F00297EC3DA007B8C89 /* NetworkModuleSampleApp */,
138148
AD073EFF297EC3DA007B8C89 /* Products */,
139149
AD073F11297EC412007B8C89 /* Frameworks */,

NetworkModuleSampleApp/NetworkModuleSampleApp/Assets.xcassets/mock_character_1.imageset/Contents.json

Lines changed: 0 additions & 21 deletions
This file was deleted.
-54.4 KB
Binary file not shown.

NetworkModuleSampleApp/NetworkModuleSampleApp/Assets.xcassets/mock_character_2.imageset/Contents.json

Lines changed: 0 additions & 21 deletions
This file was deleted.
-112 KB
Binary file not shown.
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
//
2+
// Contents.swift
3+
// Netguru iOS Network Module
4+
//
5+
6+
import UIKit
7+
import NgNetworkModuleCore
8+
import ReactiveNgNetworkModule
9+
import ConcurrentNgNetworkModule
10+
import Combine
11+
12+
// Setup:
13+
let baseUrl = URL(string: "https://finalspaceapi.com/api/v0")!
14+
let requestBuilder = DefaultRequestBuilder(baseURL: baseUrl)
15+
let action = LogNetworkModuleAction()
16+
let networkModule = DefaultNetworkModule(
17+
requestBuilder: requestBuilder,
18+
actions: [action]
19+
)
20+
let request = FetchCharactersRequest()
21+
22+
// Using classical network module:
23+
networkModule.performAndDecode(request: request, responseType: [FetchCharactersResponse].self) { result in
24+
switch result {
25+
case let .success(response):
26+
print("+++")
27+
print("+++ [Classical] Request suceeded, response: \(response.map { $0.name })")
28+
print("+++")
29+
case let .failure(error):
30+
print("!!!")
31+
print("!!! [Classical] Request failed: \(error)")
32+
print("!!!")
33+
}
34+
}
35+
36+
// Using reactive network module:
37+
var cancellables: Set<AnyCancellable> = []
38+
networkModule
39+
.performAndDecode(request: request, responseType: [FetchCharactersResponse].self)
40+
.sink { completion in
41+
switch completion {
42+
case let .failure(error):
43+
print("!!!")
44+
print("!!! [Reactive] Request failed: \(error)")
45+
print("!!!")
46+
case .finished:
47+
print("--- subscription finished")
48+
}
49+
} receiveValue: { response in
50+
print("+++")
51+
print("+++ [Reactive] Request suceeded, response: \(response.map { $0.name })")
52+
print("+++")
53+
}
54+
.store(in: &cancellables)
55+
56+
// Using async / await newtork module:
57+
Task {
58+
do {
59+
let response = try await networkModule.performAndDecode(
60+
request: request,
61+
responseType: [FetchCharactersResponse].self
62+
)
63+
print("+++")
64+
print("+++ [Async/Await] Request suceeded, response: \(response.map { $0.name })")
65+
print("+++")
66+
} catch {
67+
print("!!!")
68+
print("!!! [Async/Await] Request failed: \(error)")
69+
print("!!!")
70+
}
71+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
//
2+
// FetchCharactersRequest.swift
3+
// Netguru iOS Network Module
4+
//
5+
6+
import Foundation
7+
import NgNetworkModuleCore
8+
9+
public struct FetchCharactersRequest: NetworkRequest {
10+
public let path = "/character"
11+
public let method = NetworkRequestType.get
12+
13+
public init() {}
14+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
//
2+
// FetchCharactersResponse.swift
3+
// Netguru iOS Network Module
4+
//
5+
6+
import Foundation
7+
8+
public struct FetchCharactersResponse: Decodable {
9+
public let id: Int
10+
public let name: String
11+
public let species: String?
12+
public let alias: [String]
13+
public let origin: String
14+
public let abilities: [String]
15+
public let imageUrl: String
16+
17+
enum CodingKeys: String, CodingKey {
18+
case id
19+
case name
20+
case species
21+
case alias
22+
case origin
23+
case abilities
24+
case imageUrl = "img_url"
25+
}
26+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//
2+
// LogNetworkModuleAction.swift
3+
// Netguru iOS Network Module
4+
//
5+
6+
import Foundation
7+
import NgNetworkModuleCore
8+
9+
public class LogNetworkModuleAction: NetworkModuleAction {
10+
11+
public init() {}
12+
13+
public func performBeforeExecutingNetworkRequest(request: NetworkRequest?, urlRequest: inout URLRequest) {
14+
print("--- Executing request: \(urlRequest)")
15+
}
16+
17+
public func performAfterExecutingNetworkRequest(request: NetworkRequest?, networkResponse: NetworkResponse) {
18+
print("*** Received response code: \(networkResponse.networkResponse.statusCode)")
19+
}
20+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2+
<playground version='5.0' target-platform='ios' buildActiveScheme='true' importAppTypes='true'>
3+
<timeline fileName='timeline.xctimeline'/>
4+
</playground>

0 commit comments

Comments
 (0)