parse-params public #49

Merged
merged 4 commits into from Mar 22, 2012
Next

move parse-params to ring.util.codec, renamed as form-decode

commit 58e5860c43a13273ed3c5b1833cddad9d4a3010e Giacomo Ritucci committed Jan 10, 2012
View
2 ring-core/src/ring/middleware/multipart_params.clj
@@ -1,6 +1,6 @@
(ns ring.middleware.multipart-params
"Parse multipart upload into params."
- (:use [ring.middleware.params :only (assoc-param)])
+ (:use [ring.util.codec :only (assoc-param)])
(:import [org.apache.commons.fileupload.util Streams]
[org.apache.commons.fileupload
RequestContext
View
31 ring-core/src/ring/middleware/params.clj
@@ -1,38 +1,13 @@
(ns ring.middleware.params
"Parse form and query params."
- (:require [ring.util.codec :as codec]
- [clojure.string :as string]))
-
-(defn assoc-param
- "Associate a key with a value. If the key already exists in the map,
- create a vector of values."
- [map key val]
- (assoc map key
- (if-let [cur (map key)]
- (if (vector? cur)
- (conj cur val)
- [cur val])
- val)))
-
-(defn- parse-params
- "Parse parameters from a string into a map."
- [^String param-string encoding]
- (reduce
- (fn [param-map encoded-param]
- (if-let [[_ key val] (re-matches #"([^=]+)=(.*)" encoded-param)]
- (assoc-param param-map
- (codec/url-decode key encoding)
- (codec/url-decode (or val "") encoding))
- param-map))
- {}
- (string/split param-string #"&")))
+ (:require [ring.util.codec :as codec]))
(defn- assoc-query-params
"Parse and assoc parameters from the query string with the request."
[request encoding]
(merge-with merge request
(if-let [query-string (:query-string request)]
- (let [params (parse-params query-string encoding)]
+ (let [params (codec/form-decode query-string encoding)]
{:query-params params, :params params})
{:query-params {}, :params {}})))
@@ -47,7 +22,7 @@
[request encoding]
(merge-with merge request
(if-let [body (and (urlencoded-form? request) (:body request))]
- (let [params (parse-params (slurp body :encoding encoding) encoding)]
+ (let [params (codec/form-decode (slurp body :encoding encoding) encoding)]
{:form-params params, :params params})
{:form-params {}, :params {}})))
View
27 ring-core/src/ring/util/codec.clj
@@ -2,7 +2,8 @@
"Encoding and decoding utilities."
(:import java.io.File
(java.net URLEncoder URLDecoder)
- org.apache.commons.codec.binary.Base64))
+ org.apache.commons.codec.binary.Base64)
+ (:require [clojure.string :as string]))
(defn url-encode
"Returns the form-url-encoded version of the given string, using either a
@@ -27,3 +28,27 @@
"Decode a base64 encoded string into an array of bytes."
[^String encoded]
(Base64/decodeBase64 (.getBytes encoded)))
+
+(defn assoc-param
+ "Associate a key with a value. If the key already exists in the map,
+ create a vector of values."
+ [map key val]
+ (assoc map key
+ (if-let [cur (map key)]
+ (if (vector? cur)
+ (conj cur val)
+ [cur val])
+ val)))
+
+(defn form-decode
+ "Parse parameters from a string into a map."
+ [^String param-string encoding]
+ (reduce
+ (fn [param-map encoded-param]
+ (if-let [[_ key val] (re-matches #"([^=]+)=(.*)" encoded-param)]
+ (assoc-param param-map
+ (url-decode key encoding)
+ (url-decode (or val "") encoding))
+ param-map))
+ {}
+ (string/split param-string #"&")))