From c25609a5c354e967ec2d64e72b2365f16ac23300 Mon Sep 17 00:00:00 2001 From: "Michael S. Klishin" Date: Wed, 28 Dec 2011 19:46:29 +0400 Subject: [PATCH] monger.conversion/to-object-id --- src/monger/conversion.clj | 26 +++++++++++++++++++++++--- test/monger/test/conversion.clj | 13 ++++++++++++- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/monger/conversion.clj b/src/monger/conversion.clj index 7654e61..dd646f5 100644 --- a/src/monger/conversion.clj +++ b/src/monger/conversion.clj @@ -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)) + + diff --git a/test/monger/test/conversion.clj b/test/monger/test/conversion.clj index d27fac8..2d15643 100644 --- a/test/monger/test/conversion.clj +++ b/test/monger/test/conversion.clj @@ -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)))))