diff --git a/.travis.yml b/.travis.yml index e5d9aca..6c4c121 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ language: objective-c -osx_image: xcode9.2 +osx_image: xcode10 branches: only: - master @@ -27,17 +27,16 @@ env: - TVOS_FRAMEWORK_SCHEME="Restofire-tvOS" - WATCHOS_FRAMEWORK_SCHEME="Restofire-watchOS" matrix: - - DESTINATION="OS=11.2,name=iPhone X" SCHEME="$IOS_FRAMEWORK_SCHEME" RUN_TESTS="YES" PLATFORM="iOS" - - DESTINATION="OS=10.3.1,name=iPhone 7 Plus" SCHEME="$IOS_FRAMEWORK_SCHEME" RUN_TESTS="YES" PLATFORM="iOS" - - DESTINATION="OS=9.0,name=iPhone 6" SCHEME="$IOS_FRAMEWORK_SCHEME" RUN_TESTS="YES" PLATFORM="iOS" - - DESTINATION="OS=8.1,name=iPhone 5s" SCHEME="$IOS_FRAMEWORK_SCHEME" RUN_TESTS="YES" PLATFORM="iOS" - - DESTINATION="arch=x86_64" SCHEME="$OSX_FRAMEWORK_SCHEME" RUN_TESTS="YES" PLATFORM="macOS" - - DESTINATION="OS=11.0,name=Apple TV 1080p" SCHEME="$TVOS_FRAMEWORK_SCHEME" RUN_TESTS="YES" PLATFORM="tvOS" - - DESTINATION="OS=10.2,name=Apple TV 1080p" SCHEME="$TVOS_FRAMEWORK_SCHEME" RUN_TESTS="YES" PLATFORM="tvOS" - - DESTINATION="OS=9.0,name=Apple TV 1080p" SCHEME="$TVOS_FRAMEWORK_SCHEME" RUN_TESTS="YES" PLATFORM="tvOS" - - DESTINATION="OS=4.0,name=Apple Watch Series 2 - 42mm" SCHEME="$WATCHOS_FRAMEWORK_SCHEME" RUN_TESTS="NO" PLATFORM="watchOS" - - DESTINATION="OS=3.1,name=Apple Watch Series 2 - 42mm" SCHEME="$WATCHOS_FRAMEWORK_SCHEME" RUN_TESTS="NO" PLATFORM="watchOS" - - DESTINATION="OS=2.0,name=Apple Watch - 38mm" SCHEME="$WATCHOS_FRAMEWORK_SCHEME" RUN_TESTS="NO" PLATFORM="watchOS" + - DESTINATION="OS=12.0,name=iPhone XS" SCHEME="$IOS_FRAMEWORK_SCHEME" RUN_TESTS="YES" + - DESTINATION="OS=11.4,name=iPhone X" SCHEME="$IOS_FRAMEWORK_SCHEME" RUN_TESTS="YES" + - DESTINATION="OS=10.3.1,name=iPhone 7 Plus" SCHEME="$IOS_FRAMEWORK_SCHEME" RUN_TESTS="YES" + - DESTINATION="arch=x86_64" SCHEME="$OSX_FRAMEWORK_SCHEME" RUN_TESTS="YES" + - DESTINATION="OS=12.0,name=Apple TV 4K (at 1080p)" SCHEME="$TVOS_FRAMEWORK_SCHEME" RUN_TESTS="YES" + - DESTINATION="OS=11.4,name=Apple TV 4K (at 1080p)" SCHEME="$TVOS_FRAMEWORK_SCHEME" RUN_TESTS="YES" + - DESTINATION="OS=10.2,name=Apple TV 1080p" SCHEME="$TVOS_FRAMEWORK_SCHEME" RUN_TESTS="YES" + - DESTINATION="OS=5.0,name=Apple Watch Series 4 - 44mm" SCHEME="$WATCHOS_FRAMEWORK_SCHEME" RUN_TESTS="NO" + - DESTINATION="OS=4.2,name=Apple Watch Series 3 - 42mm" SCHEME="$WATCHOS_FRAMEWORK_SCHEME" RUN_TESTS="NO" + - DESTINATION="OS=3.1,name=Apple Watch Series 2 - 42mm" SCHEME="$WATCHOS_FRAMEWORK_SCHEME" RUN_TESTS="NO" before_script: - sh scripts/bootstrap diff --git a/Cartfile.resolved b/Cartfile.resolved index b65f701..8b75872 100644 --- a/Cartfile.resolved +++ b/Cartfile.resolved @@ -1,3 +1,3 @@ -github "Alamofire/Alamofire" "d927d24f38f5b4bf3ae10fa8db4df2c5a2ef4ff2" -github "Quick/Nimble" "v7.1.3" +github "Alamofire/Alamofire" "a8a2827f5c14c9168a0373e948e963d36edfdbc5" +github "Quick/Nimble" "v7.3.0" github "Quick/Quick" "v1.3.1" diff --git a/Carthage/Checkouts/Alamofire b/Carthage/Checkouts/Alamofire index d927d24..a8a2827 160000 --- a/Carthage/Checkouts/Alamofire +++ b/Carthage/Checkouts/Alamofire @@ -1 +1 @@ -Subproject commit d927d24f38f5b4bf3ae10fa8db4df2c5a2ef4ff2 +Subproject commit a8a2827f5c14c9168a0373e948e963d36edfdbc5 diff --git a/Carthage/Checkouts/Nimble b/Carthage/Checkouts/Nimble index 9c1379f..7c61d8e 160000 --- a/Carthage/Checkouts/Nimble +++ b/Carthage/Checkouts/Nimble @@ -1 +1 @@ -Subproject commit 9c1379fdcd58c4f2278aea5e029394ba9a2b8f07 +Subproject commit 7c61d8e7e830dd37f7161ce2b894be178532163c diff --git a/Example/Example.xcodeproj/xcshareddata/xcschemes/Example.xcscheme b/Example/Example.xcodeproj/xcshareddata/xcschemes/Example.xcscheme index ac7cdac..96d949c 100644 --- a/Example/Example.xcodeproj/xcshareddata/xcschemes/Example.xcscheme +++ b/Example/Example.xcodeproj/xcshareddata/xcschemes/Example.xcscheme @@ -1,6 +1,6 @@ @@ -46,7 +45,6 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - language = "" launchStyle = "0" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" diff --git a/Example/Sources/RestofireResponseSerializers.swift b/Example/Sources/RestofireResponseSerializers.swift index ca31722..94a3439 100644 --- a/Example/Sources/RestofireResponseSerializers.swift +++ b/Example/Sources/RestofireResponseSerializers.swift @@ -12,11 +12,11 @@ import Alamofire // MARK:- Decodable Response Serializer extension Restofire.ResponseSerializable where Response: Decodable { - public var responseSerializer: AnyResponseSerializer { - return AnyResponseSerializer.init( - dataSerializer: { (request, response, data, error) -> Response in - return try! JSONDecodableResponseSerializer() - .serialize(request: request, response: response, data: data, error: error) + public var responseSerializer: AnyResponseSerializer> { + return AnyResponseSerializer>.init( + dataSerializer: { (request, response, data, error) -> Result in + return Result { try JSONDecodableResponseSerializer() + .serialize(request: request, response: response, data: data, error: error) } } ) } diff --git a/Restofire.xcodeproj/project.pbxproj b/Restofire.xcodeproj/project.pbxproj index a195cd2..2018e33 100644 --- a/Restofire.xcodeproj/project.pbxproj +++ b/Restofire.xcodeproj/project.pbxproj @@ -211,26 +211,6 @@ D93BFF4A21150FFD009FE9DC /* MultipartUploadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3594EB962021F113006FFA6A /* MultipartUploadable.swift */; }; D93BFF4B21150FFD009FE9DC /* MultipartUploadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3594EB962021F113006FFA6A /* MultipartUploadable.swift */; }; D93BFF4C21150FFE009FE9DC /* MultipartUploadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3594EB962021F113006FFA6A /* MultipartUploadable.swift */; }; - D9472EC4211A216800FFECA9 /* AnyDownloadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9472EC3211A216800FFECA9 /* AnyDownloadable.swift */; }; - D9472EC5211A216800FFECA9 /* AnyDownloadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9472EC3211A216800FFECA9 /* AnyDownloadable.swift */; }; - D9472EC6211A216800FFECA9 /* AnyDownloadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9472EC3211A216800FFECA9 /* AnyDownloadable.swift */; }; - D9472EC7211A216800FFECA9 /* AnyDownloadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9472EC3211A216800FFECA9 /* AnyDownloadable.swift */; }; - D9472EC9211A217B00FFECA9 /* AnyFileUploadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9472EC8211A217B00FFECA9 /* AnyFileUploadable.swift */; }; - D9472ECA211A217B00FFECA9 /* AnyFileUploadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9472EC8211A217B00FFECA9 /* AnyFileUploadable.swift */; }; - D9472ECB211A217B00FFECA9 /* AnyFileUploadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9472EC8211A217B00FFECA9 /* AnyFileUploadable.swift */; }; - D9472ECC211A217B00FFECA9 /* AnyFileUploadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9472EC8211A217B00FFECA9 /* AnyFileUploadable.swift */; }; - D9472ECE211A217F00FFECA9 /* AnyStreamUploadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9472ECD211A217F00FFECA9 /* AnyStreamUploadable.swift */; }; - D9472ECF211A217F00FFECA9 /* AnyStreamUploadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9472ECD211A217F00FFECA9 /* AnyStreamUploadable.swift */; }; - D9472ED0211A217F00FFECA9 /* AnyStreamUploadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9472ECD211A217F00FFECA9 /* AnyStreamUploadable.swift */; }; - D9472ED1211A217F00FFECA9 /* AnyStreamUploadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9472ECD211A217F00FFECA9 /* AnyStreamUploadable.swift */; }; - D9472ED3211A219400FFECA9 /* AnyDataUploadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9472ED2211A219400FFECA9 /* AnyDataUploadable.swift */; }; - D9472ED4211A219400FFECA9 /* AnyDataUploadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9472ED2211A219400FFECA9 /* AnyDataUploadable.swift */; }; - D9472ED5211A219400FFECA9 /* AnyDataUploadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9472ED2211A219400FFECA9 /* AnyDataUploadable.swift */; }; - D9472ED6211A219400FFECA9 /* AnyDataUploadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9472ED2211A219400FFECA9 /* AnyDataUploadable.swift */; }; - D9472ED8211A21A000FFECA9 /* AnyMultipartUploadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9472ED7211A21A000FFECA9 /* AnyMultipartUploadable.swift */; }; - D9472ED9211A21A000FFECA9 /* AnyMultipartUploadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9472ED7211A21A000FFECA9 /* AnyMultipartUploadable.swift */; }; - D9472EDA211A21A000FFECA9 /* AnyMultipartUploadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9472ED7211A21A000FFECA9 /* AnyMultipartUploadable.swift */; }; - D9472EDB211A21A000FFECA9 /* AnyMultipartUploadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9472ED7211A21A000FFECA9 /* AnyMultipartUploadable.swift */; }; D971025021158BFD00580974 /* ARequestableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 350428CE201C668C00765D15 /* ARequestableSpec.swift */; }; D971025121158BFD00580974 /* ADownloadableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 350428CA201C668100765D15 /* ADownloadableSpec.swift */; }; D971025221158BFD00580974 /* AFileUploadableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35042920201CA26800765D15 /* AFileUploadableSpec.swift */; }; @@ -246,16 +226,16 @@ D971025E21158BFE00580974 /* AFileUploadableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35042920201CA26800765D15 /* AFileUploadableSpec.swift */; }; D971025F21158BFE00580974 /* ADataUploadableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35042924201CA27200765D15 /* ADataUploadableSpec.swift */; }; D971026021158BFE00580974 /* AStreamUploadableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3504292C201CA2A000765D15 /* AStreamUploadableSpec.swift */; }; - D9C90473211A13FE00AC34B5 /* AnyRequestable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9C90472211A13FE00AC34B5 /* AnyRequestable.swift */; }; - D9C90474211A13FE00AC34B5 /* AnyRequestable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9C90472211A13FE00AC34B5 /* AnyRequestable.swift */; }; - D9C90475211A13FE00AC34B5 /* AnyRequestable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9C90472211A13FE00AC34B5 /* AnyRequestable.swift */; }; - D9C90476211A13FE00AC34B5 /* AnyRequestable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9C90472211A13FE00AC34B5 /* AnyRequestable.swift */; }; - D9F36AD121215AE0009AEFE5 /* AMultipartUploadableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35042928201CA29200765D15 /* AMultipartUploadableSpec.swift */; }; - D9F36AD221215AE0009AEFE5 /* AMultipartUploadableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35042928201CA29200765D15 /* AMultipartUploadableSpec.swift */; }; - D9F36AD321215AE1009AEFE5 /* AMultipartUploadableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35042928201CA29200765D15 /* AMultipartUploadableSpec.swift */; }; - D9F36AD421215C20009AEFE5 /* MultipartUploadableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3594EB6B2021AF35006FFA6A /* MultipartUploadableSpec.swift */; }; - D9F36AD521215C21009AEFE5 /* MultipartUploadableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3594EB6B2021AF35006FFA6A /* MultipartUploadableSpec.swift */; }; - D9F36AD621215C22009AEFE5 /* MultipartUploadableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3594EB6B2021AF35006FFA6A /* MultipartUploadableSpec.swift */; }; + D9A44006214C4AEA0020AF0C /* AMultipartUploadableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35042928201CA29200765D15 /* AMultipartUploadableSpec.swift */; }; + D9A44007214C4AEB0020AF0C /* AMultipartUploadableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35042928201CA29200765D15 /* AMultipartUploadableSpec.swift */; }; + D9A44008214C4AEB0020AF0C /* AMultipartUploadableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35042928201CA29200765D15 /* AMultipartUploadableSpec.swift */; }; + D9A4400A214C4BFA0020AF0C /* MultipartUploadableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3594EB6B2021AF35006FFA6A /* MultipartUploadableSpec.swift */; }; + D9A4400B214C4BFB0020AF0C /* MultipartUploadableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3594EB6B2021AF35006FFA6A /* MultipartUploadableSpec.swift */; }; + D9A4400C214C4BFB0020AF0C /* MultipartUploadableSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3594EB6B2021AF35006FFA6A /* MultipartUploadableSpec.swift */; }; + D9A72DDD212C6B2E00BDE067 /* QueuePriortizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9A72DDC212C6B2E00BDE067 /* QueuePriortizable.swift */; }; + D9A72DDE212C6B2E00BDE067 /* QueuePriortizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9A72DDC212C6B2E00BDE067 /* QueuePriortizable.swift */; }; + D9A72DDF212C6B2E00BDE067 /* QueuePriortizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9A72DDC212C6B2E00BDE067 /* QueuePriortizable.swift */; }; + D9A72DE0212C6B2E00BDE067 /* QueuePriortizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9A72DDC212C6B2E00BDE067 /* QueuePriortizable.swift */; }; D9FD5BA5211579C60087A1BA /* _AUploadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9FD5B99211579C60087A1BA /* _AUploadable.swift */; }; D9FD5BA6211579C60087A1BA /* _AUploadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9FD5B99211579C60087A1BA /* _AUploadable.swift */; }; D9FD5BA7211579C60087A1BA /* _AUploadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9FD5B99211579C60087A1BA /* _AUploadable.swift */; }; @@ -509,12 +489,7 @@ 35E6D3661CCBE061007ABC05 /* Retryable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Retryable.swift; sourceTree = ""; }; 35E6D36B1CCBEB90007ABC05 /* Retry.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Retry.swift; sourceTree = ""; }; 35F4A5F21CC61E52004840E1 /* RestofireRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RestofireRequest.swift; sourceTree = ""; }; - D9472EC3211A216800FFECA9 /* AnyDownloadable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnyDownloadable.swift; sourceTree = ""; }; - D9472EC8211A217B00FFECA9 /* AnyFileUploadable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnyFileUploadable.swift; sourceTree = ""; }; - D9472ECD211A217F00FFECA9 /* AnyStreamUploadable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnyStreamUploadable.swift; sourceTree = ""; }; - D9472ED2211A219400FFECA9 /* AnyDataUploadable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnyDataUploadable.swift; sourceTree = ""; }; - D9472ED7211A21A000FFECA9 /* AnyMultipartUploadable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnyMultipartUploadable.swift; sourceTree = ""; }; - D9C90472211A13FE00AC34B5 /* AnyRequestable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnyRequestable.swift; sourceTree = ""; }; + D9A72DDC212C6B2E00BDE067 /* QueuePriortizable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QueuePriortizable.swift; sourceTree = ""; }; D9FD5B99211579C60087A1BA /* _AUploadable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = _AUploadable.swift; sourceTree = ""; }; D9FD5B9A211579C60087A1BA /* ARequestable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ARequestable.swift; sourceTree = ""; }; D9FD5B9B211579C60087A1BA /* AFileUploadable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AFileUploadable.swift; sourceTree = ""; }; @@ -645,6 +620,7 @@ 35E6D3521CCBD50E007ABC05 /* Validatable.swift */, 358E8ED32020B776003048B3 /* Reachable.swift */, 351537362028441300165E83 /* RequestDelegate.swift */, + D9A72DDC212C6B2E00BDE067 /* QueuePriortizable.swift */, ); path = Protocols; sourceTree = ""; @@ -705,7 +681,6 @@ 3525FB111CCCC9A3009CEC35 /* Core */ = { isa = PBXGroup; children = ( - D9C9047B211A212700AC34B5 /* AnyRequestable */, 350428A5201C5BCE00765D15 /* Configuration */, 357E33F8201DDA6C0093DCC5 /* BaseRequestable */, D9FD5B98211579C60087A1BA /* AlamofireRequestable */, @@ -848,19 +823,6 @@ path = Configuration; sourceTree = ""; }; - D9C9047B211A212700AC34B5 /* AnyRequestable */ = { - isa = PBXGroup; - children = ( - D9C90472211A13FE00AC34B5 /* AnyRequestable.swift */, - D9472EC3211A216800FFECA9 /* AnyDownloadable.swift */, - D9472EC8211A217B00FFECA9 /* AnyFileUploadable.swift */, - D9472ECD211A217F00FFECA9 /* AnyStreamUploadable.swift */, - D9472ED2211A219400FFECA9 /* AnyDataUploadable.swift */, - D9472ED7211A21A000FFECA9 /* AnyMultipartUploadable.swift */, - ); - path = AnyRequestable; - sourceTree = ""; - }; D9FD5B98211579C60087A1BA /* AlamofireRequestable */ = { isa = PBXGroup; children = ( @@ -1054,7 +1016,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0800; - LastUpgradeCheck = 0920; + LastUpgradeCheck = 0940; ORGANIZATIONNAME = AarKay; TargetAttributes = { 350061F11C7C33910078B589 = { @@ -1246,21 +1208,18 @@ 35E6D3541CCBD50E007ABC05 /* Validatable.swift in Sources */, 35E6D35E1CCBD731007ABC05 /* Validation.swift in Sources */, D9FD5BA7211579C60087A1BA /* _AUploadable.swift in Sources */, - D9472EDA211A21A000FFECA9 /* AnyMultipartUploadable.swift in Sources */, 358E8EC72020A27B003048B3 /* NetworkReachability.swift in Sources */, 358E8ED62020B776003048B3 /* Reachable.swift in Sources */, D93BFF3F21150F97009FE9DC /* FileUploadable.swift in Sources */, 35460394202B882B00D57627 /* Configurable.swift in Sources */, - D9472ECB211A217B00FFECA9 /* AnyFileUploadable.swift in Sources */, 35E6D36D1CCBEB90007ABC05 /* Retry.swift in Sources */, 35F4A5F41CC61E52004840E1 /* RestofireRequest.swift in Sources */, - D9472EC6211A216800FFECA9 /* AnyDownloadable.swift in Sources */, 358E8ECC2020A484003048B3 /* Reachability.swift in Sources */, - D9C90475211A13FE00AC34B5 /* AnyRequestable.swift in Sources */, D93BFF4021150F97009FE9DC /* DataUploadable.swift in Sources */, D9FD5BB7211579C60087A1BA /* AMultipartUploadable.swift in Sources */, 357E33A4201DC7180093DCC5 /* RequestOperation.swift in Sources */, 357E335E201D12AE0093DCC5 /* RestofireValidation.swift in Sources */, + D9A72DDF212C6B2E00BDE067 /* QueuePriortizable.swift in Sources */, D9FD5BBB211579C60087A1BA /* AConfigurable.swift in Sources */, 35C7D483201F0E9A00812349 /* ResponseSerializable.swift in Sources */, 35E6D3591CCBD5EF007ABC05 /* Authenticable.swift in Sources */, @@ -1274,9 +1233,7 @@ D93BFF2921150DBF009FE9DC /* Downloadable.swift in Sources */, D9FD5BB3211579C60087A1BA /* ADownloadable.swift in Sources */, 3596CBFE1CA3B5030089A03E /* Requestable.swift in Sources */, - D9472ED0211A217F00FFECA9 /* AnyStreamUploadable.swift in Sources */, D9FD5BC3211579C60087A1BA /* ADataUploadable.swift in Sources */, - D9472ED5211A219400FFECA9 /* AnyDataUploadable.swift in Sources */, 357E3406201DDE310093DCC5 /* Session.swift in Sources */, 3593CA7A1D8C6B5000075A15 /* SessionManagable.swift in Sources */, D9FD5BAB211579C60087A1BA /* ARequestable.swift in Sources */, @@ -1301,21 +1258,18 @@ 35E6D3551CCBD50E007ABC05 /* Validatable.swift in Sources */, 35E6D35F1CCBD731007ABC05 /* Validation.swift in Sources */, D9FD5BA6211579C60087A1BA /* _AUploadable.swift in Sources */, - D9472ED9211A21A000FFECA9 /* AnyMultipartUploadable.swift in Sources */, 358E8EC62020A27B003048B3 /* NetworkReachability.swift in Sources */, 358E8ED52020B776003048B3 /* Reachable.swift in Sources */, D93BFF3C21150F96009FE9DC /* FileUploadable.swift in Sources */, 35460393202B882A00D57627 /* Configurable.swift in Sources */, - D9472ECA211A217B00FFECA9 /* AnyFileUploadable.swift in Sources */, 35E6D36E1CCBEB90007ABC05 /* Retry.swift in Sources */, 35F4A5F51CC61E52004840E1 /* RestofireRequest.swift in Sources */, - D9472EC5211A216800FFECA9 /* AnyDownloadable.swift in Sources */, 358E8ECB2020A484003048B3 /* Reachability.swift in Sources */, - D9C90474211A13FE00AC34B5 /* AnyRequestable.swift in Sources */, D93BFF3D21150F96009FE9DC /* DataUploadable.swift in Sources */, D9FD5BB6211579C60087A1BA /* AMultipartUploadable.swift in Sources */, 357E33A3201DC7180093DCC5 /* RequestOperation.swift in Sources */, 357E335D201D12AE0093DCC5 /* RestofireValidation.swift in Sources */, + D9A72DDE212C6B2E00BDE067 /* QueuePriortizable.swift in Sources */, D9FD5BBA211579C60087A1BA /* AConfigurable.swift in Sources */, 35C7D482201F0E9A00812349 /* ResponseSerializable.swift in Sources */, 35E6D35A1CCBD5EF007ABC05 /* Authenticable.swift in Sources */, @@ -1329,9 +1283,7 @@ D93BFF2621150DBE009FE9DC /* Downloadable.swift in Sources */, D9FD5BB2211579C60087A1BA /* ADownloadable.swift in Sources */, 3596CBFF1CA3B5030089A03E /* Requestable.swift in Sources */, - D9472ECF211A217F00FFECA9 /* AnyStreamUploadable.swift in Sources */, D9FD5BC2211579C60087A1BA /* ADataUploadable.swift in Sources */, - D9472ED4211A219400FFECA9 /* AnyDataUploadable.swift in Sources */, 357E3405201DDE310093DCC5 /* Session.swift in Sources */, 3593CA7B1D8C6B5000075A15 /* SessionManagable.swift in Sources */, D9FD5BAA211579C60087A1BA /* ARequestable.swift in Sources */, @@ -1356,21 +1308,18 @@ 35E6D3601CCBD731007ABC05 /* Validation.swift in Sources */, 358E8ED72020B776003048B3 /* Reachable.swift in Sources */, D9FD5BA8211579C60087A1BA /* _AUploadable.swift in Sources */, - D9472EDB211A21A000FFECA9 /* AnyMultipartUploadable.swift in Sources */, 3594EB782021E4FB006FFA6A /* Requestable.swift in Sources */, 35E6D36F1CCBEB90007ABC05 /* Retry.swift in Sources */, D93BFF4221150F98009FE9DC /* FileUploadable.swift in Sources */, 35460395202B882C00D57627 /* Configurable.swift in Sources */, - D9472ECC211A217B00FFECA9 /* AnyFileUploadable.swift in Sources */, 358E8ECD2020A484003048B3 /* Reachability.swift in Sources */, 357E335F201D12AE0093DCC5 /* RestofireValidation.swift in Sources */, - D9472EC7211A216800FFECA9 /* AnyDownloadable.swift in Sources */, 35C7D484201F0E9A00812349 /* ResponseSerializable.swift in Sources */, - D9C90476211A13FE00AC34B5 /* AnyRequestable.swift in Sources */, D93BFF4321150F98009FE9DC /* DataUploadable.swift in Sources */, D9FD5BB8211579C60087A1BA /* AMultipartUploadable.swift in Sources */, 35E6D35B1CCBD5EF007ABC05 /* Authenticable.swift in Sources */, 35249B051D8E5A84005A2BAB /* CollectionExtensions.swift in Sources */, + D9A72DE0212C6B2E00BDE067 /* QueuePriortizable.swift in Sources */, D9FD5BBC211579C60087A1BA /* AConfigurable.swift in Sources */, 3594EB7E2021E500006FFA6A /* RestofireRequest.swift in Sources */, 35547F291CC0A32F0070F5D3 /* _Configurable.swift in Sources */, @@ -1384,9 +1333,7 @@ D93BFF2C21150DC0009FE9DC /* Downloadable.swift in Sources */, D9FD5BB4211579C60087A1BA /* ADownloadable.swift in Sources */, 3593CA7C1D8C6B5000075A15 /* SessionManagable.swift in Sources */, - D9472ED1211A217F00FFECA9 /* AnyStreamUploadable.swift in Sources */, D9FD5BC4211579C60087A1BA /* ADataUploadable.swift in Sources */, - D9472ED6211A219400FFECA9 /* AnyDataUploadable.swift in Sources */, 3594EB7A2021E4FB006FFA6A /* NetworkReachability.swift in Sources */, 357E33D5201DD7C50093DCC5 /* _Requestable.swift in Sources */, D9FD5BAC211579C60087A1BA /* ARequestable.swift in Sources */, @@ -1401,7 +1348,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D9F36AD221215AE0009AEFE5 /* AMultipartUploadableSpec.swift in Sources */, + D9A44007214C4AEB0020AF0C /* AMultipartUploadableSpec.swift in Sources */, 350428C4201C64C200765D15 /* BaseSpec.swift in Sources */, 35DA5ADE201F48C9008CA3A4 /* RequestableSpec.swift in Sources */, D971025A21158BFD00580974 /* AStreamUploadableSpec.swift in Sources */, @@ -1409,7 +1356,7 @@ 356FC36920210555009CB77D /* ConfigurationSpec.swift in Sources */, 357E3377201DA8280093DCC5 /* JSONDecodableResponseSerializerSpec.swift in Sources */, 3594EB5D2021AF0B006FFA6A /* FileUploadableSpec.swift in Sources */, - D9F36AD521215C21009AEFE5 /* MultipartUploadableSpec.swift in Sources */, + D9A4400B214C4BFB0020AF0C /* MultipartUploadableSpec.swift in Sources */, D971025621158BFD00580974 /* ARequestableSpec.swift in Sources */, D971025921158BFD00580974 /* ADataUploadableSpec.swift in Sources */, 3594EB692021AF15006FFA6A /* StreamUploadable.swift in Sources */, @@ -1425,7 +1372,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D9F36AD321215AE1009AEFE5 /* AMultipartUploadableSpec.swift in Sources */, + D9A44006214C4AEA0020AF0C /* AMultipartUploadableSpec.swift in Sources */, 350428C5201C64C200765D15 /* BaseSpec.swift in Sources */, 35DA5ADF201F48C9008CA3A4 /* RequestableSpec.swift in Sources */, D971026021158BFE00580974 /* AStreamUploadableSpec.swift in Sources */, @@ -1433,7 +1380,7 @@ 356FC36B20210557009CB77D /* ConfigurationSpec.swift in Sources */, 357E3378201DA8290093DCC5 /* JSONDecodableResponseSerializerSpec.swift in Sources */, 3594EB5E2021AF0B006FFA6A /* FileUploadableSpec.swift in Sources */, - D9F36AD621215C22009AEFE5 /* MultipartUploadableSpec.swift in Sources */, + D9A4400C214C4BFB0020AF0C /* MultipartUploadableSpec.swift in Sources */, D971025C21158BFE00580974 /* ARequestableSpec.swift in Sources */, D971025F21158BFE00580974 /* ADataUploadableSpec.swift in Sources */, 3594EB6A2021AF15006FFA6A /* StreamUploadable.swift in Sources */, @@ -1459,21 +1406,18 @@ 35E6D3531CCBD50E007ABC05 /* Validatable.swift in Sources */, 35E6D35D1CCBD731007ABC05 /* Validation.swift in Sources */, D9FD5BA5211579C60087A1BA /* _AUploadable.swift in Sources */, - D9472ED8211A21A000FFECA9 /* AnyMultipartUploadable.swift in Sources */, 358E8EC52020A27B003048B3 /* NetworkReachability.swift in Sources */, 358E8ED42020B776003048B3 /* Reachable.swift in Sources */, D93BFF3921150F96009FE9DC /* FileUploadable.swift in Sources */, 3546038E202B882A00D57627 /* Configurable.swift in Sources */, - D9472EC9211A217B00FFECA9 /* AnyFileUploadable.swift in Sources */, 35E6D36C1CCBEB90007ABC05 /* Retry.swift in Sources */, 35F4A5F31CC61E52004840E1 /* RestofireRequest.swift in Sources */, - D9472EC4211A216800FFECA9 /* AnyDownloadable.swift in Sources */, 358E8ECA2020A484003048B3 /* Reachability.swift in Sources */, - D9C90473211A13FE00AC34B5 /* AnyRequestable.swift in Sources */, D93BFF3A21150F96009FE9DC /* DataUploadable.swift in Sources */, D9FD5BB5211579C60087A1BA /* AMultipartUploadable.swift in Sources */, 357E33A2201DC7180093DCC5 /* RequestOperation.swift in Sources */, 357E335C201D12AE0093DCC5 /* RestofireValidation.swift in Sources */, + D9A72DDD212C6B2E00BDE067 /* QueuePriortizable.swift in Sources */, D9FD5BB9211579C60087A1BA /* AConfigurable.swift in Sources */, 35C7D481201F0E9A00812349 /* ResponseSerializable.swift in Sources */, 35E6D3581CCBD5EF007ABC05 /* Authenticable.swift in Sources */, @@ -1487,9 +1431,7 @@ D93BFF2321150DBE009FE9DC /* Downloadable.swift in Sources */, D9FD5BB1211579C60087A1BA /* ADownloadable.swift in Sources */, 3596CBFD1CA3B5030089A03E /* Requestable.swift in Sources */, - D9472ECE211A217F00FFECA9 /* AnyStreamUploadable.swift in Sources */, D9FD5BC1211579C60087A1BA /* ADataUploadable.swift in Sources */, - D9472ED3211A219400FFECA9 /* AnyDataUploadable.swift in Sources */, 357E3404201DDE310093DCC5 /* Session.swift in Sources */, 3593CA791D8C6B5000075A15 /* SessionManagable.swift in Sources */, D9FD5BA9211579C60087A1BA /* ARequestable.swift in Sources */, @@ -1504,7 +1446,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D9F36AD121215AE0009AEFE5 /* AMultipartUploadableSpec.swift in Sources */, + D9A44008214C4AEB0020AF0C /* AMultipartUploadableSpec.swift in Sources */, 350428C3201C64C200765D15 /* BaseSpec.swift in Sources */, 35DA5ADD201F48C9008CA3A4 /* RequestableSpec.swift in Sources */, D971025421158BFD00580974 /* AStreamUploadableSpec.swift in Sources */, @@ -1512,7 +1454,7 @@ 356FC36820210554009CB77D /* ConfigurationSpec.swift in Sources */, 357E3376201DA8270093DCC5 /* JSONDecodableResponseSerializerSpec.swift in Sources */, 3594EB5C2021AF0B006FFA6A /* FileUploadableSpec.swift in Sources */, - D9F36AD421215C20009AEFE5 /* MultipartUploadableSpec.swift in Sources */, + D9A4400A214C4BFA0020AF0C /* MultipartUploadableSpec.swift in Sources */, D971025021158BFD00580974 /* ARequestableSpec.swift in Sources */, D971025321158BFD00580974 /* ADataUploadableSpec.swift in Sources */, 3594EB682021AF15006FFA6A /* StreamUploadable.swift in Sources */, @@ -1588,7 +1530,7 @@ SDKROOT = appletvos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; + TVOS_DEPLOYMENT_TARGET = 10.0; }; name = Debug; }; @@ -1615,7 +1557,7 @@ SDKROOT = appletvos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; + TVOS_DEPLOYMENT_TARGET = 10.0; }; name = Release; }; @@ -1637,7 +1579,7 @@ INFOPLIST_FILE = "Sources/Supporting Files/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.10; + MACOSX_DEPLOYMENT_TARGET = 10.12; PRODUCT_BUNDLE_IDENTIFIER = org.restofire.Restofire; PRODUCT_NAME = "$(PROJECT_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1664,7 +1606,7 @@ INFOPLIST_FILE = "Sources/Supporting Files/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.10; + MACOSX_DEPLOYMENT_TARGET = 10.12; PRODUCT_BUNDLE_IDENTIFIER = org.restofire.Restofire; PRODUCT_NAME = "$(PROJECT_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1697,6 +1639,7 @@ SDKROOT = watchos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 4; + WATCHOS_DEPLOYMENT_TARGET = 3.0; }; name = Debug; }; @@ -1724,6 +1667,7 @@ SDKROOT = watchos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 4; + WATCHOS_DEPLOYMENT_TARGET = 3.0; }; name = Release; }; @@ -1841,12 +1785,14 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; @@ -1874,8 +1820,8 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MACOSX_DEPLOYMENT_TARGET = 10.10; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + MACOSX_DEPLOYMENT_TARGET = 10.12; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -1900,12 +1846,14 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; @@ -1927,8 +1875,8 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MACOSX_DEPLOYMENT_TARGET = 10.10; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + MACOSX_DEPLOYMENT_TARGET = 10.12; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; diff --git a/Restofire.xcodeproj/xcshareddata/xcschemes/Restofire-iOS.xcscheme b/Restofire.xcodeproj/xcshareddata/xcschemes/Restofire-iOS.xcscheme index 4ae7c80..625bf56 100644 --- a/Restofire.xcodeproj/xcshareddata/xcschemes/Restofire-iOS.xcscheme +++ b/Restofire.xcodeproj/xcshareddata/xcschemes/Restofire-iOS.xcscheme @@ -1,6 +1,6 @@ @@ -37,7 +36,6 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - language = "" launchStyle = "0" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" diff --git a/Restofire.xcworkspace/contents.xcworkspacedata b/Restofire.xcworkspace/contents.xcworkspacedata index 0f3633c..c42f707 100644 --- a/Restofire.xcworkspace/contents.xcworkspacedata +++ b/Restofire.xcworkspace/contents.xcworkspacedata @@ -8,7 +8,7 @@ location = "group:Restofire.playground"> + location = "group:/Users/rahulkatariya/Developer/Restofire/Restofire/Example/Example.xcodeproj"> diff --git a/Sources/Alamofire/RestofireRequest.swift b/Sources/Alamofire/RestofireRequest.swift index 037d654..a836ab9 100644 --- a/Sources/Alamofire/RestofireRequest.swift +++ b/Sources/Alamofire/RestofireRequest.swift @@ -14,8 +14,12 @@ class RestofireRequest { static func dataRequest(fromRequestable requestable: R, withUrlRequest urlRequest: URLRequest) -> DataRequest { let urlRequest = prepareRequest(urlRequest, requestable: requestable) - let request = requestable.sessionManager.request(urlRequest) - didSendRequest(request, requestable: requestable) + let request = requestable.session.request(urlRequest) + requestable.session.requestQueue.async { + requestable.session.rootQueue.async { + didSendRequest(request, requestable: requestable) + } + } authenticateRequest(request, usingCredential: requestable.credential) RestofireRequestValidation.validateDataRequest(request: request, requestable: requestable) return request @@ -23,8 +27,12 @@ class RestofireRequest { static func downloadRequest(fromRequestable requestable: R, withUrlRequest urlRequest: URLRequest) -> DownloadRequest { let urlRequest = prepareDownloadRequest(urlRequest, requestable: requestable) - let request = requestable.sessionManager.download(urlRequest, to: requestable.destination) - didSendDownloadRequest(request, requestable: requestable) + let request = requestable.session.download(urlRequest, to: requestable.destination) + requestable.session.requestQueue.async { + requestable.session.rootQueue.async { + didSendDownloadRequest(request, requestable: requestable) + } + } authenticateRequest(request, usingCredential: requestable.credential) RestofireDownloadValidation.validateDownloadRequest(request: request, requestable: requestable) return request @@ -32,8 +40,12 @@ class RestofireRequest { static func fileUploadRequest(fromRequestable requestable: R, withUrlRequest urlRequest: URLRequest) -> UploadRequest { let urlRequest = prepareRequest(urlRequest, requestable: requestable) - let request = requestable.sessionManager.upload(requestable.url, with: urlRequest) - didSendRequest(request, requestable: requestable) + let request = requestable.session.upload(requestable.url, with: urlRequest) + requestable.session.requestQueue.async { + requestable.session.rootQueue.async { + didSendRequest(request, requestable: requestable) + } + } authenticateRequest(request, usingCredential: requestable.credential) RestofireUploadValidation.validateUploadRequest(request: request, requestable: requestable) return request @@ -41,8 +53,12 @@ class RestofireRequest { static func dataUploadRequest(fromRequestable requestable: R, withUrlRequest urlRequest: URLRequest) -> UploadRequest { let urlRequest = prepareRequest(urlRequest, requestable: requestable) - let request = requestable.sessionManager.upload(requestable.data, with: urlRequest) - didSendRequest(request, requestable: requestable) + let request = requestable.session.upload(requestable.data, with: urlRequest) + requestable.session.requestQueue.async { + requestable.session.rootQueue.async { + didSendRequest(request, requestable: requestable) + } + } authenticateRequest(request, usingCredential: requestable.credential) RestofireUploadValidation.validateUploadRequest(request: request, requestable: requestable) return request @@ -50,8 +66,12 @@ class RestofireRequest { static func streamUploadRequest(fromRequestable requestable: R, withUrlRequest urlRequest: URLRequest) -> UploadRequest { let urlRequest = prepareRequest(urlRequest, requestable: requestable) - let request = requestable.sessionManager.upload(requestable.stream, with: urlRequest) - didSendRequest(request, requestable: requestable) + let request = requestable.session.upload(requestable.stream, with: urlRequest) + requestable.session.requestQueue.async { + requestable.session.rootQueue.async { + didSendRequest(request, requestable: requestable) + } + } authenticateRequest(request, usingCredential: requestable.credential) RestofireUploadValidation.validateUploadRequest(request: request, requestable: requestable) return request @@ -59,12 +79,16 @@ class RestofireRequest { static func multipartUploadRequest(fromRequestable requestable: R, withUrlRequest urlRequest: URLRequest) -> UploadRequest { let urlRequest = prepareRequest(urlRequest, requestable: requestable) - let request = requestable.sessionManager.upload( + let request = requestable.session.upload( multipartFormData: requestable.multipartFormData, usingThreshold: requestable.encodingMemoryThreshold, with: urlRequest ) - didSendRequest(request, requestable: requestable) + requestable.session.requestQueue.async { + requestable.session.rootQueue.async { + didSendRequest(request, requestable: requestable) + } + } authenticateRequest(request, usingCredential: requestable.credential) RestofireUploadValidation.validateUploadRequest(request: request, requestable: requestable) return request diff --git a/Sources/Alamofire/RestofireValidation.swift b/Sources/Alamofire/RestofireValidation.swift index 504b06e..9663b9c 100644 --- a/Sources/Alamofire/RestofireValidation.swift +++ b/Sources/Alamofire/RestofireValidation.swift @@ -39,7 +39,7 @@ class RestofireDownloadValidation { static func validateDownloadRequest(request: DownloadRequest, requestable: R) { validateDownloadRequest(request, forAcceptableContentTypes: requestable.acceptableContentTypes) validateDownloadRequest(request, forAcceptableStatusCodes: requestable.acceptableStatusCodes) - validateDownloadRequest(request, forValidation: requestable.downloadValidationBlock) + validateDownloadRequest(request, forValidation: requestable.validationBlock) } static func validateDownloadRequest(_ request: DownloadRequest, forAcceptableContentTypes contentTypes:[String]?) { diff --git a/Sources/AlamofireRequestable/ADownloadable.swift b/Sources/AlamofireRequestable/ADownloadable.swift index 110a7fb..37b318a 100644 --- a/Sources/AlamofireRequestable/ADownloadable.swift +++ b/Sources/AlamofireRequestable/ADownloadable.swift @@ -29,6 +29,9 @@ public protocol ADownloadable: ARequestable { /// The download file destination var destination: DownloadRequest.Destination? { get } + /// The Alamofire data request validation. + var validationBlock: DownloadRequest.Validation? { get } + } public extension ADownloadable { @@ -37,6 +40,11 @@ public extension ADownloadable { public var destination: DownloadRequest.Destination? { return nil } + + /// `Validation.default.downloadValidation` + public var validationBlock: DownloadRequest.Validation? { + return validation.downloadValidation + } } diff --git a/Sources/AlamofireRequestable/ARequestable.swift b/Sources/AlamofireRequestable/ARequestable.swift index e99a8ab..89f9de2 100644 --- a/Sources/AlamofireRequestable/ARequestable.swift +++ b/Sources/AlamofireRequestable/ARequestable.swift @@ -24,9 +24,6 @@ public protocol ARequestable: _Requestable, AConfigurable, RequestDelegate { /// The Alamofire data request validation. var validationBlock: DataRequest.Validation? { get } - /// The Alamofire download request validation. - var downloadValidationBlock: DownloadRequest.Validation? { get } - /// The request delegates. var delegates: [RequestDelegate] { get } @@ -39,12 +36,7 @@ public extension ARequestable { return validation.dataValidation } - /// `Validation.default.downloadValidation` - public var downloadValidationBlock: DownloadRequest.Validation? { - return validation.downloadValidation - } - - /// `Configuration.default.requestDelegates` + /// `empty` public var delegates: [RequestDelegate] { return configuration.requestDelegates } diff --git a/Sources/AnyRequestable/AnyDataUploadable.swift b/Sources/AnyRequestable/AnyDataUploadable.swift deleted file mode 100644 index 6d3bf85..0000000 --- a/Sources/AnyRequestable/AnyDataUploadable.swift +++ /dev/null @@ -1,50 +0,0 @@ -// -// AnyDataUploadable.swift -// Restofire -// -// Created by RahulKatariya on 08/08/18. -// Copyright © 2018 AarKay. All rights reserved. -// - -import Foundation -import Alamofire - -public struct AnyDataUploadable: DataUploadable { - - public typealias Response = T - - public let uuid: String? = UUID().uuidString - public let path: String? - public let data: Data - public let requestDelegates: [RequestDelegate] - public let responseSerializer: AnyResponseSerializer.Response>> - public let configuration: Configuration - public let session: Session - public let authentication: Authentication - public let retry: Retry - public let validation: Validation - public let reachability: Reachability - - init(path: String, - data: Data, - requestDelegates: [RequestDelegate] = Configuration.default.requestDelegates, - responseSerializer: AnyResponseSerializer.Response>>, - configuration: Configuration = Configuration.default, - session: Session = Session.default, - authentication: Authentication = Authentication.default, - retry: Retry = Retry.default, - validation: Validation = Validation.default, - reachability: Reachability = Reachability.default) { - self.path = path - self.data = data - self.requestDelegates = requestDelegates - self.responseSerializer = responseSerializer - self.configuration = configuration - self.session = session - self.authentication = authentication - self.retry = retry - self.validation = validation - self.reachability = reachability - } - -} diff --git a/Sources/AnyRequestable/AnyDownloadable.swift b/Sources/AnyRequestable/AnyDownloadable.swift deleted file mode 100644 index cec7e07..0000000 --- a/Sources/AnyRequestable/AnyDownloadable.swift +++ /dev/null @@ -1,50 +0,0 @@ -// -// AnyDownloadable.swift -// Restofire -// -// Created by RahulKatariya on 08/08/18. -// Copyright © 2018 AarKay. All rights reserved. -// - -import Foundation -import Alamofire - -public struct AnyDownloadable: Downloadable { - - public typealias Response = T - - public let uuid: String? = UUID().uuidString - public let path: String? - public let destination: DownloadRequest.Destination? - public let requestDelegates: [RequestDelegate] - public let responseSerializer: AnyResponseSerializer.Response>> - public let configuration: Configuration - public let session: Session - public let authentication: Authentication - public let retry: Retry - public let validation: Validation - public let reachability: Reachability - - init(path: String, - destination: DownloadRequest.Destination? = nil, - requestDelegates: [RequestDelegate] = Configuration.default.requestDelegates, - responseSerializer: AnyResponseSerializer.Response>>, - configuration: Configuration = Configuration.default, - session: Session = Session.default, - authentication: Authentication = Authentication.default, - retry: Retry = Retry.default, - validation: Validation = Validation.default, - reachability: Reachability = Reachability.default) { - self.path = path - self.destination = destination - self.requestDelegates = requestDelegates - self.responseSerializer = responseSerializer - self.configuration = configuration - self.session = session - self.authentication = authentication - self.retry = retry - self.validation = validation - self.reachability = reachability - } - -} diff --git a/Sources/AnyRequestable/AnyFileUploadable.swift b/Sources/AnyRequestable/AnyFileUploadable.swift deleted file mode 100644 index cb2d369..0000000 --- a/Sources/AnyRequestable/AnyFileUploadable.swift +++ /dev/null @@ -1,50 +0,0 @@ -// -// AnyFileUploadable.swift -// Restofire -// -// Created by RahulKatariya on 08/08/18. -// Copyright © 2018 AarKay. All rights reserved. -// - -import Foundation -import Alamofire - -public struct AnyFileUploadable: FileUploadable { - - public typealias Response = T - - public let uuid: String? = UUID().uuidString - public let path: String? - public let url: URL - public let requestDelegates: [RequestDelegate] - public let responseSerializer: AnyResponseSerializer.Response>> - public let configuration: Configuration - public let session: Session - public let authentication: Authentication - public let retry: Retry - public let validation: Validation - public let reachability: Reachability - - init(path: String, - url: URL, - requestDelegates: [RequestDelegate] = Configuration.default.requestDelegates, - responseSerializer: AnyResponseSerializer.Response>>, - configuration: Configuration = Configuration.default, - session: Session = Session.default, - authentication: Authentication = Authentication.default, - retry: Retry = Retry.default, - validation: Validation = Validation.default, - reachability: Reachability = Reachability.default) { - self.path = path - self.url = url - self.requestDelegates = requestDelegates - self.responseSerializer = responseSerializer - self.configuration = configuration - self.session = session - self.authentication = authentication - self.retry = retry - self.validation = validation - self.reachability = reachability - } - -} diff --git a/Sources/AnyRequestable/AnyMultipartUploadable.swift b/Sources/AnyRequestable/AnyMultipartUploadable.swift deleted file mode 100644 index f6658ab..0000000 --- a/Sources/AnyRequestable/AnyMultipartUploadable.swift +++ /dev/null @@ -1,53 +0,0 @@ -// -// AnyMultipartUploadable.swift -// Restofire -// -// Created by RahulKatariya on 08/08/18. -// Copyright © 2018 AarKay. All rights reserved. -// - -import Foundation -import Alamofire - -public struct AnyMultipartUploadable: MultipartUploadable { - - public typealias Response = T - - public let uuid: String? = UUID().uuidString - public let path: String? - public let multipartFormData: (MultipartFormData) -> Void - public let encodingMemoryThreshold: UInt64 - public let requestDelegates: [RequestDelegate] - public let responseSerializer: AnyResponseSerializer.Response>> - public let configuration: Configuration - public let session: Session - public let authentication: Authentication - public let retry: Retry - public let validation: Validation - public let reachability: Reachability - - init(path: String, - multipartFormData: @escaping (MultipartFormData) -> Void, - encodingMemoryThreshold: UInt64, - requestDelegates: [RequestDelegate] = Configuration.default.requestDelegates, - responseSerializer: AnyResponseSerializer.Response>>, - configuration: Configuration = Configuration.default, - session: Session = Session.default, - authentication: Authentication = Authentication.default, - retry: Retry = Retry.default, - validation: Validation = Validation.default, - reachability: Reachability = Reachability.default) { - self.path = path - self.multipartFormData = multipartFormData - self.encodingMemoryThreshold = encodingMemoryThreshold - self.requestDelegates = requestDelegates - self.responseSerializer = responseSerializer - self.configuration = configuration - self.session = session - self.authentication = authentication - self.retry = retry - self.validation = validation - self.reachability = reachability - } - -} diff --git a/Sources/AnyRequestable/AnyRequestable.swift b/Sources/AnyRequestable/AnyRequestable.swift deleted file mode 100644 index 8e46224..0000000 --- a/Sources/AnyRequestable/AnyRequestable.swift +++ /dev/null @@ -1,47 +0,0 @@ -// -// AnyRequestable.swift -// Restofire -// -// Created by RahulKatariya on 07/08/18. -// Copyright © 2018 AarKay. All rights reserved. -// - -import Foundation -import Alamofire - -public struct AnyRequestable: Requestable { - - public typealias Response = T - - public let uuid: String? = UUID().uuidString - public let path: String? - public let requestDelegates: [RequestDelegate] - public let responseSerializer: AnyResponseSerializer.Response>> - public let configuration: Configuration - public let session: Session - public let authentication: Authentication - public let retry: Retry - public let validation: Validation - public let reachability: Reachability - - init(path: String, - requestDelegates: [RequestDelegate] = Configuration.default.requestDelegates, - responseSerializer: AnyResponseSerializer.Response>>, - configuration: Configuration = Configuration.default, - session: Session = Session.default, - authentication: Authentication = Authentication.default, - retry: Retry = Retry.default, - validation: Validation = Validation.default, - reachability: Reachability = Reachability.default) { - self.path = path - self.requestDelegates = requestDelegates - self.responseSerializer = responseSerializer - self.configuration = configuration - self.session = session - self.authentication = authentication - self.retry = retry - self.validation = validation - self.reachability = reachability - } - -} diff --git a/Sources/AnyRequestable/AnyStreamUploadable.swift b/Sources/AnyRequestable/AnyStreamUploadable.swift deleted file mode 100644 index 98d93c2..0000000 --- a/Sources/AnyRequestable/AnyStreamUploadable.swift +++ /dev/null @@ -1,50 +0,0 @@ -// -// AnyStreamUploadable.swift -// Restofire -// -// Created by RahulKatariya on 08/08/18. -// Copyright © 2018 AarKay. All rights reserved. -// - -import Foundation -import Alamofire - -public struct AnyStreamUploadable: StreamUploadable { - - public typealias Response = T - - public let uuid: String? = UUID().uuidString - public let path: String? - public let stream: InputStream - public let requestDelegates: [RequestDelegate] - public let responseSerializer: AnyResponseSerializer.Response>> - public let configuration: Configuration - public let session: Session - public let authentication: Authentication - public let retry: Retry - public let validation: Validation - public let reachability: Reachability - - init(path: String, - stream: InputStream, - requestDelegates: [RequestDelegate] = Configuration.default.requestDelegates, - responseSerializer: AnyResponseSerializer.Response>>, - configuration: Configuration = Configuration.default, - session: Session = Session.default, - authentication: Authentication = Authentication.default, - retry: Retry = Retry.default, - validation: Validation = Validation.default, - reachability: Reachability = Reachability.default) { - self.path = path - self.stream = stream - self.requestDelegates = requestDelegates - self.responseSerializer = responseSerializer - self.configuration = configuration - self.session = session - self.authentication = authentication - self.retry = retry - self.validation = validation - self.reachability = reachability - } - -} diff --git a/Sources/Configuration/Configuration.swift b/Sources/Configuration/Configuration.swift index 696efe0..94a3723 100644 --- a/Sources/Configuration/Configuration.swift +++ b/Sources/Configuration/Configuration.swift @@ -47,6 +47,15 @@ public struct Configuration { /// The request delegates. `empty` by default. public var requestDelegates: [RequestDelegate] = [] + /// The request operation queue. + public var requestQueue: OperationQueue = OperationQueue() + + /// The request operation queue. + public var downloadQueue: OperationQueue = OperationQueue() + + /// The request operation queue. + public var uploadQueue: OperationQueue = OperationQueue() + /// `Configuration` Intializer /// /// - returns: new `Configuration` object diff --git a/Sources/Configuration/Protocols/QueuePriortizable.swift b/Sources/Configuration/Protocols/QueuePriortizable.swift new file mode 100644 index 0000000..06921f0 --- /dev/null +++ b/Sources/Configuration/Protocols/QueuePriortizable.swift @@ -0,0 +1,63 @@ +// +// QueuePriortizable.swift +// Restofire +// +// Created by RahulKatariya on 21/08/18. +// Copyright © 2018 Restofire. All rights reserved. +// + +import Foundation + +public protocol QueuePriortizable { + + var priority: Operation.QueuePriority { get } + +} + +extension QueuePriortizable { + + var priority: Operation.QueuePriority { + return .normal + } + +} + +protocol VeryHighQueuePriortizable: QueuePriortizable {} + +extension VeryHighQueuePriortizable { + + var priority: Operation.QueuePriority { + return .veryHigh + } + +} + +protocol HighQueuePriortizable: QueuePriortizable {} + +extension HighQueuePriortizable { + + var priority: Operation.QueuePriority { + return .high + } + +} + +protocol LowQueuePriortizable: QueuePriortizable {} + +extension LowQueuePriortizable { + + var priority: Operation.QueuePriority { + return .low + } + +} + +protocol VeryLowQueuePriortizable: QueuePriortizable {} + +extension VeryLowQueuePriortizable { + + var priority: Operation.QueuePriority { + return .veryLow + } + +} diff --git a/Sources/Configuration/Protocols/Queueable.swift b/Sources/Configuration/Protocols/Queueable.swift index b983b68..163f145 100644 --- a/Sources/Configuration/Protocols/Queueable.swift +++ b/Sources/Configuration/Protocols/Queueable.swift @@ -15,6 +15,15 @@ public protocol Queueable { /// The `queue`. var queue: DispatchQueue { get } + /// The request operation queue + var requestQueue: OperationQueue { get } + + /// The download operation queue + var downloadQueue: OperationQueue { get } + + /// The upload operation queue + var uploadQueue: OperationQueue { get } + } public extension Queueable where Self: Configurable { @@ -24,4 +33,19 @@ public extension Queueable where Self: Configurable { return DispatchQueue.main } + /// `configuration.requestQueue` + public var requestQueue: OperationQueue { + return configuration.requestQueue + } + + /// `configuration.downloadQueue` + public var downloadQueue: OperationQueue { + return configuration.downloadQueue + } + + /// `configuration.uploadQueue` + public var uploadQueue: OperationQueue { + return configuration.uploadQueue + } + } diff --git a/Sources/Configuration/Protocols/RequestDelegate.swift b/Sources/Configuration/Protocols/RequestDelegate.swift index f43e767..a0b04de 100644 --- a/Sources/Configuration/Protocols/RequestDelegate.swift +++ b/Sources/Configuration/Protocols/RequestDelegate.swift @@ -35,7 +35,7 @@ extension RequestDelegate { /// `No-op` public func didSend(_ request: Request, requestable: ARequestable) {} - + /// `No-op` public func process(_ request: Request, requestable: ARequestable, response: DataResponse) -> DataResponse { return response diff --git a/Sources/Configuration/Protocols/SessionManagable.swift b/Sources/Configuration/Protocols/SessionManagable.swift index 2050eaf..e654868 100644 --- a/Sources/Configuration/Protocols/SessionManagable.swift +++ b/Sources/Configuration/Protocols/SessionManagable.swift @@ -9,19 +9,19 @@ import Foundation import Alamofire -/// Represents a `Alamofire.SessionManager` that is associated with `Requestable`. +/// Represents a `Alamofire.Session` that is associated with `Requestable`. public protocol SessionManagable { - /// The `sessionManager`. - var sessionManager: SessionManager { get } + /// The `session`. + var session: Session { get } } public extension SessionManagable where Self: AConfigurable { - /// `Session.default` - public var sessionManager: SessionManager { - return Session.default.sessionManager + /// `AlamofireSession.default` + public var session: Session { + return AlamofireSession.default.session } } diff --git a/Sources/Configuration/Session.swift b/Sources/Configuration/Session.swift index 13915bd..5bfdaaf 100644 --- a/Sources/Configuration/Session.swift +++ b/Sources/Configuration/Session.swift @@ -21,13 +21,13 @@ import Alamofire /// return Alamofire.SessionManager(configuration: sessionConfiguration) /// } /// ``` -public struct Session { +public struct AlamofireSession { /// The default session manager. - public static var `default` = Session() + public static var `default` = AlamofireSession() - /// The Alamofire Session Manager. `Alamofire.SessionManager.default` by default. - public var sessionManager = SessionManager.default + /// The Alamofire Session Manager. `Alamofire.Session.default` by default. + public var session = Session.default /// `Session` Intializer /// diff --git a/Sources/Extensions/Restofire+Logging.swift b/Sources/Extensions/Restofire+Logging.swift index 077cbca..0781f71 100644 --- a/Sources/Extensions/Restofire+Logging.swift +++ b/Sources/Extensions/Restofire+Logging.swift @@ -11,69 +11,18 @@ import Alamofire extension Request { - func logRequestIfNeeded() { - if let argumentIndex = ProcessInfo.processInfo.arguments - .index(of: "-org.restofire.Restofire.Debug") { - underlyingQueue.sync { [unowned self] in + @discardableResult + func logIfNeeded() -> Request { + underlyingQueue.async { + if let argumentIndex = ProcessInfo.processInfo.arguments + .index(of: "-org.restofire.Restofire.Debug") { let logLevel = ProcessInfo.processInfo.arguments[argumentIndex+1] if logLevel == "1" { - print("/**************************************** Request ****************************************/") print(self.debugDescription) - print("/**************************************** RequestEnd ****************************************/") - } - } - } - } - - func logDataRequestIfNeeded(result: DataResponse) { - if let argumentIndex = ProcessInfo.processInfo.arguments - .index(of: "-org.restofire.Restofire.Debug") { - underlyingQueue.sync { [unowned self] in - let logLevel = ProcessInfo.processInfo.arguments[argumentIndex+1] - if logLevel == "2" { - print("/**************************************** Response ****************************************/") - print(self.response.debugDescription) - print("/**************************************** ResponseEnd ****************************************/") - } else if logLevel == "3" { - print("/**************************************** Request ****************************************/") - print(self.debugDescription) - print("/**************************************** RequestEnd ****************************************/") - print("") - print("/**************************************** Response ****************************************/") - print(self.response.debugDescription) - print("/**************************************** ResponseEnd ****************************************/") - let value = String(data: result.data ?? Data(), encoding: .utf8) - print("") - print("/**************************************** Result ****************************************/") - print(value ?? result.error.debugDescription) - print("/**************************************** ResultEnd ****************************************/") - } - } - } - } - - func logDownloadRequestIfNeeded(result: DownloadResponse) { - if let argumentIndex = ProcessInfo.processInfo.arguments - .index(of: "-org.restofire.Restofire.Debug") { - underlyingQueue.sync { [unowned self] in - let logLevel = ProcessInfo.processInfo.arguments[argumentIndex+1] - if logLevel == "2" { - print("/**************************************** Response ****************************************/") - print(self.response.debugDescription) - print("/**************************************** ResponseEnd ****************************************/") - } else if logLevel == "3" { - print("/**************************************** Request ****************************************/") - print(self.debugDescription) - print("/**************************************** RequestEnd ****************************************/") - print("/**************************************** Response ****************************************/") - print(self.response.debugDescription) - print("/**************************************** ResponseEnd ****************************************/") - print("/**************************************** Result ****************************************/") - print(result.fileURL ?? result.error.debugDescription) - print("/**************************************** ResultEnd ****************************************/") } } } + return self } } diff --git a/Sources/Requestable/Configurable.swift b/Sources/Requestable/Configurable.swift index 0b9d7bc..236cc49 100644 --- a/Sources/Requestable/Configurable.swift +++ b/Sources/Requestable/Configurable.swift @@ -26,7 +26,7 @@ import Alamofire /// /// } /// ``` -public protocol Configurable: AConfigurable, Reachable, Retryable, Queueable { +public protocol Configurable: AConfigurable, Reachable, Retryable, Queueable, QueuePriortizable { #if !os(watchOS) /// The waitsForConnectivity. diff --git a/Sources/Requestable/Downloadable.swift b/Sources/Requestable/Downloadable.swift index d9a3278..997af63 100644 --- a/Sources/Requestable/Downloadable.swift +++ b/Sources/Requestable/Downloadable.swift @@ -47,6 +47,30 @@ public extension Downloadable { /// `Does Nothing` func request(_ request: DownloadOperation, didFailWithError error: Error) {} + /// Creates a `DownloadOperation` for the specified `Requestable` object. + /// + /// - parameter completionHandler: A closure to be executed once the request + /// has finished. `nil` by default. + /// + /// - returns: The created `RequestOperation`. + @discardableResult + public func operation(completionHandler: ((DownloadResponse) -> Void)? = nil) -> DownloadOperation { + return operation(request: self.request, completionHandler: completionHandler) + } + + /// Creates a `DownloadOperation` for the specified `Requestable` object. + /// + /// - parameter request: A data request instance + /// - parameter completionHandler: A closure to be executed once the request + /// has finished. `nil` by default. + /// + /// - returns: The created `RequestOperation`. + public func operation(request: @autoclosure @escaping () -> DownloadRequest, completionHandler: ((DownloadResponse) -> Void)? = nil) -> DownloadOperation { + let downloadOperation = DownloadOperation(downloadable: self, request: request, completionHandler: completionHandler) + downloadOperation.queuePriority = priority + return downloadOperation + } + /// Creates a `DownloadOperation` for the specified `Requestable` object and /// asynchronously executes it. /// @@ -69,8 +93,8 @@ public extension Downloadable { /// - returns: The created `DownloadOperation`. @discardableResult public func execute(request: @autoclosure @escaping () -> DownloadRequest, completionHandler: ((DownloadResponse) -> Void)? = nil) -> DownloadOperation { - let downloadOperation = DownloadOperation(downloadable: self, request: request, completionHandler: completionHandler) - downloadOperation.start() + let downloadOperation = operation(request: request, completionHandler: completionHandler) + downloadQueue.addOperation(downloadOperation) return downloadOperation } diff --git a/Sources/Requestable/Requestable.swift b/Sources/Requestable/Requestable.swift index 37abfac..bb5b617 100644 --- a/Sources/Requestable/Requestable.swift +++ b/Sources/Requestable/Requestable.swift @@ -43,6 +43,30 @@ public extension Requestable { /// `Does Nothing` func request(_ request: RequestOperation, didFailWithError error: Error) {} + /// Creates a `RequestOperation` for the specified `Requestable` object. + /// + /// - parameter completionHandler: A closure to be executed once the request + /// has finished. `nil` by default. + /// + /// - returns: The created `RequestOperation`. + @discardableResult + public func operation(completionHandler: ((DataResponse) -> Void)? = nil) -> RequestOperation { + return operation(request: self.request, completionHandler: completionHandler) + } + + /// Creates a `RequestOperation` for the specified `Requestable` object. + /// + /// - parameter request: A data request instance + /// - parameter completionHandler: A closure to be executed once the request + /// has finished. `nil` by default. + /// + /// - returns: The created `RequestOperation`. + public func operation(request: @autoclosure @escaping () -> DataRequest, completionHandler: ((DataResponse) -> Void)? = nil) -> RequestOperation { + let requestOperation = RequestOperation(requestable: self, request: request, completionHandler: completionHandler) + requestOperation.queuePriority = priority + return requestOperation + } + /// Creates a `RequestOperation` for the specified `Requestable` object and /// asynchronously executes it. /// @@ -65,8 +89,8 @@ public extension Requestable { /// - returns: The created `RequestOperation`. @discardableResult public func execute(request: @autoclosure @escaping () -> DataRequest, completionHandler: ((DataResponse) -> Void)? = nil) -> RequestOperation { - let requestOperation = RequestOperation(requestable: self, request: request, completionHandler: completionHandler) - requestOperation.start() + let requestOperation = operation(request: request, completionHandler: completionHandler) + requestQueue.addOperation(requestOperation) return requestOperation } diff --git a/Sources/Requestable/Uploadable.swift b/Sources/Requestable/Uploadable.swift index dc0165d..70bcf7f 100644 --- a/Sources/Requestable/Uploadable.swift +++ b/Sources/Requestable/Uploadable.swift @@ -37,6 +37,30 @@ public extension Uploadable { /// `Does Nothing` func request(_ request: UploadOperation, didFailWithError error: Error) {} + /// Creates a `RequestOperation` for the specified `Requestable` object. + /// + /// - parameter completionHandler: A closure to be executed once the request + /// has finished. `nil` by default. + /// + /// - returns: The created `RequestOperation`. + @discardableResult + public func operation(completionHandler: ((DataResponse) -> Void)? = nil) -> UploadOperation { + return operation(request: self.request, completionHandler: completionHandler) + } + + /// Creates a `RequestOperation` for the specified `Requestable` object. + /// + /// - parameter request: A data request instance + /// - parameter completionHandler: A closure to be executed once the request + /// has finished. `nil` by default. + /// + /// - returns: The created `RequestOperation`. + public func operation(request: @autoclosure @escaping () -> UploadRequest, completionHandler: ((DataResponse) -> Void)? = nil) -> UploadOperation { + let uploadOperation = UploadOperation(uploadable: self, request: request, completionHandler: completionHandler) + uploadOperation.queuePriority = priority + return uploadOperation + } + /// Creates a `UploadOperation` for the specified `Uploadable` object and /// asynchronously executes it. /// @@ -59,8 +83,8 @@ public extension Uploadable { /// - returns: The created `UploadOperation`. @discardableResult public func execute(request: @autoclosure @escaping () -> UploadRequest, completionHandler: ((DataResponse) -> Void)? = nil) -> UploadOperation { - let uploadOperation = UploadOperation(uploadable: self, request: request, completionHandler: completionHandler) - uploadOperation.start() + let uploadOperation = operation(request: request, completionHandler: completionHandler) + uploadQueue.addOperation(uploadOperation) return uploadOperation } diff --git a/Sources/RequestableOperation/AOperation.swift b/Sources/RequestableOperation/AOperation.swift index 15927e1..98e9ddf 100644 --- a/Sources/RequestableOperation/AOperation.swift +++ b/Sources/RequestableOperation/AOperation.swift @@ -69,26 +69,24 @@ open class AOperation: Operation { switch requestType { case .data, .upload: let request = self.request as! DataRequest - request.response { result in - if result.error != nil { - self.handleDataRequestError(result) + request.response { + if $0.error != nil { + self.handleDataRequestError($0) } else { - self.handleDataResponse(result) + self.handleDataResponse($0) } - request.logDataRequestIfNeeded(result: result) } case .download: let request = self.request as! DownloadRequest - request.response { result in - if result.error != nil { - self.handleDownloadRequestError(result) + request.response { + if $0.error != nil { + self.handleDownloadRequestError($0) } else { - self.handleDownloadResponse(result) + self.handleDownloadResponse($0) } - request.logDownloadRequestIfNeeded(result: result) } } - request.logRequestIfNeeded() + request.logIfNeeded() } open func copy() -> AOperation { diff --git a/Sources/RequestableOperation/DownloadOperation.swift b/Sources/RequestableOperation/DownloadOperation.swift index 47ac645..1beb679 100644 --- a/Sources/RequestableOperation/DownloadOperation.swift +++ b/Sources/RequestableOperation/DownloadOperation.swift @@ -46,43 +46,28 @@ public class DownloadOperation: AOperation { error: res.error) } - switch result { - case .success(let value): - let downloadResponse = DownloadResponse( - request: res.request, - response: res.response, - fileURL: res.fileURL, - resumeData: res.resumeData, - metrics: res.metrics, - serializationDuration: res.serializationDuration, - result: value - ) - downloadable.queue.async { - self.completionHandler?(downloadResponse) - switch value { - case .success(let innerValue): - self.downloadable.request(self, didCompleteWithValue: innerValue) - case .failure(let error): - self.downloadable.request(self, didFailWithError: error) - } - self.isFinished = true - } - case .failure(let error): - let downloadResponse = DownloadResponse( - request: res.request, - response: res.response, - fileURL: res.fileURL, - resumeData: res.resumeData, - metrics: res.metrics, - serializationDuration: res.serializationDuration, - result: Result.failure(error) - ) - downloadable.queue.async { - self.completionHandler?(downloadResponse) - self.downloadable.request(self, didFailWithError: error) - self.isFinished = true - } + let downloadResponse = DownloadResponse( + request: res.request, + response: res.response, + fileURL: res.fileURL, + resumeData: res.resumeData, + metrics: res.metrics, + serializationDuration: res.serializationDuration, + result: result.value! + ) + + downloadable.queue.async { + self.completionHandler?(downloadResponse) + } + + if let error = res.error { + self.downloadable.request(self, didFailWithError: error) + } else { + self.downloadable.request(self, didCompleteWithValue: downloadResponse.value!) } + + self.isFinished = true + } /// Creates a copy of self diff --git a/Sources/RequestableOperation/RequestOperation.swift b/Sources/RequestableOperation/RequestOperation.swift index 0384ccc..8861acb 100644 --- a/Sources/RequestableOperation/RequestOperation.swift +++ b/Sources/RequestableOperation/RequestOperation.swift @@ -45,41 +45,26 @@ public class RequestOperation: AOperation { data: res.data, error: res.error) } - switch result { - case .success(let value): - let dataResponse = DataResponse( - request: res.request, - response: res.response, - data: res.data, - metrics: res.metrics, - serializationDuration: res.serializationDuration, - result: value - ) - requestable.queue.async { - self.completionHandler?(dataResponse) - switch value { - case .success(let innerValue): - self.requestable.request(self, didCompleteWithValue: innerValue) - case .failure(let error): - self.requestable.request(self, didFailWithError: error) - } - self.isFinished = true - } - case .failure(let error): - let dataResponse = DataResponse( - request: res.request, - response: res.response, - data: res.data, - metrics: res.metrics, - serializationDuration: res.serializationDuration, - result: Result.failure(error) - ) - requestable.queue.async { - self.completionHandler?(dataResponse) - self.requestable.request(self, didFailWithError: error) - self.isFinished = true - } + let dataResponse = DataResponse( + request: res.request, + response: res.response, + data: res.data, + metrics: res.metrics, + serializationDuration: res.serializationDuration, + result: result.value! + ) + + requestable.queue.async { + self.completionHandler?(dataResponse) } + + if let error = res.error { + self.requestable.request(self, didFailWithError: error) + } else { + self.requestable.request(self, didCompleteWithValue: dataResponse.value!) + } + + self.isFinished = true } /// Creates a copy of self diff --git a/Sources/RequestableOperation/UploadOperation.swift b/Sources/RequestableOperation/UploadOperation.swift index 12d455b..ab9e3ca 100644 --- a/Sources/RequestableOperation/UploadOperation.swift +++ b/Sources/RequestableOperation/UploadOperation.swift @@ -46,41 +46,26 @@ public class UploadOperation: AOperation { error: res.error) } - switch result { - case .success(let value): - let dataResponse = DataResponse( - request: res.request, - response: res.response, - data: res.data, - metrics: res.metrics, - serializationDuration: res.serializationDuration, - result: value - ) - uploadable.queue.async { - self.completionHandler?(dataResponse) - switch value { - case .success(let innerValue): - self.uploadable.request(self, didCompleteWithValue: innerValue) - case .failure(let error): - self.uploadable.request(self, didFailWithError: error) - } - self.isFinished = true - } - case .failure(let error): - let dataResponse = DataResponse( - request: res.request, - response: res.response, - data: res.data, - metrics: res.metrics, - serializationDuration: res.serializationDuration, - result: Result.failure(error) - ) - uploadable.queue.async { - self.completionHandler?(dataResponse) - self.uploadable.request(self, didFailWithError: error) - self.isFinished = true - } + let dataResponse = DataResponse( + request: res.request, + response: res.response, + data: res.data, + metrics: res.metrics, + serializationDuration: res.serializationDuration, + result: result.value! + ) + + uploadable.queue.async { + self.completionHandler?(dataResponse) } + + if let error = res.error { + self.uploadable.request(self, didFailWithError: error) + } else { + self.uploadable.request(self, didCompleteWithValue: dataResponse.value!) + } + self.isFinished = true + } /// Creates a copy of self diff --git a/Tests/AlamofireRequestable/ADataUploadableSpec.swift b/Tests/AlamofireRequestable/ADataUploadableSpec.swift index 10d5dfe..0115717 100644 --- a/Tests/AlamofireRequestable/ADataUploadableSpec.swift +++ b/Tests/AlamofireRequestable/ADataUploadableSpec.swift @@ -14,7 +14,6 @@ import Alamofire class ADataUploadableSpec: BaseSpec { - static var prepareDelegateCalled = false static var startDelegateCalled = false override func spec() { @@ -36,12 +35,11 @@ class ADataUploadableSpec: BaseSpec { } expect(request.value(forHTTPHeaderField: "Authorization")) .to(equal("Basic dXNlcjpwYXNzd29yZA==")) - ADataUploadableSpec.prepareDelegateCalled = true return request } func didSend(_ request: Request, requestable: ARequestable) { - expect(request.request?.value(forHTTPHeaderField: "Authorization")) + expect(request.request?.value(forHTTPHeaderField: "Authorization")!) .to(equal("Basic dXNlcjpwYXNzd29yZA==")) ADataUploadableSpec.startDelegateCalled = true } @@ -51,14 +49,12 @@ class ADataUploadableSpec: BaseSpec { let request = Upload().request print(request.debugDescription) - expect(ADataUploadableSpec.prepareDelegateCalled).to(beTrue()) - expect(ADataUploadableSpec.startDelegateCalled).to(beTrue()) - var uploadProgressValues: [Double] = [] var downloadProgressValues: [Double] = [] // When waitUntil(timeout: self.timeout) { done in + request .uploadProgress { progress in uploadProgressValues.append(progress.fractionCompleted) @@ -67,7 +63,10 @@ class ADataUploadableSpec: BaseSpec { downloadProgressValues.append(progress.fractionCompleted) } .responseJSON { response in - defer { done() } + defer { + expect(ADataUploadableSpec.startDelegateCalled).to(beTrue()) + done() + } // Then if let statusCode = response.response?.statusCode, diff --git a/Tests/AlamofireRequestable/ADownloadableSpec.swift b/Tests/AlamofireRequestable/ADownloadableSpec.swift index 42f4ff9..002772f 100644 --- a/Tests/AlamofireRequestable/ADownloadableSpec.swift +++ b/Tests/AlamofireRequestable/ADownloadableSpec.swift @@ -14,7 +14,6 @@ import Alamofire class ADownloadableSpec: BaseSpec { - static var prepareDelegateCalled = false static var startDelegateCalled = false override func spec() { @@ -38,12 +37,11 @@ class ADownloadableSpec: BaseSpec { } expect(request.value(forHTTPHeaderField: "Authorization")) .to(equal("Basic dXNlcjpwYXNzd29yZA==")) - ADownloadableSpec.prepareDelegateCalled = true return request } func didSend(_ request: Request, requestable: ARequestable) { - expect(request.request?.value(forHTTPHeaderField: "Authorization")) + expect(request.request?.value(forHTTPHeaderField: "Authorization")!) .to(equal("Basic dXNlcjpwYXNzd29yZA==")) ADownloadableSpec.startDelegateCalled = true } @@ -53,20 +51,20 @@ class ADownloadableSpec: BaseSpec { let request = Download(destination: { _, _ in (BaseSpec.jsonFileURL, []) }).request print(request.debugDescription) - - expect(ADownloadableSpec.prepareDelegateCalled).to(beTrue()) - expect(ADownloadableSpec.startDelegateCalled).to(beTrue()) - var progressValues: [Double] = [] // When waitUntil(timeout: self.timeout) { done in + request .downloadProgress { progress in progressValues.append(progress.fractionCompleted) } .response { response in - defer { done() } + defer { + expect(ADownloadableSpec.startDelegateCalled).to(beTrue()) + done() + } // Then if let statusCode = response.response?.statusCode, diff --git a/Tests/AlamofireRequestable/AFileUploadableSpec.swift b/Tests/AlamofireRequestable/AFileUploadableSpec.swift index 970415a..0be7596 100644 --- a/Tests/AlamofireRequestable/AFileUploadableSpec.swift +++ b/Tests/AlamofireRequestable/AFileUploadableSpec.swift @@ -14,7 +14,6 @@ import Alamofire class AFileUploadableSpec: BaseSpec { - static var prepareDelegateCalled = false static var startDelegateCalled = false override func spec() { @@ -34,12 +33,11 @@ class AFileUploadableSpec: BaseSpec { } expect(request.value(forHTTPHeaderField: "Authorization")) .to(equal("Basic dXNlcjpwYXNzd29yZA==")) - AFileUploadableSpec.prepareDelegateCalled = true return request } func didSend(_ request: Request, requestable: ARequestable) { - expect(request.request?.value(forHTTPHeaderField: "Authorization")) + expect(request.request?.value(forHTTPHeaderField: "Authorization")!) .to(equal("Basic dXNlcjpwYXNzd29yZA==")) AFileUploadableSpec.startDelegateCalled = true } @@ -49,15 +47,12 @@ class AFileUploadableSpec: BaseSpec { let request = Upload().request print(request.debugDescription) - - expect(AFileUploadableSpec.prepareDelegateCalled).to(beTrue()) - expect(AFileUploadableSpec.startDelegateCalled).to(beTrue()) - var uploadProgressValues: [Double] = [] var downloadProgressValues: [Double] = [] // When waitUntil(timeout: self.timeout) { done in + request .uploadProgress { progress in uploadProgressValues.append(progress.fractionCompleted) @@ -66,7 +61,10 @@ class AFileUploadableSpec: BaseSpec { downloadProgressValues.append(progress.fractionCompleted) } .responseJSON { response in - defer { done() } + defer { + expect(AFileUploadableSpec.startDelegateCalled).to(beTrue()) + done() + } // Then if let statusCode = response.response?.statusCode, @@ -119,3 +117,4 @@ class AFileUploadableSpec: BaseSpec { } } + diff --git a/Tests/AlamofireRequestable/AMultipartUploadableSpec.swift b/Tests/AlamofireRequestable/AMultipartUploadableSpec.swift index 46fb614..ba7c9dc 100644 --- a/Tests/AlamofireRequestable/AMultipartUploadableSpec.swift +++ b/Tests/AlamofireRequestable/AMultipartUploadableSpec.swift @@ -14,7 +14,6 @@ import Alamofire class AMultipartUploadableSpec: BaseSpec { - static var prepareDelegateCalled = false static var startDelegateCalled = false override func spec() { @@ -39,12 +38,11 @@ class AMultipartUploadableSpec: BaseSpec { } expect(request.value(forHTTPHeaderField: "Authorization")) .to(equal("Basic dXNlcjpwYXNzd29yZA==")) - AMultipartUploadableSpec.prepareDelegateCalled = true return request } func didSend(_ request: Request, requestable: ARequestable) { - expect(request.request?.value(forHTTPHeaderField: "Authorization")) + expect(request.request?.value(forHTTPHeaderField: "Authorization")!) .to(equal("Basic dXNlcjpwYXNzd29yZA==")) AMultipartUploadableSpec.startDelegateCalled = true } @@ -54,10 +52,6 @@ class AMultipartUploadableSpec: BaseSpec { let request = Upload().request print(request.debugDescription) - - expect(AMultipartUploadableSpec.prepareDelegateCalled).to(beTrue()) - expect(AMultipartUploadableSpec.startDelegateCalled).to(beTrue()) - var uploadProgressValues: [Double] = [] var downloadProgressValues: [Double] = [] @@ -71,7 +65,10 @@ class AMultipartUploadableSpec: BaseSpec { downloadProgressValues.append(progress.fractionCompleted) } .responseJSON { response in - defer { done() } + defer { + expect(AMultipartUploadableSpec.startDelegateCalled).to(beTrue()) + done() + } // Then if let statusCode = response.response?.statusCode, @@ -85,8 +82,11 @@ class AMultipartUploadableSpec: BaseSpec { expect(response.error).to(beNil()) if let value = response.value as? [String: Any], - let data = value["data"] as? String { - expect(data).toNot(beEmpty()) + let form = value["form"] as? [String: Any], + let french = form["french"] as? String, + let japanese = form["japanese"] as? String { + expect(french).to(equal("français")) + expect(japanese).to(equal("日本語")) } else { fail("response value should not be nil") } @@ -124,3 +124,4 @@ class AMultipartUploadableSpec: BaseSpec { } } + diff --git a/Tests/AlamofireRequestable/ARequestableSpec.swift b/Tests/AlamofireRequestable/ARequestableSpec.swift index 0a47f90..0419855 100644 --- a/Tests/AlamofireRequestable/ARequestableSpec.swift +++ b/Tests/AlamofireRequestable/ARequestableSpec.swift @@ -14,7 +14,6 @@ import Alamofire class ARequestableSpec: BaseSpec { - static var prepareDelegateCalled = false static var startDelegateCalled = false override func spec() { @@ -33,7 +32,6 @@ class ARequestableSpec: BaseSpec { } expect(request.value(forHTTPHeaderField: "Authorization")) .to(equal("Basic dXNlcjpwYXNzd29yZA==")) - ARequestableSpec.prepareDelegateCalled = true return request } @@ -48,10 +46,6 @@ class ARequestableSpec: BaseSpec { let request = Service().request print(request.debugDescription) - - expect(ARequestableSpec.prepareDelegateCalled).to(beTrue()) - expect(ARequestableSpec.startDelegateCalled).to(beTrue()) - var progressValues: [Double] = [] // When @@ -61,7 +55,10 @@ class ARequestableSpec: BaseSpec { progressValues.append(progress.fractionCompleted) } .responseJSON { response in - defer { done() } + defer { + expect(ARequestableSpec.startDelegateCalled).to(beTrue()) + done() + } // Then if let statusCode = response.response?.statusCode, diff --git a/Tests/AlamofireRequestable/AStreamUploadableSpec.swift b/Tests/AlamofireRequestable/AStreamUploadableSpec.swift index 3d9ef60..b392e14 100644 --- a/Tests/AlamofireRequestable/AStreamUploadableSpec.swift +++ b/Tests/AlamofireRequestable/AStreamUploadableSpec.swift @@ -14,7 +14,6 @@ import Alamofire class AStreamUploadableSpec: BaseSpec { - static var prepareDelegateCalled = false static var startDelegateCalled = false override func spec() { @@ -34,12 +33,11 @@ class AStreamUploadableSpec: BaseSpec { } expect(request.value(forHTTPHeaderField: "Authorization")) .to(equal("Basic dXNlcjpwYXNzd29yZA==")) - AStreamUploadableSpec.prepareDelegateCalled = true return request } func didSend(_ request: Request, requestable: ARequestable) { - expect(request.request?.value(forHTTPHeaderField: "Authorization")) + expect(request.request?.value(forHTTPHeaderField: "Authorization")!) .to(equal("Basic dXNlcjpwYXNzd29yZA==")) AStreamUploadableSpec.startDelegateCalled = true } @@ -49,15 +47,15 @@ class AStreamUploadableSpec: BaseSpec { let request = Upload().request print(request.debugDescription) - - expect(AStreamUploadableSpec.prepareDelegateCalled).to(beTrue()) - expect(AStreamUploadableSpec.startDelegateCalled).to(beTrue()) - // When waitUntil(timeout: self.timeout) { done in + request .response { response in - defer { done() } + defer { + expect(AStreamUploadableSpec.startDelegateCalled).to(beTrue()) + done() + } // Then expect(response.request).toNot(beNil()) @@ -72,3 +70,4 @@ class AStreamUploadableSpec: BaseSpec { } } + diff --git a/Tests/Configuration/ResponseSerializerSpec.swift b/Tests/Configuration/ResponseSerializerSpec.swift index ac29e33..225e16b 100644 --- a/Tests/Configuration/ResponseSerializerSpec.swift +++ b/Tests/Configuration/ResponseSerializerSpec.swift @@ -45,13 +45,11 @@ class ResponseSerializerSpec: BaseSpec { struct Service: Requestable { typealias Response = Any - var responseSerializer: AnyResponseSerializer> = AnyResponseSerializer>.init(dataSerializer: { (request, response, data, error) -> Result in - return Result { try JSONResponseSerializer() - .serialize(request: request, - response: response, - data: data, - error: error) } + return Result { try JSONResponseSerializer().serialize(request: request, + response: response, + data: data, + error: error)} }) var path: String? = "get" @@ -88,15 +86,12 @@ class ResponseSerializerSpec: BaseSpec { } struct Service: Requestable { - typealias Response = HTTPBin - var responseSerializer: AnyResponseSerializer> = AnyResponseSerializer>.init(dataSerializer: { (request, response, data, error) -> Result in - return Result { try JSONDecodableResponseSerializer() - .serialize(request: request, - response: response, - data: data, - error: error) } + return Result { try JSONDecodableResponseSerializer().serialize(request: request, + response: response, + data: data, + error: error)} }) var path: String? = "get" diff --git a/Tests/Requestable/DownloadableSpec.swift b/Tests/Requestable/DownloadableSpec.swift index 17026b5..87a91f6 100644 --- a/Tests/Requestable/DownloadableSpec.swift +++ b/Tests/Requestable/DownloadableSpec.swift @@ -28,19 +28,16 @@ class DownloadableSpec: BaseSpec { waitUntil(timeout: self.timeout) { done in struct Request: Downloadable { - typealias Response = HTTPBin - var responseSerializer: AnyResponseSerializer> = AnyResponseSerializer>.init(dataSerializer: { (request, response, data, error) -> Result in - return Result { try JSONDecodableResponseSerializer() - .serialize(request: request, - response: response, - data: data, - error: error) } - }) - var path: String? = "get" var destination: DownloadRequest.Destination? = { _, _ in (BaseSpec.jsonFileURL, []) } + var responseSerializer: AnyResponseSerializer> = AnyResponseSerializer>.init(dataSerializer: { (request, response, data, error) -> Result in + return Result { try JSONDecodableResponseSerializer().serialize(request: request, + response: response, + data: data, + error: error)} + }) func request(_ request: DownloadOperation, didCompleteWithValue value: HTTPBin) { print("Completed") diff --git a/Tests/Requestable/MultipartUploadableSpec.swift b/Tests/Requestable/MultipartUploadableSpec.swift index f9a4b9b..477c574 100644 --- a/Tests/Requestable/MultipartUploadableSpec.swift +++ b/Tests/Requestable/MultipartUploadableSpec.swift @@ -33,15 +33,12 @@ class MultipartUploadableSpec: BaseSpec { } struct Upload: MultipartUploadable { - typealias Response = HTTPBin - var responseSerializer: AnyResponseSerializer> = AnyResponseSerializer>.init(dataSerializer: { (request, response, data, error) -> Result in - return Result { try JSONDecodableResponseSerializer() - .serialize(request: request, - response: response, - data: data, - error: error) } + return Result { try JSONDecodableResponseSerializer().serialize(request: request, + response: response, + data: data, + error: error)} }) var path: String? = "post" @@ -64,10 +61,10 @@ class MultipartUploadableSpec: BaseSpec { } } - let uploadable = Upload() + let request = Upload() // When - let operation = uploadable.execute() { response in + let operation = request.execute() { (response: DataResponse) in // Then if let statusCode = response.response?.statusCode, @@ -86,6 +83,7 @@ class MultipartUploadableSpec: BaseSpec { } else { fail("response value should not be nil") } + } operation.completionBlock = { diff --git a/Tests/Requestable/RequestableSpec.swift b/Tests/Requestable/RequestableSpec.swift index 9f5a572..600acb0 100644 --- a/Tests/Requestable/RequestableSpec.swift +++ b/Tests/Requestable/RequestableSpec.swift @@ -28,18 +28,15 @@ class RequestableSpec: BaseSpec { waitUntil(timeout: self.timeout) { done in struct Request: Requestable { - typealias Response = HTTPBin - - var responseSerializer: AnyResponseSerializer> = AnyResponseSerializer>.init(dataSerializer: { (request, response, data, error) -> Result in - return Result { try JSONDecodableResponseSerializer() - .serialize(request: request, - response: response, - data: data, - error: error) } - }) var path: String? = "get" + var responseSerializer: AnyResponseSerializer> = AnyResponseSerializer>.init(dataSerializer: { (request, response, data, error) -> Result in + return Result { try JSONDecodableResponseSerializer().serialize(request: request, + response: response, + data: data, + error: error)} + }) func request(_ request: RequestOperation, didCompleteWithValue value: HTTPBin) { RequestableSpec.successDelegateCalled = true