monger.conversion/to-object-id

This commit is contained in:
Michael S. Klishin 2011-12-28 19:46:29 +04:00
parent 1a8eb1ef80
commit c25609a5c3
2 changed files with 35 additions and 4 deletions

View file

@ -22,9 +22,10 @@
;; THE SOFTWARE.
(ns monger.conversion
(:import (com.mongodb DBObject BasicDBObject BasicDBList DBCursor)
(clojure.lang IPersistentMap Keyword)
(java.util List Map)))
(:import [com.mongodb DBObject BasicDBObject BasicDBList DBCursor]
[clojure.lang IPersistentMap Keyword]
[java.util List Map Date]
[org.bson.types ObjectId]))
(defprotocol ConvertToDBObject
(to-db-object [input] "Converts given piece of Clojure data to BasicDBObject MongoDB Java driver uses"))
@ -101,3 +102,22 @@
(assoc m k (from-db-object v false))))
{} (reverse pairs)))
(defprotocol ConvertToObjectId
(to-object-id [input] "Instantiates ObjectId from input unless the input itself is an ObjectId instance. In that case, returns input as is."))
(extend-protocol ConvertToObjectId
String
(to-object-id [^String input]
(ObjectId. input))
Date
(to-object-id [^Date input]
(ObjectId. input))
ObjectId
(to-object-id [^ObjectId input]
input))

View file

@ -2,7 +2,8 @@
(:require [monger core collection]
[monger.conversion :as cnv])
(:import [com.mongodb DBObject BasicDBObject BasicDBList]
[java.util Date Calendar List ArrayList])
[java.util Date Calendar List ArrayList]
[org.bson.types ObjectId])
(:use [clojure.test]))
@ -131,3 +132,13 @@
(is (= (-> output (get "nested") (get "list")) ["red" "green" "blue"]))
(is (= (-> output (get "nested") (get "dblist")) [0 1]))))
;;
;; ObjectId coercion
;;
(deftest test-conversion-to-object-id
(let [output (ObjectId. "4efb39370364238a81020502")]
(is (= output (cnv/to-object-id "4efb39370364238a81020502")))
(is (= output (cnv/to-object-id output)))))