Skip to content

Commit 19d4819

Browse files
committed
docs updated
1 parent 73211f5 commit 19d4819

File tree

10 files changed

+80
-27
lines changed

10 files changed

+80
-27
lines changed

src/main/paradox/features/aggregation.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Features - Aggregation
1+
# Feature - Aggregation
22

33
## Info
44

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Features - BSON Converter
1+
# Feature - BSON Converter
22

33
## Info
44

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# Feature - Observable
2+
3+
## Info
4+
5+
@@@ note { title=MongoDB_Scala_Driver_Documentation }
6+
7+
The MongoDB Scala Driver is an asynchronous and non blocking driver. Using the Observable model asynchronous events become simple, composable operations, freed from the complexity of nested callbacks.
8+
@@@
9+
10+
See [MongoDB Scala Driver Documentation](http://mongodb.github.io/mongo-scala-driver/2.4/reference/observables/).
11+
12+
13+
## Dealing with Observables
14+
15+
### As Future
16+
17+
```scala
18+
19+
def findAllRestaurants: Future[Seq[Restaurant]] =
20+
RestaurantDAO.find().asFuture()
21+
22+
```
23+
24+
### Result Functions
25+
26+
Convert Observable to result object. Import mongo package is needed.
27+
28+
Functions headResult anf resultList have an optional maxWait in seconds parameter (Default maxWait = 10 seconds).
29+
30+
```scala
31+
import com.sfxcode.nosql.mongo._
32+
33+
def restaurantsSize = RestaurantDAO.count().headResult()
34+
35+
def findAllRestaurants = RestaurantDAO.find().resultList(maxWait = 20)
36+
37+
```
38+
39+
### Implicit Result Functions
40+
41+
Implicit result conversion to a given type. Import mongo package is needed.
42+
43+
```scala
44+
import com.sfxcode.nosql.mongo._
45+
46+
def restaurantsSize: Long = RestaurantDAO.count()
47+
48+
def findAllRestaurants:List[Restaurant] = RestaurantDAO.find()
49+
50+
```

src/main/paradox/features/relationships.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Features - Relationships
1+
# Feature - Relationships
22

33
## Info
44

src/main/paradox/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ libraryDependencies += "com.sfxcode.nosql" %% "simple-mongo" % $app-version$
4949
- [GridFSDAO CRUD](gridfs/crud.md)
5050
- [Feature Aggregation](features/aggregation.md)
5151
- [Feature Relationships](features/relationships.md)
52+
- [Feature Observable](features/observable.md)
5253
- [Tutorial Setup](tutorial/setup.md)
5354
- [Tutorial Database](tutorial/database.md)
5455
- [Tutorial Functions](tutorial/functions.md)
Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,29 @@
11
package com.sfxcode.nosql.mongo.database
22

33
import com.sfxcode.nosql.mongo.bson.codecs.CustomCodecProvider
4-
import org.bson.codecs.configuration.CodecRegistries.fromProviders
4+
import org.bson.codecs.configuration.CodecRegistries.{ fromProviders, fromRegistries }
55
import org.bson.codecs.configuration.CodecRegistry
66
import org.mongodb.scala.bson.codecs.DEFAULT_CODEC_REGISTRY
7-
import org.mongodb.scala.{ MongoClient, MongoDatabase }
7+
import org.mongodb.scala.{ MongoClient, MongoDatabase, Observable }
88

9-
case class DatabaseProvider(databaseName: String, registry: CodecRegistry = DEFAULT_CODEC_REGISTRY, client: MongoClient = MongoClient()) {
9+
class DatabaseProvider(databaseName: String, registry: CodecRegistry, client: MongoClient) {
1010

11-
import org.bson.codecs.configuration.CodecRegistries.fromRegistries
12-
import org.mongodb.scala.bson.codecs.DEFAULT_CODEC_REGISTRY
11+
val database: MongoDatabase = client.getDatabase(databaseName).withCodecRegistry(registry)
1312

13+
def listDatabaseNames(): Observable[String] = client.listDatabaseNames()
14+
15+
}
16+
17+
object DatabaseProvider {
1418
private val CustomRegistry = fromProviders(CustomCodecProvider())
19+
private val codecRegistry: CodecRegistry = fromRegistries(CustomRegistry, DEFAULT_CODEC_REGISTRY)
1520

16-
val codecRegistry: CodecRegistry = {
17-
if (registry == DEFAULT_CODEC_REGISTRY)
18-
fromRegistries(registry, CustomRegistry)
19-
else
20-
fromRegistries(registry, CustomRegistry, DEFAULT_CODEC_REGISTRY)
21+
def apply(databaseName: String): DatabaseProvider = {
22+
new DatabaseProvider(databaseName, codecRegistry, MongoClient())
2123
}
2224

23-
val database: MongoDatabase = client.getDatabase(databaseName).withCodecRegistry(codecRegistry)
25+
def apply(databaseName: String, registry: CodecRegistry, client: MongoClient = MongoClient()): DatabaseProvider = {
26+
new DatabaseProvider(databaseName, fromRegistries(registry, CustomRegistry, DEFAULT_CODEC_REGISTRY), client)
27+
}
2428

25-
}
29+
}

src/main/scala/com/sfxcode/nosql/mongo/gridfs/Base.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@ abstract class Base extends LazyLogging {
2121
}
2222

2323
def downloadToStream(oid: ObjectId, outputPath: Path, openOptions: Seq[OpenOption] = List(StandardOpenOption.CREATE, StandardOpenOption.WRITE)): Observable[Long] = {
24-
var result: Long = -1
25-
var streamToDownloadTo: AsynchronousFileChannel = AsynchronousFileChannel.open(outputPath, openOptions: _*)
24+
val streamToDownloadTo: AsynchronousFileChannel = AsynchronousFileChannel.open(outputPath, openOptions: _*)
2625
gridfsBucket.downloadToStream(oid, channelToOutputStream(streamToDownloadTo))
2726
}
2827

src/main/scala/com/sfxcode/nosql/mongo/package.scala

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ import com.sfxcode.nosql.mongo.operation.ObservableIncludes
66
import org.bson.BsonValue
77
import org.bson.types.ObjectId
88
import org.mongodb.scala.bson.conversions.Bson
9-
import org.mongodb.scala.gridfs.{ GridFSFile, GridFSFindObservable }
10-
import org.mongodb.scala.{ Document, FindObservable, MongoDatabase, Observable }
9+
import org.mongodb.scala.gridfs.{GridFSFile, GridFSFindObservable}
10+
import org.mongodb.scala.{Document, FindObservable, MongoDatabase, Observable, ObservableImplicits}
1111

1212
import scala.collection.JavaConverters._
1313
import scala.language.implicitConversions
1414

15-
package object mongo extends ObservableIncludes {
15+
package object mongo extends ObservableIncludes with ObservableImplicits {
1616

1717
implicit def observableToResult[T](obs: Observable[T]): T = obs.headResult()
1818

@@ -58,17 +58,17 @@ package object mongo extends ObservableIncludes {
5858
BsonConverter.asMapList(documents)
5959
}
6060

61+
// ObjectId
6162
implicit def stringToObjectId(str: String): ObjectId = new ObjectId(str)
6263

6364
implicit def documentToObjectId(doc: Document): ObjectId = doc.getObjectId("_id")
6465

6566
// gridfs
6667

67-
implicit def gridFSindObservableToFiles(observable:GridFSFindObservable):List[GridFSFile] = observable.resultList()
68+
implicit def gridFSFindObservableToFiles(observable: GridFSFindObservable): List[GridFSFile] = observable.resultList()
6869

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

70-
implicit def gridfSFileToObjectId(file: GridFSFile): ObjectId = file.getObjectId
71-
72-
implicit def gridfSFileToBSonIdValue(file: GridFSFile): BsonValue = file.getId
72+
implicit def gridFSFileToBSonIdValue(file: GridFSFile): BsonValue = file.getId
7373

7474
}

src/test/scala/com/sfxcode/nosql/mongo/demo/restaurant/RestaurantDemoDatabaseFunctions.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import com.sfxcode.nosql.mongo.demo.restaurant.RestaurantDemoDatabase._
88
import com.sfxcode.nosql.mongo._
99
// #import
1010

11-
1211
trait RestaurantDemoDatabaseFunctions {
1312

1413
// #trait

src/test/scala/com/sfxcode/nosql/mongo/gridfs/GridFSDatabaseSpec.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@ class GridFSDatabaseSpec extends Specification with GridfsDatabaseFunctions with
1818

1919
}
2020

21-
"find files by metadata valuein" in {
21+
"find files by metadata value in" in {
2222
val fileName = "scala-logo.jpg"
2323

2424
var files = findImages("group", "unknown")
2525
files must haveSize(0)
2626

27-
files = findImages("group", "templates")
27+
files = findImages("group", "logos")
2828
files must haveSize(1)
2929
}
3030

0 commit comments

Comments
 (0)