Skip to content

Commit

Permalink
refactor: DocumentIncludes and MongoImplicits to own files
Browse files Browse the repository at this point in the history
  • Loading branch information
QuadStingray committed Mar 28, 2023
1 parent e567be7 commit 753a633
Show file tree
Hide file tree
Showing 6 changed files with 87 additions and 82 deletions.
53 changes: 53 additions & 0 deletions src/main/scala/dev/mongocamp/driver/DocumentIncludes.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package dev.mongocamp.driver

import dev.mongocamp.driver.mongodb.Converter
import dev.mongocamp.driver.mongodb.bson.BsonConverter
import dev.mongocamp.driver.mongodb.database.DatabaseProvider
import org.bson.types.ObjectId
import org.mongodb.scala.Document
import org.mongodb.scala.bson.conversions.Bson

import scala.jdk.CollectionConverters._
import scala.language.implicitConversions
trait DocumentIncludes {
implicit def mapToBson(value: Map[_, _]): Bson = Converter.toDocument(value)

implicit def documentFromJavaMap(map: java.util.Map[String, Any]): Document =
documentFromScalaMap(map.asScala.toMap)

implicit def documentFromMutableMap(map: collection.mutable.Map[String, Any]): Document =
documentFromScalaMap(map.toMap)

implicit def documentFromScalaMap(map: Map[String, Any]): Document = {
var result = Document()
map.keys.foreach { key =>
val v = map.getOrElse(key, null)
result.+=(key -> BsonConverter.toBson(v))
}
result
}

implicit def documentFromDocument(doc: org.bson.Document): Document = {
var result = Document()
doc
.keySet()
.asScala
.foreach { key =>
val v = doc.get(key)
result.+=(key -> BsonConverter.toBson(v))
}
result
}

implicit def mapFromDocument(document: Document): Map[String, Any] =
BsonConverter.asMap(document)

implicit def mapListFromDocuments(documents: List[Document]): List[Map[String, Any]] =
BsonConverter.asMapList(documents)

// ObjectId
implicit def stringToObjectId(str: String): ObjectId = new ObjectId(str)

implicit def documentToObjectId(doc: Document): ObjectId =
doc.getObjectId(DatabaseProvider.ObjectIdKey)
}
29 changes: 29 additions & 0 deletions src/main/scala/dev/mongocamp/driver/MongoImplicits.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package dev.mongocamp.driver

import dev.mongocamp.driver.mongodb.operation.ObservableIncludes
import org.bson.BsonValue
import org.bson.types.ObjectId
import org.mongodb.scala.gridfs.{GridFSFile, GridFSFindObservable}
import org.mongodb.scala.{FindObservable, Observable, ObservableImplicits}

import scala.language.implicitConversions
trait MongoImplicits extends ObservableIncludes with ObservableImplicits {

implicit def observableToResult[T](obs: Observable[T]): T = obs.result()

implicit def findObservableToResultList[T](obs: FindObservable[T]): List[T] =
obs.resultList()

implicit def findObservableToResultOption[T](obs: FindObservable[T]): Option[T] = obs.resultOption()

// gridfs

implicit def gridFSFindObservableToFiles(observable: GridFSFindObservable): List[GridFSFile] =
observable.resultList()

implicit def gridFSFileToObjectId(file: GridFSFile): ObjectId =
file.getObjectId

implicit def gridFSFileToBSonIdValue(file: GridFSFile): BsonValue = file.getId

}
79 changes: 3 additions & 76 deletions src/main/scala/dev/mongocamp/driver/mongodb/package.scala
Original file line number Diff line number Diff line change
@@ -1,21 +1,12 @@
package dev.mongocamp.driver

import java.util.Date

import dev.mongocamp.driver.mongodb.Converter
import dev.mongocamp.driver.mongodb.bson.BsonConverter
import dev.mongocamp.driver.mongodb.bson.convert.JsonDateTimeConverter
import dev.mongocamp.driver.mongodb.database.{ DatabaseProvider, MongoConfig }
import dev.mongocamp.driver.mongodb.gridfs.GridFSStreamObserver
import dev.mongocamp.driver.mongodb.operation.ObservableIncludes
import org.bson.BsonValue
import org.bson.json.{ JsonMode, JsonWriterSettings }
import org.bson.types.ObjectId
import org.mongodb.scala.bson.conversions.Bson
import org.mongodb.scala.gridfs.{ GridFSFile, GridFSFindObservable }
import org.mongodb.scala.{ Document, FindObservable, Observable, ObservableImplicits }
import org.bson.json.{JsonMode, JsonWriterSettings}
import org.mongodb.scala.Document

import scala.jdk.CollectionConverters._
import java.util.Date
import scala.language.implicitConversions

package object mongodb extends ObservableIncludes with DocumentIncludes {
Expand Down Expand Up @@ -73,67 +64,3 @@ package object mongodb extends ObservableIncludes with DocumentIncludes {
def updateValue(key: String, value: Any): Any = BsonConverter.updateDocumentValue(document, key, value)
}
}

trait MongoImplicits extends ObservableIncludes with ObservableImplicits {

implicit def observableToResult[T](obs: Observable[T]): T = obs.result()

implicit def findObservableToResultList[T](obs: FindObservable[T]): List[T] =
obs.resultList()

implicit def findObservableToResultOption[T](obs: FindObservable[T]): Option[T] = obs.resultOption()

// gridfs

implicit def gridFSFindObservableToFiles(observable: GridFSFindObservable): List[GridFSFile] =
observable.resultList()

implicit def gridFSFileToObjectId(file: GridFSFile): ObjectId =
file.getObjectId

implicit def gridFSFileToBSonIdValue(file: GridFSFile): BsonValue = file.getId

}

trait DocumentIncludes {
implicit def mapToBson(value: Map[_, _]): Bson = Converter.toDocument(value)

implicit def documentFromJavaMap(map: java.util.Map[String, Any]): Document =
documentFromScalaMap(map.asScala.toMap)

implicit def documentFromMutableMap(map: collection.mutable.Map[String, Any]): Document =
documentFromScalaMap(map.toMap)

implicit def documentFromScalaMap(map: Map[String, Any]): Document = {
var result = Document()
map.keys.foreach { key =>
val v = map.getOrElse(key, null)
result.+=(key -> BsonConverter.toBson(v))
}
result
}

implicit def documentFromDocument(doc: org.bson.Document): Document = {
var result = Document()
doc
.keySet()
.asScala
.foreach { key =>
val v = doc.get(key)
result.+=(key -> BsonConverter.toBson(v))
}
result
}

implicit def mapFromDocument(document: Document): Map[String, Any] =
BsonConverter.asMap(document)

implicit def mapListFromDocuments(documents: List[Document]): List[Map[String, Any]] =
BsonConverter.asMapList(documents)

// ObjectId
implicit def stringToObjectId(str: String): ObjectId = new ObjectId(str)

implicit def documentToObjectId(doc: Document): ObjectId =
doc.getObjectId(DatabaseProvider.ObjectIdKey)
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,12 @@ package dev.mongocamp.driver.mongodb.dao

import better.files.{File, Resource}
import dev.mongocamp.driver.MongoImplicits
import dev.mongocamp.driver.mongodb._
import dev.mongocamp.driver.mongodb.model.Student
import dev.mongocamp.driver.mongodb.server.LocalServer
import dev.mongocamp.driver.mongodb.test.UniversityDatabase
import dev.mongocamp.driver.mongodb.test.UniversityDatabase.{GradeDAO, StudentDAO}
import org.specs2.mutable.Specification
import org.specs2.specification.core.Fragments
import org.specs2.specification.{AfterAll, AfterSpec, BeforeAll}
import org.specs2.specification.{AfterAll, BeforeAll}

class StudentDAOSpec extends Specification with BeforeAll with AfterAll with MongoImplicits {
sequential
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package dev.mongocamp.driver.mongodb.operation

import dev.mongocamp.driver.MongoImplicits
import dev.mongocamp.driver.mongodb.Sort._
import dev.mongocamp.driver.mongodb.test.TestDatabase._
import dev.mongocamp.driver.mongodb._
import dev.mongocamp.driver.mongodb.dao.PersonSpecification
import dev.mongocamp.driver.mongodb.model.Person
import dev.mongocamp.driver.mongodb.test.TestDatabase._

class SearchSpec extends PersonSpecification with MongoImplicits {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
package dev.mongocamp.driver.mongodb.pagination

import dev.mongocamp.driver.MongoImplicits
import dev.mongocamp.driver.mongodb.Sort._
import dev.mongocamp.driver.mongodb._
Expand Down

0 comments on commit 753a633

Please sign in to comment.