Switch to *mongodb-connection* and *mongodb-database* instead of explicitly passing values around

This commit is contained in:
Michael S. Klishin 2011-08-14 22:19:44 +04:00
parent 11ad2168ed
commit 2620263103
4 changed files with 83 additions and 74 deletions

View file

@ -29,31 +29,31 @@
;; monger.collection/insert ;; monger.collection/insert
(defn ^WriteResult insert (defn ^WriteResult insert
([^DB db, ^String collection, ^DBObject doc] ([^String collection, ^DBObject doc]
(.insert (.getCollection db collection) (monger.convertion/to-db-object doc) WriteConcern/NORMAL)) (.insert (.getCollection monger.core/*mongodb-database* collection) (monger.convertion/to-db-object doc) monger.core/*mongodb-write-concern*))
([^DB db, ^String collection, ^DBObject doc, ^WriteConcern concern] ([^String collection, ^DBObject doc, ^WriteConcern concern]
(.insert (.getCollection db collection) (monger.convertion/to-db-object doc) concern))) (.insert (.getCollection monger.core/*mongodb-database* collection) (monger.convertion/to-db-object doc) concern)))
(defn ^WriteResult insert-batch (defn ^WriteResult insert-batch
([^DB db, ^String collection, ^List docs] ([^String collection, ^List docs]
(.insert (.getCollection db collection) (monger.convertion/to-db-object docs) WriteConcern/NORMAL)) (.insert (.getCollection monger.core/*mongodb-database* collection) (monger.convertion/to-db-object docs) WriteConcern/NORMAL))
([^DB db, ^String collection, ^List docs, ^WriteConcern concern] ([^String collection, ^List docs, ^WriteConcern concern]
(.insert (.getCollection db collection) (monger.convertion/to-db-object docs) concern))) (.insert (.getCollection monger.core/*mongodb-database* collection) (monger.convertion/to-db-object docs) concern)))
;; monger.collection/find ;; monger.collection/find
(defn ^DBCursor find (defn ^DBCursor find
([^DB db, ^String collection] ([^String collection]
(.find (.getCollection db collection))) (.find (.getCollection monger.core/*mongodb-database* collection)))
([^DB db, ^String collection, ^Map ref] ([^String collection, ^Map ref]
(.find (.getCollection db collection) (monger.convertion/to-db-object ref))) (.find (.getCollection monger.core/*mongodb-database* collection) (monger.convertion/to-db-object ref)))
) )
(defn ^DBObject find-by-id (defn ^DBObject find-by-id
([^DB db, ^String collection, ^String id] ([^String collection, ^String id]
(.findOne (.getCollection db collection) (monger.convertion/to-db-object { :_id id }))) (.findOne (.getCollection monger.core/*mongodb-database* collection) (monger.convertion/to-db-object { :_id id })))
) )
@ -62,18 +62,18 @@
;; monger.collection/count ;; monger.collection/count
(defn ^long count (defn ^long count
[^DB db, ^String collection] [^String collection]
(.count (.getCollection db collection))) (.count (.getCollection monger.core/*mongodb-database* collection)))
;; monger.collection/update ;; monger.collection/update
;; monger.collection/update-multi ;; monger.collection/update-multi
;; monger.collection/remove ;; monger.collection/remove
(defn ^WriteResult remove (defn ^WriteResult remove
([^DB db, ^String collection] ([^String collection]
(.remove (.getCollection db collection) (monger.convertion/to-db-object {}))) (.remove (.getCollection monger.core/*mongodb-database* collection) (monger.convertion/to-db-object {})))
([^DB db, ^String collection, ^DBObject conditions] ([^String collection, ^DBObject conditions]
(.remove (.getCollection db collection) (monger.convertion/to-db-object conditions))) (.remove (.getCollection monger.core/*mongodb-database* collection) (monger.convertion/to-db-object conditions)))
) )
;; monger.collection/ensure-index ;; monger.collection/ensure-index

View file

@ -19,15 +19,19 @@
;; THE SOFTWARE. ;; THE SOFTWARE.
(ns monger.core (ns monger.core
(:import (com.mongodb Mongo DB)) (:import (com.mongodb Mongo DB WriteConcern))
) )
;; ;;
;; Defaults ;; Defaults
;; ;;
(def ^:dynamic *default-host* "localhost") (def ^:dynamic ^String *mongodb-host* "localhost")
(def ^:dynamic *default-port* 27017) (def ^:dynamic ^long *mongodb-port* 27017)
(def ^:dynamic ^Mongo *mongodb-connection*)
(def ^:dynamic ^DB *mongodb-database*)
(def ^:dynamic ^WriteConcern *mongodb-write-concern* WriteConcern/NORMAL)
;; ;;
@ -45,11 +49,13 @@
"Connects to MongoDB" "Connects to MongoDB"
([] ([]
(Mongo.)) (Mongo.))
([{ :keys [host port] :or { host *default-host*, port *default-port* }}] ([{ :keys [host port] :or { host *mongodb-host*, port *mongodb-port* }}]
(Mongo. host port))) (Mongo. host port)))
(defn ^DB get-db (defn ^DB get-db
"Get database reference by name" "Get database reference by name"
[^Mongo connection, ^String name] ([^String name]
(.getDB connection name)) (.getDB *mongodb-connection* name))
([^Mongo connection, ^String name]
(.getDB connection name)))

View file

@ -9,3 +9,13 @@
"Generates a secure random string" "Generates a secure random string"
[^long n, ^long num-base] [^long n, ^long num-base]
(.toString (new BigInteger n (SecureRandom.)) num-base)) (.toString (new BigInteger n (SecureRandom.)) num-base))
(defmacro with-ns
"Evaluates body in another namespace. ns is either a namespace object or a symbol.
This makes it possible to define functions in namespaces other than the current one."
[ns & body]
`(binding [*ns* (the-ns ~ns)]
~@(map (fn [form] `(eval '~form)) body)))

View file

@ -3,7 +3,12 @@
(ns monger.test.collection (ns monger.test.collection
(:import [com.mongodb WriteResult WriteConcern DBCursor]) (:import [com.mongodb WriteResult WriteConcern DBCursor])
(:require [monger core collection errors util] [clojure stacktrace]) (:require [monger core collection errors util] [clojure stacktrace])
(:use [clojure.test])) (:use [clojure.test] [monger.core]))
(monger.util/with-ns 'monger.core
(defonce ^:dynamic *mongodb-connection* (monger.core/connect))
(defonce ^:dynamic *mongodb-database* (monger.core/get-db "monger-test")))
;; ;;
@ -11,23 +16,19 @@
;; ;;
(deftest insert-a-basic-document-without-id-and-with-default-write-concern (deftest insert-a-basic-document-without-id-and-with-default-write-concern
(let [connection (monger.core/connect) (let [collection "people"
db (monger.core/get-db connection "monger-test")
collection "people"
doc { :name "Joe", :age 30 }] doc { :name "Joe", :age 30 }]
(monger.collection/remove db collection) (monger.collection/remove collection)
(is (monger.errors/ok? (monger.collection/insert db "people" doc))) (is (monger.errors/ok? (monger.collection/insert "people" doc)))
(is (= 1 (monger.collection/count db collection))))) (is (= 1 (monger.collection/count collection)))))
(deftest insert-a-basic-document-without-id-and-with-explicit-write-concern (deftest insert-a-basic-document-without-id-and-with-explicit-write-concern
(let [connection (monger.core/connect) (let [collection "people"
db (monger.core/get-db connection "monger-test")
collection "people"
doc { :name "Joe", :age 30 }] doc { :name "Joe", :age 30 }]
(monger.collection/remove db collection) (monger.collection/remove collection)
(is (monger.errors/ok? (monger.collection/insert db "people" doc WriteConcern/SAFE))) (is (monger.errors/ok? (monger.collection/insert "people" doc WriteConcern/SAFE)))
(is (= 1 (monger.collection/count db collection))))) (is (= 1 (monger.collection/count collection)))))
@ -36,22 +37,18 @@
;; ;;
(deftest insert-a-batch-of-basic-documents-without-ids-and-with-default-write-concern (deftest insert-a-batch-of-basic-documents-without-ids-and-with-default-write-concern
(let [connection (monger.core/connect) (let [collection "people"
db (monger.core/get-db connection "monger-test")
collection "people"
docs [{ :name "Joe", :age 30 }, { :name "Paul", :age 27 }]] docs [{ :name "Joe", :age 30 }, { :name "Paul", :age 27 }]]
(monger.collection/remove db collection) (monger.collection/remove collection)
(is (monger.errors/ok? (monger.collection/insert-batch db "people" docs))) (is (monger.errors/ok? (monger.collection/insert-batch "people" docs)))
(is (= 2 (monger.collection/count db collection))))) (is (= 2 (monger.collection/count collection)))))
(deftest insert-a-batch-of-basic-documents-without-ids-and-with-explicit-write-concern (deftest insert-a-batch-of-basic-documents-without-ids-and-with-explicit-write-concern
(let [connection (monger.core/connect) (let [collection "people"
db (monger.core/get-db connection "monger-test")
collection "people"
docs [{ :name "Joe", :age 30 }, { :name "Paul", :age 27 }]] docs [{ :name "Joe", :age 30 }, { :name "Paul", :age 27 }]]
(monger.collection/remove db collection) (monger.collection/remove collection)
(is (monger.errors/ok? (monger.collection/insert-batch db "people" docs WriteConcern/NORMAL))) (is (monger.errors/ok? (monger.collection/insert-batch "people" docs WriteConcern/NORMAL)))
(is (= 2 (monger.collection/count db collection))))) (is (= 2 (monger.collection/count collection)))))
@ -61,9 +58,7 @@
;; ;;
(deftest get-collection-size (deftest get-collection-size
(let [connection (monger.core/connect) (is 0 (monger.collection/count "things")))
db (monger.core/get-db connection "monger-test")]
(is 0 (monger.collection/count db "things"))))
@ -72,11 +67,9 @@
;; ;;
(deftest find-full-document-when-collection-is-empty (deftest find-full-document-when-collection-is-empty
(let [connection (monger.core/connect) (let [collection "docs"]
db (monger.core/get-db connection "monger-test") (monger.collection/remove collection)
collection "docs"] (def cursor (monger.collection/find collection))
(monger.collection/remove db collection)
(def cursor (monger.collection/find db collection))
(is (instance? DBCursor cursor)))) (is (instance? DBCursor cursor))))
@ -86,24 +79,24 @@
;; ;;
(deftest find-full-document-by-id-when-document-does-not-exist (deftest find-full-document-by-id-when-document-does-not-exist
(let [connection (monger.core/connect) (let [collection "libraries"
db (monger.core/get-db connection "monger-test")
collection "libraries"
doc-id (monger.util/random-str 140 16)] doc-id (monger.util/random-str 140 16)]
(monger.collection/remove db collection) (monger.collection/remove collection)
(is (nil? (monger.collection/find-by-id db collection doc-id))))) (is (nil? (monger.collection/find-by-id collection doc-id)))))
(deftest find-full-document-by-id-when-document-exists (deftest find-full-document-by-id-when-document-exists
(let [connection (monger.core/connect) (let [collection "libraries"
db (monger.core/get-db connection "monger-test")
collection "libraries"
doc-id (monger.util/random-str 140 16) doc-id (monger.util/random-str 140 16)
doc { :data-store "MongoDB", :language "Clojure", :_id doc-id }] doc { :data-store "MongoDB", :language "Clojure", :_id doc-id }]
(monger.collection/remove db collection) (monger.collection/remove collection)
(monger.collection/insert db collection doc) (monger.collection/insert collection doc)
(is (= (doc (monger.collection/find-by-id db collection doc-id)))))) (is (= (doc (monger.collection/find-by-id collection doc-id))))))
;; (deftest find-partial-document-by-id-when-document-exists
;; (let [collection "libraries"
;; doc-id (monger.util/random-str 140 16)
;; doc { :data-store "MongoDB", :language "Clojure", :_id doc-id }]
;; (monger.collection/remove collection)
;; (monger.collection/insert collection doc)
;; (is (= (doc (monger.collection/find-by-id collection doc-id []))))))