diff --git a/Example/DetailViewController.swift b/Example/DetailViewController.swift index 53a958b09..04a36487c 100644 --- a/Example/DetailViewController.swift +++ b/Example/DetailViewController.swift @@ -104,14 +104,14 @@ class DetailViewController: UITableViewController { let field = self.headers.keys.array.sorted(<)[indexPath.row] let value = self.headers[field] - cell.textLabel.text = field + cell.textLabel?.text = field cell.detailTextLabel!.text = value return cell case .Body: let cell = self.tableView.dequeueReusableCellWithIdentifier("Body") as UITableViewCell - cell.textLabel.text = self.body + cell.textLabel?.text = self.body return cell } diff --git a/README.md b/README.md index 814a25989..b56b74fb9 100644 --- a/README.md +++ b/README.md @@ -498,7 +498,7 @@ Generics can be used to provide automatic, type-safe response object serializati ```swift @objc public protocol ResponseObjectSerializable { - init(response: NSHTTPURLResponse, representation: AnyObject) + init?(response: NSHTTPURLResponse, representation: AnyObject) } extension Alamofire.Request { @@ -514,7 +514,7 @@ extension Alamofire.Request { } return response(serializer: serializer, completionHandler: { (request, response, object, error) in - completionHandler(request, response, object as? T, error) + completionHandler(request, response, object, error) }) } } @@ -525,7 +525,7 @@ final class User: ResponseObjectSerializable { let username: String let name: String - required init(response: NSHTTPURLResponse, representation: AnyObject) { + required init?(response: NSHTTPURLResponse, representation: AnyObject) { self.username = response.URL!.lastPathComponent self.name = representation.valueForKeyPath("name") as String } diff --git a/Source/Alamofire.swift b/Source/Alamofire.swift index 07d0c5b82..161b7d7ba 100644 --- a/Source/Alamofire.swift +++ b/Source/Alamofire.swift @@ -1257,27 +1257,31 @@ extension Request: DebugPrintable { if let cookieStorage = session.configuration.HTTPCookieStorage { if let cookies = cookieStorage.cookiesForURL(URL) as? [NSHTTPCookie] { if !cookies.isEmpty { - let string = cookies.reduce(""){ $0 + "\($1.name)=\($1.value);" } + let string = cookies.reduce(""){ $0 + "\($1.name)=\($1.value ?? String());" } components.append("-b \"\(string.substringToIndex(string.endIndex.predecessor()))\"") } } } - for (field, value) in request.allHTTPHeaderFields! { - switch field { - case "Cookie": - continue - default: - components.append("-H \"\(field): \(value)\"") + if request.allHTTPHeaderFields != nil { + for (field, value) in request.allHTTPHeaderFields! { + switch field { + case "Cookie": + continue + default: + components.append("-H \"\(field): \(value)\"") + } } } - for (field, value) in session.configuration.HTTPAdditionalHeaders! { - switch field { - case "Cookie": - continue - default: - components.append("-H \"\(field): \(value)\"") + if session.configuration.HTTPAdditionalHeaders != nil { + for (field, value) in session.configuration.HTTPAdditionalHeaders! { + switch field { + case "Cookie": + continue + default: + components.append("-H \"\(field): \(value)\"") + } } } diff --git a/Tests/DownloadTests.swift b/Tests/DownloadTests.swift index 4bde100ec..632294456 100644 --- a/Tests/DownloadTests.swift +++ b/Tests/DownloadTests.swift @@ -68,7 +68,7 @@ class AlamofireDownloadResponseTestCase: XCTestCase { XCTAssertEqual(filteredContents.count, 1, "should have one file in Documents") let file = filteredContents.first as NSURL - XCTAssertEqual(file.lastPathComponent, "\(numberOfLines)", "filename should be \(numberOfLines)") + XCTAssertEqual(file.lastPathComponent!, "\(numberOfLines)", "filename should be \(numberOfLines)") if let data = NSData(contentsOfURL: file) { XCTAssertGreaterThan(data.length, 0, "data length should be non-zero") diff --git a/Tests/RequestTests.swift b/Tests/RequestTests.swift index 9bf6ecc7a..0d9a7d7f4 100644 --- a/Tests/RequestTests.swift +++ b/Tests/RequestTests.swift @@ -127,4 +127,28 @@ class AlamofireRequestDebugDescriptionTestCase: XCTestCase { XCTAssert(request.debugDescription.rangeOfString("-d \"{\\\"foo\\\":\\\"bar\\\"}\"") != nil) XCTAssert(components.last! == "\"\(URL)\"", "URL component should be equal") } + + func testPOSTRequestWithCookieDebugDescription() { + let URL = "http://httpbin.org/post" + + let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() + + let properties = [ + NSHTTPCookieDomain: "httpbin.org", + NSHTTPCookiePath: "/post", + NSHTTPCookieName: "foo", + NSHTTPCookieValue: "bar", + ] + let cookie = NSHTTPCookie(properties: properties)! + configuration.HTTPCookieStorage?.setCookie(cookie) + + let manager = Alamofire.Manager(configuration: configuration) + let request = manager.request(.POST, URL) + let components = cURLCommandComponents(request) + + XCTAssert(components[0..<3] == ["$", "curl", "-i"], "components should be equal") + XCTAssert(components[3..<5] == ["-X", "POST"], "command should contain explicit -X flag") + XCTAssert(components[5..<7] == ["-b", "\"foo=bar\""], "command should contain -b flag") + XCTAssert(components.last! == "\"\(URL)\"", "URL component should be equal") + } }