Initial support for URI connections.
I want to believe that the person who designed MongoDB Java driver API was not sober while at it.
This commit is contained in:
parent
efbb439dca
commit
0da0a696f2
2 changed files with 32 additions and 4 deletions
|
|
@ -14,7 +14,7 @@
|
||||||
monger.core
|
monger.core
|
||||||
(:refer-clojure :exclude [count])
|
(:refer-clojure :exclude [count])
|
||||||
(:use [monger.conversion])
|
(:use [monger.conversion])
|
||||||
(:import [com.mongodb Mongo DB WriteConcern DBObject DBCursor CommandResult Bytes MongoOptions ServerAddress MapReduceOutput]
|
(:import [com.mongodb Mongo MongoURI DB WriteConcern DBObject DBCursor CommandResult Bytes MongoOptions ServerAddress MapReduceOutput]
|
||||||
[com.mongodb.gridfs GridFS]
|
[com.mongodb.gridfs GridFS]
|
||||||
[java.util Map]))
|
[java.util Map]))
|
||||||
|
|
||||||
|
|
@ -31,6 +31,7 @@
|
||||||
|
|
||||||
(declare ^:dynamic ^GridFS *mongodb-gridfs*)
|
(declare ^:dynamic ^GridFS *mongodb-gridfs*)
|
||||||
|
|
||||||
|
|
||||||
;;
|
;;
|
||||||
;; API
|
;; API
|
||||||
;;
|
;;
|
||||||
|
|
@ -51,11 +52,10 @@
|
||||||
(Mongo.))
|
(Mongo.))
|
||||||
([^ServerAddress server-address ^MongoOptions options]
|
([^ServerAddress server-address ^MongoOptions options]
|
||||||
(Mongo. server-address options))
|
(Mongo. server-address options))
|
||||||
([{ :keys [host port] :or { host *mongodb-host*, port *mongodb-port* }}]
|
([{ :keys [host port uri] :or { host *mongodb-host* port *mongodb-port* }}]
|
||||||
(Mongo. ^String host ^Long port)))
|
(Mongo. ^String host ^Long port)))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(defn ^DB get-db-names
|
(defn ^DB get-db-names
|
||||||
"Gets a list of all database names present on the server"
|
"Gets a list of all database names present on the server"
|
||||||
([]
|
([]
|
||||||
|
|
@ -105,7 +105,7 @@
|
||||||
(defn server-address
|
(defn server-address
|
||||||
([^String hostname]
|
([^String hostname]
|
||||||
(ServerAddress. hostname))
|
(ServerAddress. hostname))
|
||||||
([^String hostname ^long port]
|
([^String hostname ^Long port]
|
||||||
(ServerAddress. hostname port)))
|
(ServerAddress. hostname port)))
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -172,6 +172,30 @@
|
||||||
and WebScale fast second."
|
and WebScale fast second."
|
||||||
(def ^:dynamic *mongodb-write-concern* wc))
|
(def ^:dynamic *mongodb-write-concern* wc))
|
||||||
|
|
||||||
|
|
||||||
|
(defn connect-via-uri!
|
||||||
|
"Connects to MongoDB using a URI, sets up default connection and database. Commonly used for PaaS-based applications,
|
||||||
|
for example, running on Heroku. If username and password are provided, performs authentication."
|
||||||
|
[{ :keys [uri] }]
|
||||||
|
(let [uri (MongoURI. uri)
|
||||||
|
;; yes, you are not hallucinating. A class named MongoURI has a method called connectDB.
|
||||||
|
;; I call it "college OOP". Or maybe "don't give a shit" OOP.
|
||||||
|
db (.connectDB uri)
|
||||||
|
conn (.getMongo db)
|
||||||
|
user (.getUsername uri)
|
||||||
|
pwd (.getPassword uri)]
|
||||||
|
;; I hope that whoever wrote the MongoDB Java driver connection/authentication parts
|
||||||
|
;; wasn't sober while at it. MK.
|
||||||
|
;;
|
||||||
|
;; First we set connection, then DB, then authentcate
|
||||||
|
(set-connection! conn)
|
||||||
|
(when db
|
||||||
|
(set-db! db))
|
||||||
|
(when (and user pwd)
|
||||||
|
(authenticate db user pwd))
|
||||||
|
conn))
|
||||||
|
|
||||||
|
|
||||||
(defn ^CommandResult command
|
(defn ^CommandResult command
|
||||||
"Runs a database command (please check MongoDB documentation for the complete list of commands). Some common commands
|
"Runs a database command (please check MongoDB documentation for the complete list of commands). Some common commands
|
||||||
are:
|
are:
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,10 @@
|
||||||
(let [connection (monger.core/connect { :host "127.0.0.1" })]
|
(let [connection (monger.core/connect { :host "127.0.0.1" })]
|
||||||
(is (instance? com.mongodb.Mongo connection))))
|
(is (instance? com.mongodb.Mongo connection))))
|
||||||
|
|
||||||
|
(deftest connect-to-mongo-via-uri-without-credentials
|
||||||
|
(let [connection (monger.core/connect "mongodb://127.0.0.1")]
|
||||||
|
(is (instance? com.mongodb.Mongo connection))))
|
||||||
|
|
||||||
|
|
||||||
(deftest test-mongo-options-builder
|
(deftest test-mongo-options-builder
|
||||||
(let [max-wait-time (* 1000 60 2)
|
(let [max-wait-time (* 1000 60 2)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue