Skip to content

Commit 5ba426e

Browse files
Merge pull request #45 from dbsystel/swift4
Swift4
2 parents b3f82c0 + 58eabf5 commit 5ba426e

File tree

19 files changed

+191
-75
lines changed

19 files changed

+191
-75
lines changed

.travis.yml

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,36 +17,33 @@ matrix:
1717
script:
1818
- swift test --verbose
1919
- os: osx
20-
osx_image: xcode8.3
20+
osx_image: xcode9
2121
language: objective-c
2222
env: "macOS"
2323
script:
2424
- set -o pipefail && xcodebuild -scheme DBNetworkStack -destination 'platform=OS X' test CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO -enableCodeCoverage NO | xcpretty
2525
- os: osx
26-
osx_image: xcode8.3
26+
osx_image: xcode9
2727
language: objective-c
2828
env: "iOS"
2929
script:
3030
- set -o pipefail && xcodebuild -scheme DBNetworkStack -destination 'platform=iOS Simulator,name=iPhone SE,OS=latest' test CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO -enableCodeCoverage YES | xcpretty
3131
after_success:
3232
- bash <(curl -s https://codecov.io/bash)
3333
- os: osx
34-
osx_image: xcode8.3
34+
osx_image: xcode9
3535
language: objective-c
3636
env: "watchOS"
37-
before_install:
38-
- export SNAPSHOT_FORCE_DELETE=1
39-
- fastlane snapshot reset_simulators
4037
script:
41-
- set -o pipefail && xcodebuild -scheme DBNetworkStack -destination 'platform=watchOS Simulator,name=Apple Watch - 38mm,OS=latest' build CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO | xcpretty
38+
- set -o pipefail && xcodebuild -scheme DBNetworkStack -destination 'platform=watchOS Simulator,name=Apple Watch Series 2 - 38mm' build CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO | xcpretty
4239
- os: osx
43-
osx_image: xcode8.3
40+
osx_image: xcode9
4441
language: objective-c
4542
env: "tvOS"
4643
script:
4744
- set -o pipefail && xcodebuild -scheme DBNetworkStack -destination 'platform=tvOS Simulator,name=Apple TV 1080p,OS=latest' test CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO -enableCodeCoverage NO | xcpretty
4845
- os: osx
49-
osx_image: xcode8.3
46+
osx_image: xcode9
5047
language: objective-c
5148
env: "SPM, Carthage, CocoaPods"
5249
script:

DBNetworkStack.xcodeproj/project.pbxproj

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,16 @@
3838
C6461F081E0167FA00E0B081 /* RetryTaskTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6461F061E0167FA00E0B081 /* RetryTaskTest.swift */; };
3939
C65F087B1D757A3C00239CC1 /* JSONMappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C65F087A1D757A3C00239CC1 /* JSONMappable.swift */; };
4040
C68FF1F51E1A64CB00A2513F /* Ressource+Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = C68FF1F41E1A64CB00A2513F /* Ressource+Map.swift */; };
41-
C69546B01F45770B006ABCE6 /* URLSessionDataTask+NetworkTaskRepresenting.swift in Sources */ = {isa = PBXBuildFile; fileRef = C69546AF1F45770B006ABCE6 /* URLSessionDataTask+NetworkTaskRepresenting.swift */; };
41+
C69188671EE6865E00BAD320 /* Resource+Decodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C69188661EE6865E00BAD320 /* Resource+Decodable.swift */; };
42+
C691886A1EE6897900BAD320 /* DecodableResoureTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C69188681EE688F700BAD320 /* DecodableResoureTest.swift */; };
4243
C699E0771D917501006FE7C6 /* NetworkErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C699E0761D917501006FE7C6 /* NetworkErrorTest.swift */; };
4344
C6A5DED41D760CC900BC38B1 /* JSONResourceTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A5DED31D760CC900BC38B1 /* JSONResourceTest.swift */; };
4445
C6A5DED61D760E5000BC38B1 /* NetworkAccessMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A5DED51D760E5000BC38B1 /* NetworkAccessMock.swift */; };
4546
C6A5DEDA1D76A06000BC38B1 /* TrainModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A5DED91D76A06000BC38B1 /* TrainModel.swift */; };
4647
C6C21A391F21F90A0004A7EB /* NetworkResponseProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6C21A381F21F90A0004A7EB /* NetworkResponseProcessor.swift */; };
4748
C6C395941E04212F00413AD2 /* ModifyRequestNetworkService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6C395931E04212F00413AD2 /* ModifyRequestNetworkService.swift */; };
4849
C6C395961E0422AF00413AD2 /* ModifyRequestNetworkService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6C395951E0422AF00413AD2 /* ModifyRequestNetworkService.swift */; };
50+
C6E429721F70ECFF004121F1 /* URLSessionDataTask+NetworkTaskRepresenting.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6E429711F70ECFF004121F1 /* URLSessionDataTask+NetworkTaskRepresenting.swift */; };
4951
C6F235D51D7DA75000E628D8 /* URLSession+NetworkAccessProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6F235D41D7DA75000E628D8 /* URLSession+NetworkAccessProviding.swift */; };
5052
C6F7E3101E49DCBA00FA625F /* NetworkTaskMockTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6F7E30E1E49DC4900FA625F /* NetworkTaskMockTests.swift */; };
5153
/* End PBXBuildFile section */
@@ -94,6 +96,8 @@
9496
C6461F0A1E016C7700E0B081 /* NetworkServiceMock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkServiceMock.swift; sourceTree = "<group>"; };
9597
C65F087A1D757A3C00239CC1 /* JSONMappable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JSONMappable.swift; sourceTree = "<group>"; };
9698
C68FF1F41E1A64CB00A2513F /* Ressource+Map.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Ressource+Map.swift"; sourceTree = "<group>"; };
99+
C69188661EE6865E00BAD320 /* Resource+Decodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Resource+Decodable.swift"; sourceTree = "<group>"; };
100+
C69188681EE688F700BAD320 /* DecodableResoureTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DecodableResoureTest.swift; sourceTree = "<group>"; };
97101
C69546AF1F45770B006ABCE6 /* URLSessionDataTask+NetworkTaskRepresenting.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "URLSessionDataTask+NetworkTaskRepresenting.swift"; sourceTree = "<group>"; };
98102
C699E0761D917501006FE7C6 /* NetworkErrorTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkErrorTest.swift; sourceTree = "<group>"; };
99103
C6A5DED31D760CC900BC38B1 /* JSONResourceTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = JSONResourceTest.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
@@ -103,6 +107,7 @@
103107
C6C21A3A1F21FD150004A7EB /* DefaultMocks.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultMocks.swift; sourceTree = "<group>"; };
104108
C6C395931E04212F00413AD2 /* ModifyRequestNetworkService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ModifyRequestNetworkService.swift; sourceTree = "<group>"; };
105109
C6C395951E0422AF00413AD2 /* ModifyRequestNetworkService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ModifyRequestNetworkService.swift; sourceTree = "<group>"; };
110+
C6E429711F70ECFF004121F1 /* URLSessionDataTask+NetworkTaskRepresenting.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URLSessionDataTask+NetworkTaskRepresenting.swift"; sourceTree = "<group>"; };
106111
C6F235D41D7DA75000E628D8 /* URLSession+NetworkAccessProviding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "URLSession+NetworkAccessProviding.swift"; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
107112
C6F7E30E1E49DC4900FA625F /* NetworkTaskMockTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkTaskMockTests.swift; sourceTree = "<group>"; };
108113
/* End PBXFileReference section */
@@ -151,6 +156,7 @@
151156
C6E5A4D11E2FBD1100F966DB /* NetworkService */,
152157
C6E5A4D41E2FBD7700F966DB /* NetworkAccess */,
153158
C6E5A4D01E2FBCF000F966DB /* Resource */,
159+
C6E3AABE1EE7D19000EBDE64 /* Deprecated */,
154160
C6E5A4D21E2FBD2B00F966DB /* NetworkRequest */,
155161
C6E5A4D31E2FBD5800F966DB /* NetworkTask */,
156162
C60BE67F1D6B2C46006B0364 /* HTTPMethod.swift */,
@@ -197,16 +203,24 @@
197203
name = Helpers;
198204
sourceTree = "<group>";
199205
};
200-
C6E5A4D01E2FBCF000F966DB /* Resource */ = {
206+
C6E3AABE1EE7D19000EBDE64 /* Deprecated */ = {
201207
isa = PBXGroup;
202208
children = (
209+
C60BE67C1D6B2C46006B0364 /* ResourceModeling.swift */,
203210
C60BE6811D6B2C46006B0364 /* JSONResource.swift */,
204211
C60BE6821D6B2C46006B0364 /* JSONArrayResource.swift */,
205212
C65F087A1D757A3C00239CC1 /* JSONMappable.swift */,
206213
C60BE67E1D6B2C46006B0364 /* JSONResourceModeling.swift */,
207-
C60BE67C1D6B2C46006B0364 /* ResourceModeling.swift */,
214+
);
215+
name = Deprecated;
216+
sourceTree = "<group>";
217+
};
218+
C6E5A4D01E2FBCF000F966DB /* Resource */ = {
219+
isa = PBXGroup;
220+
children = (
208221
C60BE6801D6B2C46006B0364 /* Resource.swift */,
209222
C68FF1F41E1A64CB00A2513F /* Ressource+Map.swift */,
223+
C69188661EE6865E00BAD320 /* Resource+Decodable.swift */,
210224
);
211225
name = Resource;
212226
sourceTree = "<group>";
@@ -235,6 +249,7 @@
235249
C6E5A4D31E2FBD5800F966DB /* NetworkTask */ = {
236250
isa = PBXGroup;
237251
children = (
252+
C6E429711F70ECFF004121F1 /* URLSessionDataTask+NetworkTaskRepresenting.swift */,
238253
7C40B9FD1D9D66A600620563 /* NetworkTaskMock.swift */,
239254
C60BE6AC1D6B3E81006B0364 /* NetworkTaskRepresenting.swift */,
240255
C6461F041E0167C900E0B081 /* RetryNetworkTask.swift */,
@@ -267,6 +282,7 @@
267282
isa = PBXGroup;
268283
children = (
269284
C6A5DED31D760CC900BC38B1 /* JSONResourceTest.swift */,
285+
C69188681EE688F700BAD320 /* DecodableResoureTest.swift */,
270286
C604250F1D78002400FD3B38 /* JSONArrayResourceTest.swift */,
271287
C60425121D7803CA00FD3B38 /* ResourceTest.swift */,
272288
);
@@ -331,16 +347,16 @@
331347
isa = PBXProject;
332348
attributes = {
333349
LastSwiftUpdateCheck = 0730;
334-
LastUpgradeCheck = 0810;
350+
LastUpgradeCheck = 0900;
335351
ORGANIZATIONNAME = DBSystel;
336352
TargetAttributes = {
337353
C60BE65A1D6B2BF3006B0364 = {
338354
CreatedOnToolsVersion = 7.3.1;
339-
LastSwiftMigration = 0800;
355+
LastSwiftMigration = 0900;
340356
};
341357
C60BE6641D6B2BF3006B0364 = {
342358
CreatedOnToolsVersion = 7.3.1;
343-
LastSwiftMigration = 0800;
359+
LastSwiftMigration = 0900;
344360
};
345361
};
346362
};
@@ -405,17 +421,18 @@
405421
C60BE6911D6B2C46006B0364 /* JSONResource.swift in Sources */,
406422
C622A7961E5C7F6500BB3D17 /* URLRequestConvertible.swift in Sources */,
407423
C60BE6901D6B2C46006B0364 /* Resource.swift in Sources */,
408-
C69546B01F45770B006ABCE6 /* URLSessionDataTask+NetworkTaskRepresenting.swift in Sources */,
409424
C60BE6921D6B2C46006B0364 /* JSONArrayResource.swift in Sources */,
410425
C6461F021E01678100E0B081 /* RetryNetworkService.swift in Sources */,
411426
C61E778C1E49D8A900D55BB2 /* NetworkTaskMock.swift in Sources */,
427+
C69188671EE6865E00BAD320 /* Resource+Decodable.swift in Sources */,
412428
7C235E0B1DBF6E8500628DC9 /* NetworkError.swift in Sources */,
413429
C65F087B1D757A3C00239CC1 /* JSONMappable.swift in Sources */,
414430
C6C21A391F21F90A0004A7EB /* NetworkResponseProcessor.swift in Sources */,
415431
C60BE68E1D6B2C46006B0364 /* JSONResourceModeling.swift in Sources */,
416432
C6F235D51D7DA75000E628D8 /* URLSession+NetworkAccessProviding.swift in Sources */,
417433
C60BE68C1D6B2C46006B0364 /* ResourceModeling.swift in Sources */,
418434
C60BE68F1D6B2C46006B0364 /* HTTPMethod.swift in Sources */,
435+
C6E429721F70ECFF004121F1 /* URLSessionDataTask+NetworkTaskRepresenting.swift in Sources */,
419436
C68FF1F51E1A64CB00A2513F /* Ressource+Map.swift in Sources */,
420437
C604250A1D76F79F00FD3B38 /* NetworkService.swift in Sources */,
421438
C6461F051E0167C900E0B081 /* RetryNetworkTask.swift in Sources */,
@@ -440,6 +457,7 @@
440457
7C653BC91E09325500199993 /* NetworkResponseProcessorTest.swift in Sources */,
441458
C6461F081E0167FA00E0B081 /* RetryTaskTest.swift in Sources */,
442459
C60425101D78002400FD3B38 /* JSONArrayResourceTest.swift in Sources */,
460+
C691886A1EE6897900BAD320 /* DecodableResoureTest.swift in Sources */,
443461
C60BE6A31D6B3807006B0364 /* NetworkServiceTest.swift in Sources */,
444462
C6C395961E0422AF00413AD2 /* ModifyRequestNetworkService.swift in Sources */,
445463
C6F7E3101E49DCBA00FA625F /* NetworkTaskMockTests.swift in Sources */,
@@ -470,14 +488,20 @@
470488
CLANG_CXX_LIBRARY = "libc++";
471489
CLANG_ENABLE_MODULES = YES;
472490
CLANG_ENABLE_OBJC_ARC = YES;
491+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
473492
CLANG_WARN_BOOL_CONVERSION = YES;
493+
CLANG_WARN_COMMA = YES;
474494
CLANG_WARN_CONSTANT_CONVERSION = YES;
475495
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
476496
CLANG_WARN_EMPTY_BODY = YES;
477497
CLANG_WARN_ENUM_CONVERSION = YES;
478498
CLANG_WARN_INFINITE_RECURSION = YES;
479499
CLANG_WARN_INT_CONVERSION = YES;
500+
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
501+
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
480502
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
503+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
504+
CLANG_WARN_STRICT_PROTOTYPES = YES;
481505
CLANG_WARN_SUSPICIOUS_MOVE = YES;
482506
CLANG_WARN_UNREACHABLE_CODE = YES;
483507
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
@@ -525,14 +549,20 @@
525549
CLANG_CXX_LIBRARY = "libc++";
526550
CLANG_ENABLE_MODULES = YES;
527551
CLANG_ENABLE_OBJC_ARC = YES;
552+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
528553
CLANG_WARN_BOOL_CONVERSION = YES;
554+
CLANG_WARN_COMMA = YES;
529555
CLANG_WARN_CONSTANT_CONVERSION = YES;
530556
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
531557
CLANG_WARN_EMPTY_BODY = YES;
532558
CLANG_WARN_ENUM_CONVERSION = YES;
533559
CLANG_WARN_INFINITE_RECURSION = YES;
534560
CLANG_WARN_INT_CONVERSION = YES;
561+
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
562+
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
535563
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
564+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
565+
CLANG_WARN_STRICT_PROTOTYPES = YES;
536566
CLANG_WARN_SUSPICIOUS_MOVE = YES;
537567
CLANG_WARN_UNREACHABLE_CODE = YES;
538568
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
@@ -584,6 +614,7 @@
584614
PRODUCT_NAME = "$(TARGET_NAME)";
585615
SKIP_INSTALL = YES;
586616
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
617+
SWIFT_VERSION = 4.0;
587618
};
588619
name = Debug;
589620
};
@@ -605,6 +636,7 @@
605636
PRODUCT_BUNDLE_IDENTIFIER = com.dbsystel.DBNetworkStack;
606637
PRODUCT_NAME = "$(TARGET_NAME)";
607638
SKIP_INSTALL = YES;
639+
SWIFT_VERSION = 4.0;
608640
};
609641
name = Release;
610642
};
@@ -617,6 +649,7 @@
617649
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks @loader_path/../Frameworks";
618650
PRODUCT_BUNDLE_IDENTIFIER = com.dbsystel.DBNetworkStackTests;
619651
PRODUCT_NAME = "$(TARGET_NAME)";
652+
SWIFT_VERSION = 4.0;
620653
};
621654
name = Debug;
622655
};
@@ -629,6 +662,7 @@
629662
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks @loader_path/../Frameworks";
630663
PRODUCT_BUNDLE_IDENTIFIER = com.dbsystel.DBNetworkStackTests;
631664
PRODUCT_NAME = "$(TARGET_NAME)";
665+
SWIFT_VERSION = 4.0;
632666
};
633667
name = Release;
634668
};
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict/>
5+
</plist>

DBNetworkStack.xcodeproj/xcshareddata/xcschemes/DBNetworkStack.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "0810"
3+
LastUpgradeVersion = "0900"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict/>
5+
</plist>

JSONExample.playground/Contents.swift

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,25 +11,17 @@ URLCache.shared = URLCache(memoryCapacity: 0, diskCapacity: 0, diskPath: nil)
1111
let networkAccess = URLSession(configuration: .default)
1212
let networkService = NetworkService(networkAccess: networkAccess)
1313

14-
struct IPOrigin {
15-
let ipAdress: String
16-
}
17-
18-
extension IPOrigin: JSONMappable {
19-
init(object: Dictionary<String, Any>) throws {
20-
guard let ipAdress = object["origin"] as? String else {
21-
throw DBNetworkStackError.serializationError(description: "", data: nil)
22-
}
23-
self.ipAdress = ipAdress
24-
}
14+
struct IPOrigin: Decodable {
15+
let origin: String
2516
}
2617

2718
let url: URL! = URL(string: "https://www.httpbin.org")
2819
let request = URLRequest(path: "ip", baseURL: url)
29-
let resource = JSONResource<IPOrigin>(request: request)
20+
21+
let resource = Resource<IPOrigin>(request: request, decoder: JSONDecoder())
3022

3123
networkService.request(resource, onCompletion: { origin in
3224
print(origin)
33-
}, onError: { error in
34-
print(error)
25+
}, onError: { error in
26+
print(error)
3527
})

README.md

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
| | Main Features |
1212
| --------- | ------------------------------ |
1313
| 🛡 | Typed network resources |
14-
| &#127968; | Protocol oriented architecture |
14+
| &#127968; | Value oriented architecture |
1515
| 🔀 | Exchangeable implementations |
1616
| 🚄 | Extendable API |
1717
| 🎹        | Composable Features           |
@@ -45,46 +45,46 @@ Request your resource and handle the result
4545
networkService.request(resource, onCompletion: { htmlText in
4646
print(htmlText)
4747
}, onError: { error in
48-
//Handle errors
48+
//Handle errors
4949
})
5050

5151
```
5252

53-
## JSON Mapping Demo
53+
## Loade types conforming to `Decodable`
5454
```swift
55-
struct IPOrigin {
56-
let ipAddress: String
57-
}
58-
59-
extension IPOrigin: JSONMappable {
60-
init(object: Dictionary<String, AnyObject>) throws {
61-
/// Do your mapping
62-
}
55+
struct IPOrigin: Decodable {
56+
let origin: String
6357
}
6458

59+
let url: URL! = URL(string: "https://www.httpbin.org")
60+
let request = URLRequest(path: "ip", baseURL: url)
6561

66-
let url = URL(string: "https://httpbin.org")!
67-
let request = URLRequest(path: "/ip", baseURL: url)
68-
let resource = JSONResource<IPOrigin>(request: request)
62+
let resource = Resource<IPOrigin>(request: request, decoder: JSONDecoder())
6963

7064
networkService.request(resource, onCompletion: { origin in
7165
print(origin)
7266
}, onError: { error in
73-
//Handle errors
67+
//Handle errors
7468
})
7569
```
7670

7771
## Accessing HTTPResponse
7872

7973
Request your resource and handle the result & response. This is similar to just requesting a resulting model.
8074
```swift
81-
networkService.request(resource, onCompletionWithResponse: { htmlText, response in
82-
print(htmlText)
83-
print(response)
84-
}, onError: { error in
85-
//Handle errors
86-
})
75+
extension Resource where Model: XMLDocument {
76+
public init(request: URLRequestConvertible) {
77+
self.init(request: request, parse: { try XMLDocument(data: $0 })
78+
}
79+
}
80+
```
81+
82+
## Extendability
83+
The following example outlines how to extend DBNetworkStack to support the imaginary type `XMLDocument`:
8784

85+
You are now able to call:
86+
```swift
87+
let xmlDocument = Resource<XMLDocument>(request: someRequest)
8888
```
8989

9090
## Protocol oriented architecture / Exchangability
@@ -95,7 +95,7 @@ The following table shows all the protocols and their default implementations.
9595
| -------------------------------- | ---------------------- |
9696
| ```NetworkAccessProviding``` | ```URLSession``` |
9797
| ```NetworkServiceProviding``` | ```NetworkService``` |
98-
| ```NetworkRequestRepresenting``` | ```NetworkRequest``` |
98+
| ```URLRequestConvertible``` | ```URLRequest``` |
9999
| ```NetworkTaskRepresenting``` | ```URLSessionTask``` |
100100

101101
## Composable Features
@@ -108,8 +108,8 @@ The following table shows all the protocols and their default implementations.
108108
## Requirements
109109

110110
- iOS 9.0+ / macOS 10.10+ / tvOS 9.0+ / watchOS 2.0+
111-
- Xcode 8.0+
112-
- Swift 3.0
111+
- Xcode 9.0+
112+
- Swift 3.2/Swift4.0
113113

114114
## Installation
115115

0 commit comments

Comments
 (0)