Преглед изворни кода

Removed 'stringByReplacingOccurrencesOfString' dependency from HttpRequest ( Linux support ).

Damian Kołakowski пре 10 година
родитељ
комит
e8acc49a08

+ 11 - 7
Sources/Swifter/HttpParser.swift

@@ -4,7 +4,11 @@
 //  Copyright (c) 2015 Damian Kołakowski. All rights reserved.
 //
 
-import Foundation
+#if os(Linux)
+    import Glibc
+#else
+    import Foundation
+#endif
 
 
 enum HttpParserError : ErrorType {
@@ -16,7 +20,7 @@ class HttpParser {
     
     func readHttpRequest(socket: Socket) throws -> HttpRequest {
         let statusLine = try socket.readLine()
-        let statusLineTokens = statusLine.componentsSeparatedBy(" ")
+        let statusLineTokens = statusLine.split(" ")
         print(statusLineTokens)
         if statusLineTokens.count < 3 {
             throw HttpParserError.InvalidStatusLine(statusLine)
@@ -33,15 +37,15 @@ class HttpParser {
     }
     
     private func extractUrlParams(url: String) -> [(String, String)] {
-        guard let query = url.componentsSeparatedBy("?").last else {
+        guard let query = url.split("?").last else {
             return []
         }
-        return query.componentsSeparatedBy("&").map { (param:String) -> (String, String) in
-            let tokens = param.componentsSeparatedBy("=")
+        return query.split("&").map { (param:String) -> (String, String) in
+            let tokens = param.split("=")
             guard tokens.count >= 2 else {
                 return ("", "")
             }
-            return (tokens[0].stringByRemovingPercent(), tokens[1].stringByRemovingPercent())
+            return (tokens[0].removePercentEncoding(), tokens[1].removePercentEncoding())
         }
     }
     
@@ -66,7 +70,7 @@ class HttpParser {
             if headerLine.isEmpty {
                 return requestHeaders
             }
-            let headerTokens = headerLine.componentsSeparatedBy(":")
+            let headerTokens = headerLine.split(":")
             if headerTokens.count >= 2 {
                 // RFC 2616 - "Hypertext Transfer Protocol -- HTTP/1.1", paragraph 4.2, "Message Headers":
                 // "Each header field consists of a name followed by a colon (":") and the field value. Field names are case-insensitive."

+ 5 - 5
Sources/Swifter/HttpRequest.swift

@@ -18,12 +18,12 @@ public struct HttpRequest {
     
     public func parseForm() -> [(String, String)] {
         if let body = body {
-            return body.componentsSeparatedBy("&").map { (param:String) -> (String, String) in
-                let tokens = param.componentsSeparatedByString("=")
+            return body.split("&").map { (param: String) -> (String, String) in
+                let tokens = param.split("=")
                 if tokens.count >= 2 {
-                    let key = tokens[0].stringByReplacingOccurrencesOfString("+", withString: " ").stringByRemovingPercentEncoding
-                    let value = tokens[1].stringByReplacingOccurrencesOfString("+", withString: " ").stringByRemovingPercentEncoding
-                    if let key = key, value = value { return (key, value) }
+                    let key = tokens[0].replace("+", new: " ").removePercentEncoding()
+                    let value = tokens[1].replace("+", new: " ").removePercentEncoding()
+                    return (key, value)
                 }
                 return ("","")
             }

+ 8 - 2
Sources/Swifter/String+Misc.swift

@@ -6,10 +6,16 @@
 
 extension String {
 
-    public func componentsSeparatedBy(separator: Character) -> [String] {
+    public func split(separator: Character) -> [String] {
         return self.characters.split { $0 == separator }.map(String.init)
     }
     
+    public func replace(old: Character, new: Character) -> String {
+        var buffer = [Character]()
+        self.characters.forEach { buffer.append($0 == old ? new : $0) }
+        return String(buffer)
+    }
+    
     public func trim() -> String {
         var scalars = self.unicodeScalars
         while let _ = unicodeScalarToUInt32Whitespace(scalars.first) { scalars.removeFirst() }
@@ -17,7 +23,7 @@ extension String {
         return String(scalars)
     }
     
-    public func stringByRemovingPercent() -> String {
+    public func removePercentEncoding() -> String {
         var scalars = self.unicodeScalars
         var buffer = [Character]()
         while let scalar = scalars.popFirst() {

BIN
Swifter.xcodeproj/project.xcworkspace/xcuserdata/damiankolakowski.xcuserdatad/UserInterfaceState.xcuserstate


+ 7 - 7
Swifter.xcodeproj/xcuserdata/damiankolakowski.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -789,12 +789,12 @@
             ignoreCount = "0"
             continueAfterRunningActions = "No"
             filePath = "Sources/Swifter/String+Misc.swift"
-            timestampString = "471207427.521354"
+            timestampString = "471209479.941914"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "29"
-            endingLineNumber = "29"
-            landmarkName = "stringByRemovingPercent()"
+            startingLineNumber = "35"
+            endingLineNumber = "35"
+            landmarkName = "removePercentEncoding()"
             landmarkType = "5">
          </BreakpointContent>
       </BreakpointProxy>
@@ -805,11 +805,11 @@
             ignoreCount = "0"
             continueAfterRunningActions = "No"
             filePath = "Sources/Swifter/String+Misc.swift"
-            timestampString = "471207463.1494"
+            timestampString = "471209479.941914"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "14"
-            endingLineNumber = "14"
+            startingLineNumber = "20"
+            endingLineNumber = "20"
             landmarkName = "trim()"
             landmarkType = "5">
          </BreakpointContent>