From 1d8e71f6c36d0fed01777b2aebbd184f2062150b Mon Sep 17 00:00:00 2001 From: Khoa Pham Date: Mon, 3 Oct 2016 22:41:31 +0200 Subject: [PATCH 01/17] Update to Swift 3 --- Compass.xcodeproj/project.pbxproj | 6 ++++++ Sources/Compass.swift | 20 ++++++++--------- Sources/Router.swift | 12 +++++------ Sources/String+Extensions.swift | 20 ++++++++--------- Sources/TypeAlias.swift | 4 ++-- Tests/Compass/CompassTests.swift | 36 +++++++++++++++---------------- Tests/Compass/Helpers.swift | 32 +++++++++++---------------- Tests/Compass/RouterTests.swift | 2 +- 8 files changed, 65 insertions(+), 67 deletions(-) diff --git a/Compass.xcodeproj/project.pbxproj b/Compass.xcodeproj/project.pbxproj index cd7a1c6..9fb3246 100644 --- a/Compass.xcodeproj/project.pbxproj +++ b/Compass.xcodeproj/project.pbxproj @@ -263,9 +263,11 @@ TargetAttributes = { D5B2E89E1C3A780C00C0327D = { CreatedOnToolsVersion = 7.2; + LastSwiftMigration = 0800; }; D5B2E8A81C3A780C00C0327D = { CreatedOnToolsVersion = 7.2; + LastSwiftMigration = 0800; }; D5C6293F1C3A7FAA007F7B7C = { CreatedOnToolsVersion = 7.2; @@ -495,6 +497,7 @@ PRODUCT_NAME = Compass; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; }; name = Debug; }; @@ -514,6 +517,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "no.hyper.Compass-iOS"; PRODUCT_NAME = Compass; SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; }; name = Release; }; @@ -527,6 +531,7 @@ PRODUCT_BUNDLE_IDENTIFIER = no.hyper.CompassTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; }; name = Debug; }; @@ -539,6 +544,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = no.hyper.CompassTests; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; }; name = Release; }; diff --git a/Sources/Compass.swift b/Sources/Compass.swift index 743296c..100b62b 100644 --- a/Sources/Compass.swift +++ b/Sources/Compass.swift @@ -8,7 +8,7 @@ public struct Compass { concreteMatchCount: Int, wildcardMatchCount: Int) - private static var internalScheme = "" + fileprivate static var internalScheme = "" public static var delimiter: String = ":" public static var scheme: String { @@ -18,16 +18,16 @@ public struct Compass { public static var routes = [String]() - public static func parse(url: NSURL, payload: Any? = nil) -> Location? { - let path = url.absoluteString.substringFromIndex(scheme.endIndex) + public static func parse(_ url: URL, payload: Any? = nil) -> Location? { + let path = url.absoluteString.substring(from: scheme.endIndex) - guard !(path.containsString("?") || path.containsString("#")) else { + guard !(path.contains("?") || path.contains("#")) else { return parseAsURL(url, payload: payload) } let results: [Result] = routes.flatMap { return findMatch($0, pathString: path) - }.sort { (r1: Result, r2: Result) in + }.sorted { (r1: Result, r2: Result) in if r1.concreteMatchCount == r2.concreteMatchCount { return r1.wildcardMatchCount > r2.wildcardMatchCount } @@ -42,10 +42,10 @@ public struct Compass { return nil } - static func parseAsURL(url: NSURL, payload: Any? = nil) -> Location? { + static func parseAsURL(_ url: URL, payload: Any? = nil) -> Location? { guard let route = url.host else { return nil } - let urlComponents = NSURLComponents(URL: url, resolvingAgainstBaseURL: false) + let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false) var arguments = [String : String]() urlComponents?.queryItems?.forEach { queryItem in @@ -59,7 +59,7 @@ public struct Compass { return Location(path: route, arguments: arguments, payload: payload) } - static func findMatch(routeString: String, pathString: String) -> Result? { + static func findMatch(_ routeString: String, pathString: String) -> Result? { let routes = routeString.split(delimiter) let paths = pathString.split(delimiter) @@ -94,8 +94,8 @@ public struct Compass { extension Compass { - public static func navigate(urn: String, scheme: String = Compass.scheme) { - guard let url = NSURL(string: "\(scheme)\(urn)") else { return } + public static func navigate(_ urn: String, scheme: String = Compass.scheme) { + guard let url = URL(string: "\(scheme)\(urn)") else { return } openURL(url) } } diff --git a/Sources/Router.swift b/Sources/Router.swift index 94891a2..127fce0 100644 --- a/Sources/Router.swift +++ b/Sources/Router.swift @@ -1,7 +1,7 @@ -public enum RouteError: ErrorType { - case NotFound - case InvalidArguments(Location) - case InvalidPayload(Location) +public enum RouteError: Error { + case notFound + case invalidArguments(Location) + case invalidPayload(Location) } public protocol Routable { @@ -11,7 +11,7 @@ public protocol Routable { public protocol ErrorRoutable { - func handle(routeError: ErrorType, from currentController: Controller) + func handle(_ routeError: Error, from currentController: Controller) } public struct Router: Routable { @@ -23,7 +23,7 @@ public struct Router: Routable { public func navigate(to location: Location, from currentController: Controller) { guard let route = routes[location.path] else { - errorRoute?.handle(RouteError.NotFound, from: currentController) + errorRoute?.handle(RouteError.notFound, from: currentController) return } diff --git a/Sources/String+Extensions.swift b/Sources/String+Extensions.swift index eacc3e9..ca2a50e 100644 --- a/Sources/String+Extensions.swift +++ b/Sources/String+Extensions.swift @@ -2,25 +2,25 @@ import Foundation extension String { - func split(delimiter: String) -> [String] { - let components = componentsSeparatedByString(delimiter) + func split(_ delimiter: String) -> [String] { + let components = self.components(separatedBy: delimiter) return components != [""] ? components : [] } - func replace(string: String, with withString: String) -> String { - return stringByReplacingOccurrencesOfString(string, withString: withString) + func replace(_ string: String, with withString: String) -> String { + return replacingOccurrences(of: string, with: withString) } func queryParameters() -> [String: String] { var parameters = [String: String]() - let separatorCharacters = NSCharacterSet(charactersInString: "&;") - self.componentsSeparatedByCharactersInSet(separatorCharacters).forEach { (pair) in + let separatorCharacters = CharacterSet(charactersIn: "&;") + self.components(separatedBy: separatorCharacters).forEach { (pair) in - if let equalSeparator = pair.rangeOfString("=") { - let name = pair.substringToIndex(equalSeparator.startIndex) - let value = pair.substringFromIndex(equalSeparator.startIndex.advancedBy(1)) - let cleaned = value.stringByRemovingPercentEncoding ?? value + if let equalSeparator = pair.range(of: "=") { + let name = pair.substring(to: equalSeparator.lowerBound) + let value = pair.substring(from: pair.index(equalSeparator.lowerBound, offsetBy: 1)) + let cleaned = value.removingPercentEncoding ?? value parameters[name] = cleaned } diff --git a/Sources/TypeAlias.swift b/Sources/TypeAlias.swift index 2fcabf7..4ff0df9 100644 --- a/Sources/TypeAlias.swift +++ b/Sources/TypeAlias.swift @@ -13,7 +13,7 @@ #else public typealias Controller = UIViewController - func openURL(URL: NSURL) { - UIApplication.sharedApplication().openURL(URL) + func openURL(_ URL: Foundation.URL) { + UIApplication.shared.openURL(URL) } #endif diff --git a/Tests/Compass/CompassTests.swift b/Tests/Compass/CompassTests.swift index 21a3fe0..3ea792d 100644 --- a/Tests/Compass/CompassTests.swift +++ b/Tests/Compass/CompassTests.swift @@ -29,7 +29,7 @@ class CompassTests: XCTestCase { func testParseArguments() { let url = NSURL(string: "compassTests://profile:testUser")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url as URL) else { XCTFail("Compass parsing failed") return } @@ -39,11 +39,11 @@ class CompassTests: XCTestCase { } func testParsePayload() { - let url = NSURL(string: "compassTests://profile:testUser")! + let url = URL(string: "compassTests://profile:testUser")! typealias Payload = (firstName: String, lastName: String) - guard let location = Compass.parse(url, payload: Payload(firstName: "foo", lastName: "bar")) else { + guard let location = Compass.parse(url as URL, payload: Payload(firstName: "foo", lastName: "bar")) else { XCTFail("Compass parsing failed") return } @@ -57,7 +57,7 @@ class CompassTests: XCTestCase { func testParseRouteConcreateMatchCount() { let url = NSURL(string: "compassTests://profile:admin")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url as URL) else { XCTFail("Compass parsing failed") return } @@ -69,7 +69,7 @@ class CompassTests: XCTestCase { func testParseRouteWildcardMatchCount() { let url = NSURL(string: "compassTests://profile:jack")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url as URL) else { XCTFail("Compass parsing failed") return } @@ -81,7 +81,7 @@ class CompassTests: XCTestCase { func testParseRouteSamePrefix() { let url = NSURL(string: "compassTests://user:list")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url as URL) else { XCTFail("Compass parsing failed") return } @@ -93,7 +93,7 @@ class CompassTests: XCTestCase { func testParseMultipleArguments() { let url = NSURL(string: "compassTests://user:list:1:admin")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url as URL) else { XCTFail("Compass parsing failed") return } @@ -106,7 +106,7 @@ class CompassTests: XCTestCase { func testParseMultipleArgumentsWithFirstWildcard() { let url = NSURL(string: "compassTests://12:user:list:1:admin")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url as URL) else { XCTFail("Compass parsing failed") return } @@ -120,7 +120,7 @@ class CompassTests: XCTestCase { func testParseWithoutArguments() { let url = NSURL(string: "compassTests://login")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url as URL) else { XCTFail("Compass parsing failed") return } @@ -132,7 +132,7 @@ class CompassTests: XCTestCase { func testParseRegularURLWithFragments() { let url = NSURL(string: "compassTests://callback/#access_token=IjvcgrkQk1p7TyJxKa26rzM1wBMFZW6XoHK4t5Gkt1xQLTN8l7ppR0H3EZXpoP0uLAN49oCDqTHsvnEV&token_type=Bearer&expires_in=3600")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url as URL) else { XCTFail("Compass parsing failed") return } @@ -147,7 +147,7 @@ class CompassTests: XCTestCase { func testParseRegularURLWithFragmentsAndGoogleOAuth2AccessToken() { let url = NSURL(string: "compassTests://callback/#access_token=ya29.Ci8nA1pNVMFffHkS5-sXooNGvTB9q8QPtoM56sWpipRyjhwwEiKyZxvRQTR8saqWzQ&token_type=Bearer&expires_in=3600")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url as URL) else { XCTFail("Compass parsing failed") return } @@ -162,7 +162,7 @@ class CompassTests: XCTestCase { func testParseRegularURLWithFragmentsAndAlternativeAccessToken() { let url = NSURL(string: "compassTests://callback/#access_token=ya29.Ci8nA1pNVMFffHkS5-sXooNGvTB9q8QPtoM56sWpipRyjhwwEiKyZxvRQTR8saqWzQ=&token_type=Bearer&expires_in=3600")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url as URL) else { XCTFail("Compass parsing failed") return } @@ -177,7 +177,7 @@ class CompassTests: XCTestCase { func testParseRegularURLWithSlashQuery() { let url = NSURL(string: "compassTests://callback/?access_token=Yo0OMrVZbRWNmgA6BT99hyuTUTNRGvqEEAQyeN1eslclzhFD0M8AidB4Z7Vs2NU8WoSNW0vYb961O38l&token_type=Bearer&expires_in=3600")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url as URL) else { XCTFail("Compass parsing failed") return } @@ -192,7 +192,7 @@ class CompassTests: XCTestCase { func testParseRegularURLWithSlashQueryAndGoogleOAuth2AccessToken() { let url = NSURL(string: "compassTests://callback/?access_token=ya29.Ci8nA1pNVMFffHkS5-sXooNGvTB9q8QPtoM56sWpipRyjhwwEiKyZxvRQTR8saqWzQ&token_type=Bearer&expires_in=3600")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url as URL) else { XCTFail("Compass parsing failed") return } @@ -207,7 +207,7 @@ class CompassTests: XCTestCase { func testParseRegularURLWithSlashQueryAndAlternativeAccessToken() { let url = NSURL(string: "compassTests://callback/?access_token=ya29.Ci8nA1pNVMFffHkS5-sXooNGvTB9q8QPtoM56sWpipRyjhwwEiKyZxvRQTR8saqWzQ=&token_type=Bearer&expires_in=3600")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url as URL) else { XCTFail("Compass parsing failed") return } @@ -222,7 +222,7 @@ class CompassTests: XCTestCase { func testParseRegularURLWithQuery() { let url = NSURL(string: "compassTests://callback?access_token=Yo0OMrVZbRWNmgA6BT99hyuTUTNRGvqEEAQyeN1eslclzhFD0M8AidB4Z7Vs2NU8WoSNW0vYb961O38l&token_type=Bearer&expires_in=3600")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url as URL) else { XCTFail("Compass parsing failed") return } @@ -237,7 +237,7 @@ class CompassTests: XCTestCase { func testParseRegularURLWithQueryAndGoogleOAuth2AccessToken() { let url = NSURL(string: "compassTests://callback?access_token=ya29.Ci8nA1pNVMFffHkS5-sXooNGvTB9q8QPtoM56sWpipRyjhwwEiKyZxvRQTR8saqWzQ&token_type=Bearer&expires_in=3600")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url as URL) else { XCTFail("Compass parsing failed") return } @@ -252,7 +252,7 @@ class CompassTests: XCTestCase { func testParseRegularURLWithQueryAndAlternativeAccessToken() { let url = NSURL(string: "compassTests://callback?access_token=ya29.Ci8nA1pNVMFffHkS5-sXooNGvTB9q8QPtoM56sWpipRyjhwwEiKyZxvRQTR8saqWzQ=&token_type=Bearer&expires_in=3600")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url as URL) else { XCTFail("Compass parsing failed") return } diff --git a/Tests/Compass/Helpers.swift b/Tests/Compass/Helpers.swift index 68e7061..ed652bf 100644 --- a/Tests/Compass/Helpers.swift +++ b/Tests/Compass/Helpers.swift @@ -14,46 +14,38 @@ class TestRoute: Routable { class ThrowableRoute: Routable { - enum Error: ErrorType { + enum InternalError: Error { case Unknown } func navigate(to location: Location, from currentController: Controller) throws { - throw Error.Unknown + throw InternalError.Unknown } } class ErrorRoute: ErrorRoutable { - var error: ErrorType? + var error: Error? - func handle(routeError: ErrorType, from currentController: Controller) { + func handle(_ routeError: Error, from currentController: Controller) { error = routeError } } // MARK: - Shuffle -extension CollectionType { +extension Array { /// Return a copy of `self` with its elements shuffled - func shuffle() -> [Generator.Element] { + func shuffle() -> [Element] { var list = Array(self) - list.shuffleInPlace() - return list - } -} - -extension MutableCollectionType where Index == Int { - /// Shuffle the elements of `self` in-place. - mutating func shuffleInPlace() { - // empty and single-element collections don't shuffle - if count < 2 { return } - for i in 0.. Date: Mon, 3 Oct 2016 22:42:32 +0200 Subject: [PATCH 02/17] Add swift-version --- .swift-version | 1 + 1 file changed, 1 insertion(+) create mode 100644 .swift-version diff --git a/.swift-version b/.swift-version new file mode 100644 index 0000000..9f55b2c --- /dev/null +++ b/.swift-version @@ -0,0 +1 @@ +3.0 From e720a027d42520f2931365ace5a6230ade63e564 Mon Sep 17 00:00:00 2001 From: Khoa Pham Date: Mon, 3 Oct 2016 22:44:16 +0200 Subject: [PATCH 03/17] Add swift 3 badge --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 631804a..86de747 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ [![License](https://img.shields.io/cocoapods/l/Compass.svg?style=flat)](http://cocoadocs.org/docsets/Compass) [![Platform](https://img.shields.io/cocoapods/p/Compass.svg?style=flat)](http://cocoadocs.org/docsets/Compass) [![CI Status](http://img.shields.io/travis/hyperoslo/Compass.svg?style=flat)](https://travis-ci.org/hyperoslo/Compass) +![Swift](https://img.shields.io/badge/%20in-swift%203.0-orange.svg) Compass helps you setup a central navigation system for your application. This has many benefits, one of them being that controllers can now be From 9bf294c527842c8cf3d3a70d95f4920cba94a637 Mon Sep 17 00:00:00 2001 From: Khoa Pham Date: Mon, 3 Oct 2016 22:46:44 +0200 Subject: [PATCH 04/17] Use URL instead of NSURL --- Tests/Compass/CompassTests.swift | 66 ++++++++++++++++---------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/Tests/Compass/CompassTests.swift b/Tests/Compass/CompassTests.swift index 3ea792d..b66cb9b 100644 --- a/Tests/Compass/CompassTests.swift +++ b/Tests/Compass/CompassTests.swift @@ -27,9 +27,9 @@ class CompassTests: XCTestCase { } func testParseArguments() { - let url = NSURL(string: "compassTests://profile:testUser")! + let url = URL(string: "compassTests://profile:testUser")! - guard let location = Compass.parse(url as URL) else { + guard let location = Compass.parse(url) else { XCTFail("Compass parsing failed") return } @@ -43,7 +43,7 @@ class CompassTests: XCTestCase { typealias Payload = (firstName: String, lastName: String) - guard let location = Compass.parse(url as URL, payload: Payload(firstName: "foo", lastName: "bar")) else { + guard let location = Compass.parse(url, payload: Payload(firstName: "foo", lastName: "bar")) else { XCTFail("Compass parsing failed") return } @@ -55,9 +55,9 @@ class CompassTests: XCTestCase { } func testParseRouteConcreateMatchCount() { - let url = NSURL(string: "compassTests://profile:admin")! + let url = URL(string: "compassTests://profile:admin")! - guard let location = Compass.parse(url as URL) else { + guard let location = Compass.parse(url) else { XCTFail("Compass parsing failed") return } @@ -67,9 +67,9 @@ class CompassTests: XCTestCase { } func testParseRouteWildcardMatchCount() { - let url = NSURL(string: "compassTests://profile:jack")! + let url = URL(string: "compassTests://profile:jack")! - guard let location = Compass.parse(url as URL) else { + guard let location = Compass.parse(url) else { XCTFail("Compass parsing failed") return } @@ -79,9 +79,9 @@ class CompassTests: XCTestCase { } func testParseRouteSamePrefix() { - let url = NSURL(string: "compassTests://user:list")! + let url = URL(string: "compassTests://user:list")! - guard let location = Compass.parse(url as URL) else { + guard let location = Compass.parse(url) else { XCTFail("Compass parsing failed") return } @@ -91,9 +91,9 @@ class CompassTests: XCTestCase { } func testParseMultipleArguments() { - let url = NSURL(string: "compassTests://user:list:1:admin")! + let url = URL(string: "compassTests://user:list:1:admin")! - guard let location = Compass.parse(url as URL) else { + guard let location = Compass.parse(url) else { XCTFail("Compass parsing failed") return } @@ -104,9 +104,9 @@ class CompassTests: XCTestCase { } func testParseMultipleArgumentsWithFirstWildcard() { - let url = NSURL(string: "compassTests://12:user:list:1:admin")! + let url = URL(string: "compassTests://12:user:list:1:admin")! - guard let location = Compass.parse(url as URL) else { + guard let location = Compass.parse(url) else { XCTFail("Compass parsing failed") return } @@ -118,9 +118,9 @@ class CompassTests: XCTestCase { } func testParseWithoutArguments() { - let url = NSURL(string: "compassTests://login")! + let url = URL(string: "compassTests://login")! - guard let location = Compass.parse(url as URL) else { + guard let location = Compass.parse(url) else { XCTFail("Compass parsing failed") return } @@ -130,9 +130,9 @@ class CompassTests: XCTestCase { } func testParseRegularURLWithFragments() { - let url = NSURL(string: "compassTests://callback/#access_token=IjvcgrkQk1p7TyJxKa26rzM1wBMFZW6XoHK4t5Gkt1xQLTN8l7ppR0H3EZXpoP0uLAN49oCDqTHsvnEV&token_type=Bearer&expires_in=3600")! + let url = URL(string: "compassTests://callback/#access_token=IjvcgrkQk1p7TyJxKa26rzM1wBMFZW6XoHK4t5Gkt1xQLTN8l7ppR0H3EZXpoP0uLAN49oCDqTHsvnEV&token_type=Bearer&expires_in=3600")! - guard let location = Compass.parse(url as URL) else { + guard let location = Compass.parse(url) else { XCTFail("Compass parsing failed") return } @@ -145,9 +145,9 @@ class CompassTests: XCTestCase { } func testParseRegularURLWithFragmentsAndGoogleOAuth2AccessToken() { - let url = NSURL(string: "compassTests://callback/#access_token=ya29.Ci8nA1pNVMFffHkS5-sXooNGvTB9q8QPtoM56sWpipRyjhwwEiKyZxvRQTR8saqWzQ&token_type=Bearer&expires_in=3600")! + let url = URL(string: "compassTests://callback/#access_token=ya29.Ci8nA1pNVMFffHkS5-sXooNGvTB9q8QPtoM56sWpipRyjhwwEiKyZxvRQTR8saqWzQ&token_type=Bearer&expires_in=3600")! - guard let location = Compass.parse(url as URL) else { + guard let location = Compass.parse(url) else { XCTFail("Compass parsing failed") return } @@ -160,9 +160,9 @@ class CompassTests: XCTestCase { } func testParseRegularURLWithFragmentsAndAlternativeAccessToken() { - let url = NSURL(string: "compassTests://callback/#access_token=ya29.Ci8nA1pNVMFffHkS5-sXooNGvTB9q8QPtoM56sWpipRyjhwwEiKyZxvRQTR8saqWzQ=&token_type=Bearer&expires_in=3600")! + let url = URL(string: "compassTests://callback/#access_token=ya29.Ci8nA1pNVMFffHkS5-sXooNGvTB9q8QPtoM56sWpipRyjhwwEiKyZxvRQTR8saqWzQ=&token_type=Bearer&expires_in=3600")! - guard let location = Compass.parse(url as URL) else { + guard let location = Compass.parse(url) else { XCTFail("Compass parsing failed") return } @@ -175,9 +175,9 @@ class CompassTests: XCTestCase { } func testParseRegularURLWithSlashQuery() { - let url = NSURL(string: "compassTests://callback/?access_token=Yo0OMrVZbRWNmgA6BT99hyuTUTNRGvqEEAQyeN1eslclzhFD0M8AidB4Z7Vs2NU8WoSNW0vYb961O38l&token_type=Bearer&expires_in=3600")! + let url = URL(string: "compassTests://callback/?access_token=Yo0OMrVZbRWNmgA6BT99hyuTUTNRGvqEEAQyeN1eslclzhFD0M8AidB4Z7Vs2NU8WoSNW0vYb961O38l&token_type=Bearer&expires_in=3600")! - guard let location = Compass.parse(url as URL) else { + guard let location = Compass.parse(url) else { XCTFail("Compass parsing failed") return } @@ -190,9 +190,9 @@ class CompassTests: XCTestCase { } func testParseRegularURLWithSlashQueryAndGoogleOAuth2AccessToken() { - let url = NSURL(string: "compassTests://callback/?access_token=ya29.Ci8nA1pNVMFffHkS5-sXooNGvTB9q8QPtoM56sWpipRyjhwwEiKyZxvRQTR8saqWzQ&token_type=Bearer&expires_in=3600")! + let url = URL(string: "compassTests://callback/?access_token=ya29.Ci8nA1pNVMFffHkS5-sXooNGvTB9q8QPtoM56sWpipRyjhwwEiKyZxvRQTR8saqWzQ&token_type=Bearer&expires_in=3600")! - guard let location = Compass.parse(url as URL) else { + guard let location = Compass.parse(url) else { XCTFail("Compass parsing failed") return } @@ -205,9 +205,9 @@ class CompassTests: XCTestCase { } func testParseRegularURLWithSlashQueryAndAlternativeAccessToken() { - let url = NSURL(string: "compassTests://callback/?access_token=ya29.Ci8nA1pNVMFffHkS5-sXooNGvTB9q8QPtoM56sWpipRyjhwwEiKyZxvRQTR8saqWzQ=&token_type=Bearer&expires_in=3600")! + let url = URL(string: "compassTests://callback/?access_token=ya29.Ci8nA1pNVMFffHkS5-sXooNGvTB9q8QPtoM56sWpipRyjhwwEiKyZxvRQTR8saqWzQ=&token_type=Bearer&expires_in=3600")! - guard let location = Compass.parse(url as URL) else { + guard let location = Compass.parse(url) else { XCTFail("Compass parsing failed") return } @@ -220,9 +220,9 @@ class CompassTests: XCTestCase { } func testParseRegularURLWithQuery() { - let url = NSURL(string: "compassTests://callback?access_token=Yo0OMrVZbRWNmgA6BT99hyuTUTNRGvqEEAQyeN1eslclzhFD0M8AidB4Z7Vs2NU8WoSNW0vYb961O38l&token_type=Bearer&expires_in=3600")! + let url = URL(string: "compassTests://callback?access_token=Yo0OMrVZbRWNmgA6BT99hyuTUTNRGvqEEAQyeN1eslclzhFD0M8AidB4Z7Vs2NU8WoSNW0vYb961O38l&token_type=Bearer&expires_in=3600")! - guard let location = Compass.parse(url as URL) else { + guard let location = Compass.parse(url) else { XCTFail("Compass parsing failed") return } @@ -235,9 +235,9 @@ class CompassTests: XCTestCase { } func testParseRegularURLWithQueryAndGoogleOAuth2AccessToken() { - let url = NSURL(string: "compassTests://callback?access_token=ya29.Ci8nA1pNVMFffHkS5-sXooNGvTB9q8QPtoM56sWpipRyjhwwEiKyZxvRQTR8saqWzQ&token_type=Bearer&expires_in=3600")! + let url = URL(string: "compassTests://callback?access_token=ya29.Ci8nA1pNVMFffHkS5-sXooNGvTB9q8QPtoM56sWpipRyjhwwEiKyZxvRQTR8saqWzQ&token_type=Bearer&expires_in=3600")! - guard let location = Compass.parse(url as URL) else { + guard let location = Compass.parse(url) else { XCTFail("Compass parsing failed") return } @@ -250,9 +250,9 @@ class CompassTests: XCTestCase { } func testParseRegularURLWithQueryAndAlternativeAccessToken() { - let url = NSURL(string: "compassTests://callback?access_token=ya29.Ci8nA1pNVMFffHkS5-sXooNGvTB9q8QPtoM56sWpipRyjhwwEiKyZxvRQTR8saqWzQ=&token_type=Bearer&expires_in=3600")! + let url = URL(string: "compassTests://callback?access_token=ya29.Ci8nA1pNVMFffHkS5-sXooNGvTB9q8QPtoM56sWpipRyjhwwEiKyZxvRQTR8saqWzQ=&token_type=Bearer&expires_in=3600")! - guard let location = Compass.parse(url as URL) else { + guard let location = Compass.parse(url) else { XCTFail("Compass parsing failed") return } From 16a3924b909917264125970080ca17d8d068b2bd Mon Sep 17 00:00:00 2001 From: Khoa Pham Date: Mon, 3 Oct 2016 22:50:52 +0200 Subject: [PATCH 05/17] Update Mac target --- Compass.xcodeproj/project.pbxproj | 4 ++++ Sources/TypeAlias.swift | 8 ++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Compass.xcodeproj/project.pbxproj b/Compass.xcodeproj/project.pbxproj index 9fb3246..37c03bf 100644 --- a/Compass.xcodeproj/project.pbxproj +++ b/Compass.xcodeproj/project.pbxproj @@ -569,6 +569,7 @@ SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; }; name = Debug; }; @@ -592,6 +593,7 @@ PRODUCT_NAME = Compass; SDKROOT = macosx; SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; }; name = Release; }; @@ -607,6 +609,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "no.hyper.Compass-MacTests"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; + SWIFT_VERSION = 3.0; }; name = Debug; }; @@ -622,6 +625,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "no.hyper.Compass-MacTests"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; + SWIFT_VERSION = 3.0; }; name = Release; }; diff --git a/Sources/TypeAlias.swift b/Sources/TypeAlias.swift index 4ff0df9..a3044cd 100644 --- a/Sources/TypeAlias.swift +++ b/Sources/TypeAlias.swift @@ -7,13 +7,13 @@ #if os(OSX) public typealias Controller = NSViewController - func openURL(URL: NSURL) { - NSWorkspace.sharedWorkspace().openURL(URL) + func openURL(_ url: URL) { + NSWorkspace.shared().open(url) } #else public typealias Controller = UIViewController - func openURL(_ URL: Foundation.URL) { - UIApplication.shared.openURL(URL) + func openURL(_ url: Foundation.URL) { + UIApplication.shared.openURL(url) } #endif From a4af7a2ebd09710a7eb30f290d02699a8e5704f0 Mon Sep 17 00:00:00 2001 From: Khoa Pham Date: Mon, 3 Oct 2016 22:55:03 +0200 Subject: [PATCH 06/17] Update travis --- .travis.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 38a8813..e6ceb9e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,6 @@ -os: - - osx -osx_image: xcode7.3 +osx_image: xcode8 language: objective-c + install: - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then ./swiftlint.sh; fi script: From d8764b1aff2ac01e2fb324ed26c0bc369085e1b7 Mon Sep 17 00:00:00 2001 From: Khoa Pham Date: Mon, 3 Oct 2016 23:03:44 +0200 Subject: [PATCH 07/17] Add platform to xcodebuild --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index e6ceb9e..d6f23d4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ install: - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then ./swiftlint.sh; fi script: - xcodebuild clean build -project Compass.xcodeproj -scheme Compass-iOS -sdk iphonesimulator - - xcodebuild test -project Compass.xcodeproj -scheme Compass-iOS -sdk iphonesimulator + - xcodebuild test -project Compass.xcodeproj -scheme "Compass-iOS" -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 6,OS=10.0' - xcodebuild clean build -project Compass.xcodeproj -scheme Compass-Mac -sdk macosx - xcodebuild test -project Compass.xcodeproj -scheme Compass-Mac -sdk macosx notifications: From 92a40ff895bef1a7b58d68f4686083f4b6c702ab Mon Sep 17 00:00:00 2001 From: Khoa Pham Date: Tue, 4 Oct 2016 21:31:57 +0200 Subject: [PATCH 08/17] Use param routeError for handle --- Sources/Router.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Sources/Router.swift b/Sources/Router.swift index 127fce0..f2dc7e3 100644 --- a/Sources/Router.swift +++ b/Sources/Router.swift @@ -11,7 +11,7 @@ public protocol Routable { public protocol ErrorRoutable { - func handle(_ routeError: Error, from currentController: Controller) + func handle(routeError error: Error, from currentController: Controller) } public struct Router: Routable { @@ -23,14 +23,14 @@ public struct Router: Routable { public func navigate(to location: Location, from currentController: Controller) { guard let route = routes[location.path] else { - errorRoute?.handle(RouteError.notFound, from: currentController) + errorRoute?.handle(routeError: RouteError.notFound, from: currentController) return } do { try route.navigate(to: location, from: currentController) } catch { - errorRoute?.handle(error, from: currentController) + errorRoute?.handle(routeError: error, from: currentController) } } } From a3e7741ef55e2da45f002df8e061f1bf4fb1b4db Mon Sep 17 00:00:00 2001 From: Khoa Pham Date: Tue, 4 Oct 2016 21:34:39 +0200 Subject: [PATCH 09/17] Use open with url as param --- Sources/Compass.swift | 4 ++-- Sources/TypeAlias.swift | 4 ++-- Tests/Compass/Helpers.swift | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Sources/Compass.swift b/Sources/Compass.swift index 100b62b..40f6d95 100644 --- a/Sources/Compass.swift +++ b/Sources/Compass.swift @@ -94,8 +94,8 @@ public struct Compass { extension Compass { - public static func navigate(_ urn: String, scheme: String = Compass.scheme) { + public static func navigate(to urn: String, scheme: String = Compass.scheme) { guard let url = URL(string: "\(scheme)\(urn)") else { return } - openURL(url) + open(url: url) } } diff --git a/Sources/TypeAlias.swift b/Sources/TypeAlias.swift index a3044cd..f845dc7 100644 --- a/Sources/TypeAlias.swift +++ b/Sources/TypeAlias.swift @@ -7,13 +7,13 @@ #if os(OSX) public typealias Controller = NSViewController - func openURL(_ url: URL) { + func open(url: URL) { NSWorkspace.shared().open(url) } #else public typealias Controller = UIViewController - func openURL(_ url: Foundation.URL) { + func open(url: Foundation.URL) { UIApplication.shared.openURL(url) } #endif diff --git a/Tests/Compass/Helpers.swift b/Tests/Compass/Helpers.swift index ed652bf..487b333 100644 --- a/Tests/Compass/Helpers.swift +++ b/Tests/Compass/Helpers.swift @@ -27,8 +27,8 @@ class ErrorRoute: ErrorRoutable { var error: Error? - func handle(_ routeError: Error, from currentController: Controller) { - error = routeError + func handle(routeError error: Error, from currentController: Controller) { + self.error = error } } From 39f8d464041fe489805057a5410e6fe90575cf83 Mon Sep 17 00:00:00 2001 From: Khoa Pham Date: Tue, 4 Oct 2016 21:37:46 +0200 Subject: [PATCH 10/17] Remove Foundation namespace --- Sources/TypeAlias.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/TypeAlias.swift b/Sources/TypeAlias.swift index f845dc7..4ab87fd 100644 --- a/Sources/TypeAlias.swift +++ b/Sources/TypeAlias.swift @@ -13,7 +13,7 @@ #else public typealias Controller = UIViewController - func open(url: Foundation.URL) { + func open(url: URL) { UIApplication.shared.openURL(url) } #endif From ebbafc3b650c5848095ac10536b90c2ead1e692f Mon Sep 17 00:00:00 2001 From: Khoa Pham Date: Tue, 4 Oct 2016 21:44:46 +0200 Subject: [PATCH 11/17] Rename to parseAsUrl --- Sources/Compass.swift | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Sources/Compass.swift b/Sources/Compass.swift index 40f6d95..eb37989 100644 --- a/Sources/Compass.swift +++ b/Sources/Compass.swift @@ -22,17 +22,17 @@ public struct Compass { let path = url.absoluteString.substring(from: scheme.endIndex) guard !(path.contains("?") || path.contains("#")) else { - return parseAsURL(url, payload: payload) + return parseAsUrl(url, payload: payload) } let results: [Result] = routes.flatMap { return findMatch($0, pathString: path) - }.sorted { (r1: Result, r2: Result) in - if r1.concreteMatchCount == r2.concreteMatchCount { - return r1.wildcardMatchCount > r2.wildcardMatchCount - } + }.sorted { (r1: Result, r2: Result) in + if r1.concreteMatchCount == r2.concreteMatchCount { + return r1.wildcardMatchCount > r2.wildcardMatchCount + } - return r1.concreteMatchCount > r2.concreteMatchCount + return r1.concreteMatchCount > r2.concreteMatchCount } if let result = results.first { @@ -42,7 +42,7 @@ public struct Compass { return nil } - static func parseAsURL(_ url: URL, payload: Any? = nil) -> Location? { + static func parseAsUrl(_ url: URL, payload: Any? = nil) -> Location? { guard let route = url.host else { return nil } let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false) From 51eb803256d75fd27b139dcb91755cb4dc9f8bc1 Mon Sep 17 00:00:00 2001 From: Khoa Pham Date: Wed, 5 Oct 2016 22:52:29 +0200 Subject: [PATCH 12/17] Make url parameter --- Sources/Compass.swift | 2 +- Tests/Compass/CompassTests.swift | 34 ++++++++++++++++---------------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Sources/Compass.swift b/Sources/Compass.swift index eb37989..108f464 100644 --- a/Sources/Compass.swift +++ b/Sources/Compass.swift @@ -18,7 +18,7 @@ public struct Compass { public static var routes = [String]() - public static func parse(_ url: URL, payload: Any? = nil) -> Location? { + public static func parse(url: URL, payload: Any? = nil) -> Location? { let path = url.absoluteString.substring(from: scheme.endIndex) guard !(path.contains("?") || path.contains("#")) else { diff --git a/Tests/Compass/CompassTests.swift b/Tests/Compass/CompassTests.swift index b66cb9b..38a127c 100644 --- a/Tests/Compass/CompassTests.swift +++ b/Tests/Compass/CompassTests.swift @@ -29,7 +29,7 @@ class CompassTests: XCTestCase { func testParseArguments() { let url = URL(string: "compassTests://profile:testUser")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url: url) else { XCTFail("Compass parsing failed") return } @@ -43,7 +43,7 @@ class CompassTests: XCTestCase { typealias Payload = (firstName: String, lastName: String) - guard let location = Compass.parse(url, payload: Payload(firstName: "foo", lastName: "bar")) else { + guard let location = Compass.parse(url: url, payload: Payload(firstName: "foo", lastName: "bar")) else { XCTFail("Compass parsing failed") return } @@ -57,7 +57,7 @@ class CompassTests: XCTestCase { func testParseRouteConcreateMatchCount() { let url = URL(string: "compassTests://profile:admin")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url: url) else { XCTFail("Compass parsing failed") return } @@ -69,7 +69,7 @@ class CompassTests: XCTestCase { func testParseRouteWildcardMatchCount() { let url = URL(string: "compassTests://profile:jack")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url: url) else { XCTFail("Compass parsing failed") return } @@ -81,7 +81,7 @@ class CompassTests: XCTestCase { func testParseRouteSamePrefix() { let url = URL(string: "compassTests://user:list")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url: url) else { XCTFail("Compass parsing failed") return } @@ -93,7 +93,7 @@ class CompassTests: XCTestCase { func testParseMultipleArguments() { let url = URL(string: "compassTests://user:list:1:admin")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url: url) else { XCTFail("Compass parsing failed") return } @@ -106,7 +106,7 @@ class CompassTests: XCTestCase { func testParseMultipleArgumentsWithFirstWildcard() { let url = URL(string: "compassTests://12:user:list:1:admin")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url: url) else { XCTFail("Compass parsing failed") return } @@ -120,7 +120,7 @@ class CompassTests: XCTestCase { func testParseWithoutArguments() { let url = URL(string: "compassTests://login")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url: url) else { XCTFail("Compass parsing failed") return } @@ -132,7 +132,7 @@ class CompassTests: XCTestCase { func testParseRegularURLWithFragments() { let url = URL(string: "compassTests://callback/#access_token=IjvcgrkQk1p7TyJxKa26rzM1wBMFZW6XoHK4t5Gkt1xQLTN8l7ppR0H3EZXpoP0uLAN49oCDqTHsvnEV&token_type=Bearer&expires_in=3600")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url: url) else { XCTFail("Compass parsing failed") return } @@ -147,7 +147,7 @@ class CompassTests: XCTestCase { func testParseRegularURLWithFragmentsAndGoogleOAuth2AccessToken() { let url = URL(string: "compassTests://callback/#access_token=ya29.Ci8nA1pNVMFffHkS5-sXooNGvTB9q8QPtoM56sWpipRyjhwwEiKyZxvRQTR8saqWzQ&token_type=Bearer&expires_in=3600")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url: url) else { XCTFail("Compass parsing failed") return } @@ -162,7 +162,7 @@ class CompassTests: XCTestCase { func testParseRegularURLWithFragmentsAndAlternativeAccessToken() { let url = URL(string: "compassTests://callback/#access_token=ya29.Ci8nA1pNVMFffHkS5-sXooNGvTB9q8QPtoM56sWpipRyjhwwEiKyZxvRQTR8saqWzQ=&token_type=Bearer&expires_in=3600")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url: url) else { XCTFail("Compass parsing failed") return } @@ -177,7 +177,7 @@ class CompassTests: XCTestCase { func testParseRegularURLWithSlashQuery() { let url = URL(string: "compassTests://callback/?access_token=Yo0OMrVZbRWNmgA6BT99hyuTUTNRGvqEEAQyeN1eslclzhFD0M8AidB4Z7Vs2NU8WoSNW0vYb961O38l&token_type=Bearer&expires_in=3600")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url: url) else { XCTFail("Compass parsing failed") return } @@ -192,7 +192,7 @@ class CompassTests: XCTestCase { func testParseRegularURLWithSlashQueryAndGoogleOAuth2AccessToken() { let url = URL(string: "compassTests://callback/?access_token=ya29.Ci8nA1pNVMFffHkS5-sXooNGvTB9q8QPtoM56sWpipRyjhwwEiKyZxvRQTR8saqWzQ&token_type=Bearer&expires_in=3600")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url: url) else { XCTFail("Compass parsing failed") return } @@ -207,7 +207,7 @@ class CompassTests: XCTestCase { func testParseRegularURLWithSlashQueryAndAlternativeAccessToken() { let url = URL(string: "compassTests://callback/?access_token=ya29.Ci8nA1pNVMFffHkS5-sXooNGvTB9q8QPtoM56sWpipRyjhwwEiKyZxvRQTR8saqWzQ=&token_type=Bearer&expires_in=3600")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url: url) else { XCTFail("Compass parsing failed") return } @@ -222,7 +222,7 @@ class CompassTests: XCTestCase { func testParseRegularURLWithQuery() { let url = URL(string: "compassTests://callback?access_token=Yo0OMrVZbRWNmgA6BT99hyuTUTNRGvqEEAQyeN1eslclzhFD0M8AidB4Z7Vs2NU8WoSNW0vYb961O38l&token_type=Bearer&expires_in=3600")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url: url) else { XCTFail("Compass parsing failed") return } @@ -237,7 +237,7 @@ class CompassTests: XCTestCase { func testParseRegularURLWithQueryAndGoogleOAuth2AccessToken() { let url = URL(string: "compassTests://callback?access_token=ya29.Ci8nA1pNVMFffHkS5-sXooNGvTB9q8QPtoM56sWpipRyjhwwEiKyZxvRQTR8saqWzQ&token_type=Bearer&expires_in=3600")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url: url) else { XCTFail("Compass parsing failed") return } @@ -252,7 +252,7 @@ class CompassTests: XCTestCase { func testParseRegularURLWithQueryAndAlternativeAccessToken() { let url = URL(string: "compassTests://callback?access_token=ya29.Ci8nA1pNVMFffHkS5-sXooNGvTB9q8QPtoM56sWpipRyjhwwEiKyZxvRQTR8saqWzQ=&token_type=Bearer&expires_in=3600")! - guard let location = Compass.parse(url) else { + guard let location = Compass.parse(url: url) else { XCTFail("Compass parsing failed") return } From f585b1230a37b0ca9f648dce64c54f82eed3b35f Mon Sep 17 00:00:00 2001 From: Khoa Pham Date: Wed, 5 Oct 2016 22:56:24 +0200 Subject: [PATCH 13/17] Rename to parseComponents. Make routeString external parameter --- Sources/Compass.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Sources/Compass.swift b/Sources/Compass.swift index 108f464..989c4d8 100644 --- a/Sources/Compass.swift +++ b/Sources/Compass.swift @@ -22,11 +22,11 @@ public struct Compass { let path = url.absoluteString.substring(from: scheme.endIndex) guard !(path.contains("?") || path.contains("#")) else { - return parseAsUrl(url, payload: payload) + return parseComponents(url: url, payload: payload) } let results: [Result] = routes.flatMap { - return findMatch($0, pathString: path) + return findMatch(routeString: $0, pathString: path) }.sorted { (r1: Result, r2: Result) in if r1.concreteMatchCount == r2.concreteMatchCount { return r1.wildcardMatchCount > r2.wildcardMatchCount @@ -42,7 +42,7 @@ public struct Compass { return nil } - static func parseAsUrl(_ url: URL, payload: Any? = nil) -> Location? { + static func parseComponents(url: URL, payload: Any? = nil) -> Location? { guard let route = url.host else { return nil } let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false) @@ -59,7 +59,7 @@ public struct Compass { return Location(path: route, arguments: arguments, payload: payload) } - static func findMatch(_ routeString: String, pathString: String) -> Result? { + static func findMatch(routeString: String, pathString: String) -> Result? { let routes = routeString.split(delimiter) let paths = pathString.split(delimiter) From ca0909a87d0066048e5c47516176ad7efa247d08 Mon Sep 17 00:00:00 2001 From: Christoffer Winterkvist Date: Thu, 6 Oct 2016 07:37:07 +0200 Subject: [PATCH 14/17] Add s.pod_target_xcconfig = { 'SWIFT_VERSION' => '3.0' } --- Compass.podspec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Compass.podspec b/Compass.podspec index 2334e6b..473d9f0 100644 --- a/Compass.podspec +++ b/Compass.podspec @@ -15,4 +15,6 @@ Pod::Spec.new do |s| s.source_files = 'Sources/**/*' s.frameworks = 'Foundation' + + s.pod_target_xcconfig = { 'SWIFT_VERSION' => '3.0' } end From 76bb282d0145b87ef9e0bfd0de7b3a7852ab3edf Mon Sep 17 00:00:00 2001 From: Khoa Pham Date: Thu, 6 Oct 2016 10:11:32 +0200 Subject: [PATCH 15/17] Use replacingOccurrences --- Sources/Compass.swift | 3 ++- Sources/String+Extensions.swift | 4 ---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/Sources/Compass.swift b/Sources/Compass.swift index 989c4d8..88d421a 100644 --- a/Sources/Compass.swift +++ b/Sources/Compass.swift @@ -71,7 +71,8 @@ public struct Compass { for (route, path) in zip(routes, paths) { if route.hasPrefix("{") { - let key = route.replace("{", with: "").replace("}", with: "") + let key = route.replacingOccurrences(of: "{", with: "") + .replacingOccurrences(of: "}", with: "") arguments[key] = path wildcardMatchCount += 1 diff --git a/Sources/String+Extensions.swift b/Sources/String+Extensions.swift index ca2a50e..726e51c 100644 --- a/Sources/String+Extensions.swift +++ b/Sources/String+Extensions.swift @@ -7,10 +7,6 @@ extension String { return components != [""] ? components : [] } - func replace(_ string: String, with withString: String) -> String { - return replacingOccurrences(of: string, with: withString) - } - func queryParameters() -> [String: String] { var parameters = [String: String]() From 92e20f7a569f32b5d71eed4639e7062d2f0f03df Mon Sep 17 00:00:00 2001 From: Christoffer Winterkvist Date: Mon, 10 Oct 2016 15:24:35 +0200 Subject: [PATCH 16/17] Change Controller to CurrentController --- Sources/Router.swift | 6 +++--- Sources/TypeAlias.swift | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Sources/Router.swift b/Sources/Router.swift index f2dc7e3..26ccefe 100644 --- a/Sources/Router.swift +++ b/Sources/Router.swift @@ -6,12 +6,12 @@ public enum RouteError: Error { public protocol Routable { - func navigate(to location: Location, from currentController: Controller) throws + func navigate(to location: Location, from currentController: CurrentController) throws } public protocol ErrorRoutable { - func handle(routeError error: Error, from currentController: Controller) + func handle(routeError error: Error, from currentController: CurrentController) } public struct Router: Routable { @@ -21,7 +21,7 @@ public struct Router: Routable { public init() {} - public func navigate(to location: Location, from currentController: Controller) { + public func navigate(to location: Location, from currentController: CurrentController) { guard let route = routes[location.path] else { errorRoute?.handle(routeError: RouteError.notFound, from: currentController) return diff --git a/Sources/TypeAlias.swift b/Sources/TypeAlias.swift index 4ab87fd..00b8f50 100644 --- a/Sources/TypeAlias.swift +++ b/Sources/TypeAlias.swift @@ -5,13 +5,13 @@ #endif #if os(OSX) - public typealias Controller = NSViewController + public typealias CurrentController = NSViewController func open(url: URL) { NSWorkspace.shared().open(url) } #else - public typealias Controller = UIViewController + public typealias CurrentController = UIViewController func open(url: URL) { UIApplication.shared.openURL(url) From 89f4e49c67483d4b7951279d1829ba47876d5ddb Mon Sep 17 00:00:00 2001 From: Christoffer Winterkvist Date: Mon, 10 Oct 2016 15:25:28 +0200 Subject: [PATCH 17/17] Fix tests --- Tests/Compass/Helpers.swift | 6 +++--- Tests/Compass/RouterTests.swift | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Tests/Compass/Helpers.swift b/Tests/Compass/Helpers.swift index 487b333..2585b38 100644 --- a/Tests/Compass/Helpers.swift +++ b/Tests/Compass/Helpers.swift @@ -7,7 +7,7 @@ class TestRoute: Routable { var resolved = false - func navigate(to location: Location, from currentController: Controller) throws { + func navigate(to location: Location, from currentController: CurrentController) throws { resolved = true } } @@ -18,7 +18,7 @@ class ThrowableRoute: Routable { case Unknown } - func navigate(to location: Location, from currentController: Controller) throws { + func navigate(to location: Location, from currentController: CurrentController) throws { throw InternalError.Unknown } } @@ -27,7 +27,7 @@ class ErrorRoute: ErrorRoutable { var error: Error? - func handle(routeError error: Error, from currentController: Controller) { + func handle(routeError error: Error, from currentController: CurrentController) { self.error = error } } diff --git a/Tests/Compass/RouterTests.swift b/Tests/Compass/RouterTests.swift index 93990e2..d08cd66 100644 --- a/Tests/Compass/RouterTests.swift +++ b/Tests/Compass/RouterTests.swift @@ -6,13 +6,13 @@ class RouterTests: XCTestCase { var router: Router! var route: TestRoute! - var controller: Controller! + var controller: CurrentController! var errorRoute: ErrorRoute! override func setUp() { router = Router() route = TestRoute() - controller = Controller() + controller = CurrentController() errorRoute = ErrorRoute() router.errorRoute = errorRoute