Skip to content

Commit 753a633

Browse files
author
QuadStingray
committed
refactor: DocumentIncludes and MongoImplicits to own files
1 parent e567be7 commit 753a633

File tree

6 files changed

+87
-82
lines changed

6 files changed

+87
-82
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package dev.mongocamp.driver
2+
3+
import dev.mongocamp.driver.mongodb.Converter
4+
import dev.mongocamp.driver.mongodb.bson.BsonConverter
5+
import dev.mongocamp.driver.mongodb.database.DatabaseProvider
6+
import org.bson.types.ObjectId
7+
import org.mongodb.scala.Document
8+
import org.mongodb.scala.bson.conversions.Bson
9+
10+
import scala.jdk.CollectionConverters._
11+
import scala.language.implicitConversions
12+
trait DocumentIncludes {
13+
implicit def mapToBson(value: Map[_, _]): Bson = Converter.toDocument(value)
14+
15+
implicit def documentFromJavaMap(map: java.util.Map[String, Any]): Document =
16+
documentFromScalaMap(map.asScala.toMap)
17+
18+
implicit def documentFromMutableMap(map: collection.mutable.Map[String, Any]): Document =
19+
documentFromScalaMap(map.toMap)
20+
21+
implicit def documentFromScalaMap(map: Map[String, Any]): Document = {
22+
var result = Document()
23+
map.keys.foreach { key =>
24+
val v = map.getOrElse(key, null)
25+
result.+=(key -> BsonConverter.toBson(v))
26+
}
27+
result
28+
}
29+
30+
implicit def documentFromDocument(doc: org.bson.Document): Document = {
31+
var result = Document()
32+
doc
33+
.keySet()
34+
.asScala
35+
.foreach { key =>
36+
val v = doc.get(key)
37+
result.+=(key -> BsonConverter.toBson(v))
38+
}
39+
result
40+
}
41+
42+
implicit def mapFromDocument(document: Document): Map[String, Any] =
43+
BsonConverter.asMap(document)
44+
45+
implicit def mapListFromDocuments(documents: List[Document]): List[Map[String, Any]] =
46+
BsonConverter.asMapList(documents)
47+
48+
// ObjectId
49+
implicit def stringToObjectId(str: String): ObjectId = new ObjectId(str)
50+
51+
implicit def documentToObjectId(doc: Document): ObjectId =
52+
doc.getObjectId(DatabaseProvider.ObjectIdKey)
53+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package dev.mongocamp.driver
2+
3+
import dev.mongocamp.driver.mongodb.operation.ObservableIncludes
4+
import org.bson.BsonValue
5+
import org.bson.types.ObjectId
6+
import org.mongodb.scala.gridfs.{GridFSFile, GridFSFindObservable}
7+
import org.mongodb.scala.{FindObservable, Observable, ObservableImplicits}
8+
9+
import scala.language.implicitConversions
10+
trait MongoImplicits extends ObservableIncludes with ObservableImplicits {
11+
12+
implicit def observableToResult[T](obs: Observable[T]): T = obs.result()
13+
14+
implicit def findObservableToResultList[T](obs: FindObservable[T]): List[T] =
15+
obs.resultList()
16+
17+
implicit def findObservableToResultOption[T](obs: FindObservable[T]): Option[T] = obs.resultOption()
18+
19+
// gridfs
20+
21+
implicit def gridFSFindObservableToFiles(observable: GridFSFindObservable): List[GridFSFile] =
22+
observable.resultList()
23+
24+
implicit def gridFSFileToObjectId(file: GridFSFile): ObjectId =
25+
file.getObjectId
26+
27+
implicit def gridFSFileToBSonIdValue(file: GridFSFile): BsonValue = file.getId
28+
29+
}
Lines changed: 3 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,12 @@
11
package dev.mongocamp.driver
22

3-
import java.util.Date
4-
5-
import dev.mongocamp.driver.mongodb.Converter
63
import dev.mongocamp.driver.mongodb.bson.BsonConverter
74
import dev.mongocamp.driver.mongodb.bson.convert.JsonDateTimeConverter
8-
import dev.mongocamp.driver.mongodb.database.{ DatabaseProvider, MongoConfig }
9-
import dev.mongocamp.driver.mongodb.gridfs.GridFSStreamObserver
105
import dev.mongocamp.driver.mongodb.operation.ObservableIncludes
11-
import org.bson.BsonValue
12-
import org.bson.json.{ JsonMode, JsonWriterSettings }
13-
import org.bson.types.ObjectId
14-
import org.mongodb.scala.bson.conversions.Bson
15-
import org.mongodb.scala.gridfs.{ GridFSFile, GridFSFindObservable }
16-
import org.mongodb.scala.{ Document, FindObservable, Observable, ObservableImplicits }
6+
import org.bson.json.{JsonMode, JsonWriterSettings}
7+
import org.mongodb.scala.Document
178

18-
import scala.jdk.CollectionConverters._
9+
import java.util.Date
1910
import scala.language.implicitConversions
2011

2112
package object mongodb extends ObservableIncludes with DocumentIncludes {
@@ -73,67 +64,3 @@ package object mongodb extends ObservableIncludes with DocumentIncludes {
7364
def updateValue(key: String, value: Any): Any = BsonConverter.updateDocumentValue(document, key, value)
7465
}
7566
}
76-
77-
trait MongoImplicits extends ObservableIncludes with ObservableImplicits {
78-
79-
implicit def observableToResult[T](obs: Observable[T]): T = obs.result()
80-
81-
implicit def findObservableToResultList[T](obs: FindObservable[T]): List[T] =
82-
obs.resultList()
83-
84-
implicit def findObservableToResultOption[T](obs: FindObservable[T]): Option[T] = obs.resultOption()
85-
86-
// gridfs
87-
88-
implicit def gridFSFindObservableToFiles(observable: GridFSFindObservable): List[GridFSFile] =
89-
observable.resultList()
90-
91-
implicit def gridFSFileToObjectId(file: GridFSFile): ObjectId =
92-
file.getObjectId
93-
94-
implicit def gridFSFileToBSonIdValue(file: GridFSFile): BsonValue = file.getId
95-
96-
}
97-
98-
trait DocumentIncludes {
99-
implicit def mapToBson(value: Map[_, _]): Bson = Converter.toDocument(value)
100-
101-
implicit def documentFromJavaMap(map: java.util.Map[String, Any]): Document =
102-
documentFromScalaMap(map.asScala.toMap)
103-
104-
implicit def documentFromMutableMap(map: collection.mutable.Map[String, Any]): Document =
105-
documentFromScalaMap(map.toMap)
106-
107-
implicit def documentFromScalaMap(map: Map[String, Any]): Document = {
108-
var result = Document()
109-
map.keys.foreach { key =>
110-
val v = map.getOrElse(key, null)
111-
result.+=(key -> BsonConverter.toBson(v))
112-
}
113-
result
114-
}
115-
116-
implicit def documentFromDocument(doc: org.bson.Document): Document = {
117-
var result = Document()
118-
doc
119-
.keySet()
120-
.asScala
121-
.foreach { key =>
122-
val v = doc.get(key)
123-
result.+=(key -> BsonConverter.toBson(v))
124-
}
125-
result
126-
}
127-
128-
implicit def mapFromDocument(document: Document): Map[String, Any] =
129-
BsonConverter.asMap(document)
130-
131-
implicit def mapListFromDocuments(documents: List[Document]): List[Map[String, Any]] =
132-
BsonConverter.asMapList(documents)
133-
134-
// ObjectId
135-
implicit def stringToObjectId(str: String): ObjectId = new ObjectId(str)
136-
137-
implicit def documentToObjectId(doc: Document): ObjectId =
138-
doc.getObjectId(DatabaseProvider.ObjectIdKey)
139-
}

src/test/scala/dev/mongocamp/driver/mongodb/dao/StudentDAOSpec.scala

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@ package dev.mongocamp.driver.mongodb.dao
22

33
import better.files.{File, Resource}
44
import dev.mongocamp.driver.MongoImplicits
5-
import dev.mongocamp.driver.mongodb._
65
import dev.mongocamp.driver.mongodb.model.Student
76
import dev.mongocamp.driver.mongodb.server.LocalServer
87
import dev.mongocamp.driver.mongodb.test.UniversityDatabase
98
import dev.mongocamp.driver.mongodb.test.UniversityDatabase.{GradeDAO, StudentDAO}
109
import org.specs2.mutable.Specification
11-
import org.specs2.specification.core.Fragments
12-
import org.specs2.specification.{AfterAll, AfterSpec, BeforeAll}
10+
import org.specs2.specification.{AfterAll, BeforeAll}
1311

1412
class StudentDAOSpec extends Specification with BeforeAll with AfterAll with MongoImplicits {
1513
sequential

src/test/scala/dev/mongocamp/driver/mongodb/operation/SearchSpec.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
package dev.mongocamp.driver.mongodb.operation
2-
32
import dev.mongocamp.driver.MongoImplicits
43
import dev.mongocamp.driver.mongodb.Sort._
5-
import dev.mongocamp.driver.mongodb.test.TestDatabase._
64
import dev.mongocamp.driver.mongodb._
75
import dev.mongocamp.driver.mongodb.dao.PersonSpecification
86
import dev.mongocamp.driver.mongodb.model.Person
7+
import dev.mongocamp.driver.mongodb.test.TestDatabase._
98

109
class SearchSpec extends PersonSpecification with MongoImplicits {
1110

src/test/scala/dev/mongocamp/driver/mongodb/pagination/PaginationFilterSpec.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
package dev.mongocamp.driver.mongodb.pagination
2-
32
import dev.mongocamp.driver.MongoImplicits
43
import dev.mongocamp.driver.mongodb.Sort._
54
import dev.mongocamp.driver.mongodb._

0 commit comments

Comments
 (0)