Extractor for BSON property,
allowing partial and un-ordered match by name.
Rich match syntax ~(Property(name), ...) requires use of
http://acolyte.eu.org/scalac-plugin.html
import reactivemongo.api.bson.{ BSONInteger, BSONString }
import acolyte.reactivemongo.{
PreparedResponse, Property, Request, SimpleBody, ValueDocument, &
}
val EmailXtr = Property("email") // Without scalac plugindef resultA: PreparedResponse = ???
def resultB: PreparedResponse = ???
def resultC: PreparedResponse = ???
def resultD: PreparedResponse = ???
def resultE: PreparedResponse = ???
def check(request: Request) = request match {
case Request("db.col", SimpleBody(~(Property("email"), BSONString(e)))) =>// Request on db.col with an "email" string property,// anywhere in properties (possibly with others which are ignored there),// with `e` bound to extracted string value.
resultA
case Request("db.col", SimpleBody(EmailXtr(BSONString(e)))) =>// Request on db.col with an "email" string property,// anywhere in properties (possibly with others which are ignored there),// with `e` bound to extracted string value.
resultB // similar to case resultA without scalac plugincase Request("db.col", SimpleBody(
~(Property("name"), BSONString("eman")))) =>// Request on db.col with an "name" string property with "eman" as value,// anywhere in properties (possibly with others which are ignored there).
resultC
case Request(colName, SimpleBody(
~(Property("age"), BSONInteger(age)) &
~(Property("email"), BSONString(v)))) =>// Request on any collection, with an "age" integer property// and an "email" string property, possibly not in this order.
resultD
case Request(colName, SimpleBody(
~(Property("age"), ValueDocument(
~(Property("\$gt"), BSONInteger(minAge)))) &
~(Property("email"), BSONString("[email protected]")))) =>// Request on any collection, with an "age" property with itself// a operator property "\$gt" having an integer value, and an "email"// property (at the same level as age), without order constraint.
resultE
}
Extractor for BSON property, allowing partial and un-ordered match by name. Rich match syntax
~(Property(name), ...)
requires use of http://acolyte.eu.org/scalac-plugin.htmlValueDocument
&