From 20f1bb60db724b0add11c5da492d6c597036f4d4 Mon Sep 17 00:00:00 2001 From: Matt Smollinger Date: Fri, 15 Sep 2017 12:59:48 -0400 Subject: [PATCH 1/2] Add additional http header parsing to the manager --- PeliasTests/PeliasSearchManagerTests.swift | 18 ++++++++++++++++++ Sources/Core/PeliasSearchManager.swift | 13 +++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/PeliasTests/PeliasSearchManagerTests.swift b/PeliasTests/PeliasSearchManagerTests.swift index d26f808..3a68c5d 100644 --- a/PeliasTests/PeliasSearchManagerTests.swift +++ b/PeliasTests/PeliasSearchManagerTests.swift @@ -16,6 +16,7 @@ class PeliasSearchManagerTests: XCTestCase { super.setUp() // Put setup code here. This method is called before the invocation of each test method in the class. testOperationQueue.isSuspended = true + PeliasSearchManager.sharedInstance.operationQueue.isSuspended = true PeliasSearchManager.sharedInstance.autocompleteTimeDelay = 0.0 } @@ -100,4 +101,21 @@ class PeliasSearchManagerTests: XCTestCase { XCTAssertEqual(operation.session.configuration, sessionConfig) } + func testAddingHttpHeaders() { + let testHeaders = ["Hello" : "Hi"] + PeliasSearchManager.sharedInstance.additionalHttpHeaders = testHeaders + + let point = GeoPoint.init(latitude: 40.0, longitude: 70.0) + let config = PeliasAutocompleteConfig.init(searchText: "test", focusPoint: point) { (response) in + // + } + let testOp = PeliasSearchManager.sharedInstance.autocompleteQuery(config) + XCTAssertNotNil(testOp.sessionConfig, "Session configuration not created for additional headers") + guard let sessionheaders = testOp.sessionConfig?.httpAdditionalHeaders else { + XCTFail("Headers dictionary not created") + return + } + XCTAssertEqual(sessionheaders["Hello"] as? String, testHeaders["Hello"]) + } + } diff --git a/Sources/Core/PeliasSearchManager.swift b/Sources/Core/PeliasSearchManager.swift index 34b50da..6e222e4 100644 --- a/Sources/Core/PeliasSearchManager.swift +++ b/Sources/Core/PeliasSearchManager.swift @@ -13,7 +13,7 @@ public final class PeliasSearchManager { //! Singleton access public static let sharedInstance = PeliasSearchManager() - fileprivate let operationQueue = OperationQueue() + internal let operationQueue = OperationQueue() fileprivate let autocompleteOperationQueue = OperationQueue() fileprivate var autocompleteQueryTimer: Timer? internal var queuedAutocompleteOp: PeliasOperation? @@ -23,6 +23,7 @@ public final class PeliasSearchManager { public var baseUrl: URL /// The query items that should be applied to every request (such as an api key). public var urlQueryItems: [URLQueryItem]? + public var additionalHttpHeaders: [String:String]? fileprivate init() { operationQueue.maxConcurrentOperationCount = 4 @@ -73,8 +74,16 @@ public final class PeliasSearchManager { configData.appendQueryItem(queryItem.name, value: queryItem.value) } } + + let operation = PeliasOperation(config: configData) + if let headers = additionalHttpHeaders { + let config = URLSessionConfiguration.default + config.httpAdditionalHeaders = headers + operation.sessionConfig = config + } + //Build a operation - return PeliasOperation(config: configData) + return operation } fileprivate func executeOperation(_ config: APIConfigData) -> PeliasOperation { From 3591e46321c19a5f8b09e0e72ed43172112e854b Mon Sep 17 00:00:00 2001 From: Matt Smollinger Date: Fri, 15 Sep 2017 13:01:53 -0400 Subject: [PATCH 2/2] Add docs --- Sources/Core/PeliasSearchManager.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Sources/Core/PeliasSearchManager.swift b/Sources/Core/PeliasSearchManager.swift index 6e222e4..c348568 100644 --- a/Sources/Core/PeliasSearchManager.swift +++ b/Sources/Core/PeliasSearchManager.swift @@ -23,6 +23,7 @@ public final class PeliasSearchManager { public var baseUrl: URL /// The query items that should be applied to every request (such as an api key). public var urlQueryItems: [URLQueryItem]? + // Additional HTTP Headers to append to outbound requests public var additionalHttpHeaders: [String:String]? fileprivate init() {