Implement monger.gridfs/find-one and /find-one-as-map
This commit is contained in:
parent
7eec647a97
commit
a292f082e8
2 changed files with 62 additions and 5 deletions
|
|
@ -63,8 +63,35 @@
|
||||||
(.createFile ^GridFS monger.core/*mongodb-gridfs* ^InputStream (io/make-input-stream input { :encoding "UTF-8" }))))
|
(.createFile ^GridFS monger.core/*mongodb-gridfs* ^InputStream (io/make-input-stream input { :encoding "UTF-8" }))))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(defmacro store
|
(defmacro store
|
||||||
[^GridFSInputFile input & body]
|
[^GridFSInputFile input & body]
|
||||||
`(.save ^GridFSInputFile (doto ~input ~@body) *chunk-size*))
|
`(let [^GridFSInputFile f# (doto ~input ~@body)]
|
||||||
|
(.save f# *chunk-size*)
|
||||||
|
(from-db-object f# true)))
|
||||||
|
|
||||||
|
|
||||||
|
(defprotocol Finders
|
||||||
|
(find-one [input] "Finds one file using given input (an ObjectId, filename or query)")
|
||||||
|
(find-one-as-map [input] "Finds one file using given input (an ObjectId, filename or query), converting result to Clojure map before returning"))
|
||||||
|
|
||||||
|
(extend-protocol Finders
|
||||||
|
String
|
||||||
|
(find-one [^String input]
|
||||||
|
(.findOne ^GridFS monger.core/*mongodb-gridfs* input))
|
||||||
|
(find-one-as-map [^String input]
|
||||||
|
(from-db-object (find-one input) true))
|
||||||
|
|
||||||
|
org.bson.types.ObjectId
|
||||||
|
(find-one [^org.bson.types.ObjectId input]
|
||||||
|
(.findOne ^GridFS monger.core/*mongodb-gridfs* input))
|
||||||
|
(find-one-as-map [^org.bson.types.ObjectId input]
|
||||||
|
(from-db-object (find-one input) true))
|
||||||
|
|
||||||
|
|
||||||
|
DBObject
|
||||||
|
(find-one [^DBObject input]
|
||||||
|
(.findOne ^GridFS monger.core/*mongodb-gridfs* input))
|
||||||
|
(find-one-as-map [^DBObject input]
|
||||||
|
(from-db-object (find-one input) true)))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,12 +3,12 @@
|
||||||
(:use [clojure.test]
|
(:use [clojure.test]
|
||||||
[monger.core :only [count]]
|
[monger.core :only [count]]
|
||||||
[monger.test.fixtures]
|
[monger.test.fixtures]
|
||||||
[monger.operators]
|
[monger operators conversion]
|
||||||
[monger.gridfs :only (store make-input-file)])
|
[monger.gridfs :only (store make-input-file)])
|
||||||
(:require [monger.gridfs :as gridfs]
|
(:require [monger.gridfs :as gridfs]
|
||||||
[monger.test.helper :as helper]
|
[monger.test.helper :as helper]
|
||||||
[clojure.java.io :as io])
|
[clojure.java.io :as io])
|
||||||
(:import [java.io InputStream]
|
(:import [java.io InputStream File]
|
||||||
[com.mongodb.gridfs GridFS GridFSInputFile]))
|
[com.mongodb.gridfs GridFS GridFSInputFile]))
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -48,3 +48,33 @@
|
||||||
(.setFilename "monger.test.gridfs.file3")
|
(.setFilename "monger.test.gridfs.file3")
|
||||||
(.setContentType "application/octet-stream"))
|
(.setContentType "application/octet-stream"))
|
||||||
(is (= 1 (count (gridfs/all-files))))))
|
(is (= 1 (count (gridfs/all-files))))))
|
||||||
|
|
||||||
|
(deftest test-storing-files-to-gridfs-using-absolute-fs-paths
|
||||||
|
(let [tmp-file (File/createTempFile "monger.test.gridfs" "test-storing-files-to-gridfs-using-absolute-fs-paths")
|
||||||
|
_ (spit tmp-file "Some content")
|
||||||
|
input (.getAbsolutePath tmp-file)]
|
||||||
|
(is (= 0 (count (gridfs/all-files))))
|
||||||
|
(store (make-input-file input)
|
||||||
|
(.setFilename "monger.test.gridfs.file4")
|
||||||
|
(.setContentType "application/octet-stream"))
|
||||||
|
(is (= 1 (count (gridfs/all-files))))))
|
||||||
|
|
||||||
|
(deftest test-finding-individual-files-on-gridfs
|
||||||
|
(let [input "./test/resources/mongo/js/mapfun1.js"
|
||||||
|
ct "binary/octet-stream"
|
||||||
|
filename "monger.test.gridfs.file5"
|
||||||
|
md5 "14a09deabb50925a3381315149017bbd"
|
||||||
|
stored (store (make-input-file input)
|
||||||
|
(.setFilename filename)
|
||||||
|
(.setContentType ct))]
|
||||||
|
(is (= 1 (count (gridfs/all-files))))
|
||||||
|
(is (:_id stored))
|
||||||
|
(is (:uploadDate stored))
|
||||||
|
(is (= 62 (:length stored)))
|
||||||
|
(is (= md5 (:md5 stored)))
|
||||||
|
(is (= filename (:filename stored)))
|
||||||
|
(is (= ct (:contentType stored)))
|
||||||
|
(are [a b] (is (= a (:md5 (gridfs/find-one-as-map b))))
|
||||||
|
md5 (:_id stored)
|
||||||
|
md5 filename
|
||||||
|
md5 (to-db-object { :md5 md5 }))))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue