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

View file

@ -19,15 +19,19 @@
;; THE SOFTWARE.
(ns monger.core
(:import (com.mongodb Mongo DB))
(:import (com.mongodb Mongo DB WriteConcern))
)
;;
;; Defaults
;;
(def ^:dynamic *default-host* "localhost")
(def ^:dynamic *default-port* 27017)
(def ^:dynamic ^String *mongodb-host* "localhost")
(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"
([]
(Mongo.))
([{ :keys [host port] :or { host *default-host*, port *default-port* }}]
([{ :keys [host port] :or { host *mongodb-host*, port *mongodb-port* }}]
(Mongo. host port)))
(defn ^DB get-db
"Get database reference by name"
[^Mongo connection, ^String name]
(.getDB connection name))
([^String name]
(.getDB *mongodb-connection* name))
([^Mongo connection, ^String name]
(.getDB connection name)))

View file

@ -8,4 +8,14 @@
(defn ^String random-str
"Generates a secure random string"
[^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
(:import [com.mongodb WriteResult WriteConcern DBCursor])
(: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
(let [connection (monger.core/connect)
db (monger.core/get-db connection "monger-test")
collection "people"
(let [collection "people"
doc { :name "Joe", :age 30 }]
(monger.collection/remove db collection)
(is (monger.errors/ok? (monger.collection/insert db "people" doc)))
(is (= 1 (monger.collection/count db collection)))))
(monger.collection/remove collection)
(is (monger.errors/ok? (monger.collection/insert "people" doc)))
(is (= 1 (monger.collection/count collection)))))
(deftest insert-a-basic-document-without-id-and-with-explicit-write-concern
(let [connection (monger.core/connect)
db (monger.core/get-db connection "monger-test")
collection "people"
(let [collection "people"
doc { :name "Joe", :age 30 }]
(monger.collection/remove db collection)
(is (monger.errors/ok? (monger.collection/insert db "people" doc WriteConcern/SAFE)))
(is (= 1 (monger.collection/count db collection)))))
(monger.collection/remove collection)
(is (monger.errors/ok? (monger.collection/insert "people" doc WriteConcern/SAFE)))
(is (= 1 (monger.collection/count collection)))))
@ -36,22 +37,18 @@
;;
(deftest insert-a-batch-of-basic-documents-without-ids-and-with-default-write-concern
(let [connection (monger.core/connect)
db (monger.core/get-db connection "monger-test")
collection "people"
(let [collection "people"
docs [{ :name "Joe", :age 30 }, { :name "Paul", :age 27 }]]
(monger.collection/remove db collection)
(is (monger.errors/ok? (monger.collection/insert-batch db "people" docs)))
(is (= 2 (monger.collection/count db collection)))))
(monger.collection/remove collection)
(is (monger.errors/ok? (monger.collection/insert-batch "people" docs)))
(is (= 2 (monger.collection/count collection)))))
(deftest insert-a-batch-of-basic-documents-without-ids-and-with-explicit-write-concern
(let [connection (monger.core/connect)
db (monger.core/get-db connection "monger-test")
collection "people"
(let [collection "people"
docs [{ :name "Joe", :age 30 }, { :name "Paul", :age 27 }]]
(monger.collection/remove db collection)
(is (monger.errors/ok? (monger.collection/insert-batch db "people" docs WriteConcern/NORMAL)))
(is (= 2 (monger.collection/count db collection)))))
(monger.collection/remove collection)
(is (monger.errors/ok? (monger.collection/insert-batch "people" docs WriteConcern/NORMAL)))
(is (= 2 (monger.collection/count collection)))))
@ -61,9 +58,7 @@
;;
(deftest get-collection-size
(let [connection (monger.core/connect)
db (monger.core/get-db connection "monger-test")]
(is 0 (monger.collection/count db "things"))))
(is 0 (monger.collection/count "things")))
@ -72,11 +67,9 @@
;;
(deftest find-full-document-when-collection-is-empty
(let [connection (monger.core/connect)
db (monger.core/get-db connection "monger-test")
collection "docs"]
(monger.collection/remove db collection)
(def cursor (monger.collection/find db collection))
(let [collection "docs"]
(monger.collection/remove collection)
(def cursor (monger.collection/find collection))
(is (instance? DBCursor cursor))))
@ -86,24 +79,24 @@
;;
(deftest find-full-document-by-id-when-document-does-not-exist
(let [connection (monger.core/connect)
db (monger.core/get-db connection "monger-test")
collection "libraries"
(let [collection "libraries"
doc-id (monger.util/random-str 140 16)]
(monger.collection/remove db collection)
(is (nil? (monger.collection/find-by-id db collection doc-id)))))
(monger.collection/remove collection)
(is (nil? (monger.collection/find-by-id collection doc-id)))))
(deftest find-full-document-by-id-when-document-exists
(let [connection (monger.core/connect)
db (monger.core/get-db connection "monger-test")
collection "libraries"
(let [collection "libraries"
doc-id (monger.util/random-str 140 16)
doc { :data-store "MongoDB", :language "Clojure", :_id doc-id }]
(monger.collection/remove db collection)
(monger.collection/insert db collection doc)
(is (= (doc (monger.collection/find-by-id db collection doc-id))))))
(monger.collection/remove collection)
(monger.collection/insert collection doc)
(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 []))))))