Skip to content

Commit

Permalink
- Migrated Logging into core and out of commons
Browse files Browse the repository at this point in the history
- Fixed an issue with Bareword Query operators not functioning due to where they were placed.
  • Loading branch information
bwmcadams committed Sep 4, 2010
1 parent 290cacf commit 8bd6364
Show file tree
Hide file tree
Showing 16 changed files with 56 additions and 51 deletions.
10 changes: 2 additions & 8 deletions casbah-commons/src/main/scala/MongoDBObject.scala
Expand Up @@ -23,7 +23,6 @@ package com.novus.casbah
package commons

import com.novus.casbah.commons.Imports._
import com.novus.casbah.commons.util.Logging

import scala.annotation.tailrec
import scala.collection.JavaConversions._
Expand All @@ -46,7 +45,7 @@ import scala.reflect._
* @tparam Object
*/
@BeanInfo
trait MongoDBObject extends Map[String, AnyRef] with Logging {
trait MongoDBObject extends Map[String, AnyRef] {
val underlying: DBObject

def iterator = underlying.toMap.iterator.asInstanceOf[Iterator[(String, Object)]]
Expand Down Expand Up @@ -78,18 +77,13 @@ trait MongoDBObject extends Map[String, AnyRef] with Logging {
require(manifest[A] != manifest[scala.Nothing], "Type inference failed; expand[A]() requires an explicit type argument (e.g. dbObject[<ReturnType](\"someKey\") ) to function correctly.")
@tailrec def _dot(dbObj: MongoDBObject, key: String): Option[_] =
if (key.indexOf('.') < 0) {
log.trace("_dot returning on key '%s'", key)
dbObj.getAs[AnyRef](key)
}
else {
val (pfx, sfx) = key.splitAt(key.indexOf('.'))
log.trace("_dot recursing on pfx: '%s', sfx: '%s'", pfx, sfx)
dbObj.getAs[DBObject](pfx) match {
case Some(base) => _dot(base, sfx.stripPrefix("."))
case None => {
log.debug("Split key '%s' to '%s' & '%s' but found no value in object.", key, pfx, sfx.stripPrefix("."));
None
}
case None => None
}
}

Expand Down
38 changes: 38 additions & 0 deletions casbah-commons/src/test/scala/MongoDBObjectSpec.scala
Expand Up @@ -75,6 +75,44 @@ class MongoDBObjectSpec extends Specification with PendingUntilFixed {
}
}

"MongoDBObject Factory & Builder" should {
"Support 'empty', returning a DBObject" in {
val dbObj = MongoDBObject.empty

dbObj must haveSuperClass[DBObject]
dbObj must haveSize(0)
}
"support a 2.8 factory interface which returns a DBObject" in {
val dbObj = MongoDBObject("x" -> 5, "y" -> 212.8, "spam" -> "eggs",
"embedded" -> MongoDBObject("foo" -> "bar"))
// A Java version to compare with
val jBldr = new com.mongodb.BasicDBObjectBuilder
jBldr.add("x", 5)
jBldr.add("y", 212.8)
jBldr.add("spam", "eggs")
jBldr.add("embedded", new com.mongodb.BasicDBObject("foo", "bar"))
val jObj = jBldr.get

dbObj must haveSuperClass[DBObject]
jObj must haveSuperClass[DBObject]
dbObj must beEqualTo(jObj)
}
"Support a 2.8 builder interface which returns a DBObject" in {
val builder = MongoDBObject.newBuilder

builder += "foo" -> "bar"
builder += "x" -> 5
builder += "y" -> 212.8

builder ++= List("spam" -> "eggs", "type erasure" -> "sucks", "omg" -> "ponies!")

val dbObj = builder.result

dbObj must haveSuperClass[DBObject]
dbObj must haveSize(6)
}
}

}


Expand Down
Expand Up @@ -18,7 +18,6 @@
*/

package com.novus.casbah
package commons
package util

import net.lag.logging.Logger
Expand Down
2 changes: 1 addition & 1 deletion casbah-core/src/main/scala/MongoCollection.scala
Expand Up @@ -22,7 +22,7 @@
package com.novus.casbah

import com.novus.casbah.Imports._
import com.novus.casbah.commons.util.Logging
import com.novus.casbah.util.Logging

import com.novus.casbah.map_reduce.{MapReduceResult, MapReduceCommand}

Expand Down
2 changes: 1 addition & 1 deletion casbah-core/src/main/scala/MongoDB.scala
Expand Up @@ -22,7 +22,7 @@
package com.novus.casbah

import com.novus.casbah.Imports._
import com.novus.casbah.commons.util.Logging
import com.novus.casbah.util.Logging

import scalaj.collection.Imports._

Expand Down
2 changes: 1 addition & 1 deletion casbah-core/src/main/scala/conversions/Helpers.scala
Expand Up @@ -22,7 +22,7 @@
package com.novus.casbah
package conversions

import com.novus.casbah.commons.util.Logging
import com.novus.casbah.util.Logging


trait MongoConversionHelper extends Logging {
Expand Down
2 changes: 1 addition & 1 deletion casbah-core/src/main/scala/conversions/MonkeyPatches.scala
Expand Up @@ -19,7 +19,7 @@
*
*/

import com.novus.casbah.commons.util.Logging
import com.novus.casbah.util.Logging

import org.bson.{BSON, Transformer}

Expand Down
Expand Up @@ -24,7 +24,7 @@ package conversions
package scala

import com.novus.casbah.Imports._
import com.novus.casbah.commons.util.Logging
import com.novus.casbah.util.Logging

import org.bson.{BSON, Transformer}

Expand Down
Expand Up @@ -19,7 +19,7 @@ package com.novus.casbah
package map_reduce

import com.novus.casbah.Imports._
import com.novus.casbah.commons.util.Logging
import com.novus.casbah.util.Logging

import scalaj.collection.Imports._

Expand Down
Expand Up @@ -19,7 +19,7 @@ package com.novus.casbah
package map_reduce

import com.novus.casbah.Imports._
import com.novus.casbah.commons.util.Logging
import com.novus.casbah.util.Logging

import scalaj.collection.Imports._

Expand Down
2 changes: 1 addition & 1 deletion casbah-gridfs/src/main/scala/GridFS.scala
Expand Up @@ -24,7 +24,7 @@ package gridfs

import com.novus.casbah.Imports._
import com.novus.casbah.gridfs.Imports._
import com.novus.casbah.commons.util.Logging
import com.novus.casbah.util.Logging

import com.mongodb.DBObject
import com.mongodb.gridfs.{GridFS => MongoGridFS, GridFSDBFile => MongoGridFSDBFile, GridFSFile => MongoGridFSFile, GridFSInputFile => MongoGridFSInputFile}
Expand Down
2 changes: 1 addition & 1 deletion casbah-mapper/src/main/scala/mapper/Mapper.scala
Expand Up @@ -17,7 +17,7 @@ import _root_.scala.math.{BigDecimal => ScalaBigDecimal}
import java.math.{BigDecimal => JavaBigDecimal, RoundingMode, MathContext}

import annotations.raw._
import commons.util.Logging
import util.Logging
import Imports._

object Mapper extends Logging {
Expand Down
4 changes: 1 addition & 3 deletions casbah-mapper/src/test/scala/MapperSpec.scala
Expand Up @@ -13,8 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
* NOTICE: Portions of this work are derived from the Apache License 2.0 "mongo-scala-driver" work
* by Alexander Azarov <azarov@osinka.ru>, available from http://github.com/alaz/mongo-scala-driver
*/

package com.novus.casbah
Expand All @@ -37,7 +35,7 @@ import java.math.BigInteger
import Imports._
import mapper.Mapper
import mapper.annotations._
import commons.util.Logging
import com.novus.casbah.util.Logging

import org.apache.commons.lang.RandomStringUtils.{randomAscii => rs}
import org.apache.commons.lang.math.RandomUtils.{nextInt => rn}
Expand Down
29 changes: 3 additions & 26 deletions casbah-query/src/main/scala/BarewordOperators.scala
Expand Up @@ -23,7 +23,6 @@ package com.novus.casbah
package query

import com.novus.casbah.commons.Imports._
import com.novus.casbah.commons.util.Logging

import scala.collection.JavaConversions._

Expand All @@ -41,42 +40,20 @@ import scala.collection.JavaConversions._
* @since 1.0
* @see SetOp
*/
trait BarewordQueryOperator extends Logging {
trait BarewordQueryOperator {

/*
* TODO - Implicit filtering of 'valid' (aka convertable) types for [A]
*/
def apply[A](oper: String)(fields: (String, A)*): DBObject = {
log.trace("Apply - %s", fields)
def apply[A](oper: String)(fields: (String, A)*) = {
val bldr = MongoDBObject.newBuilder
for ((k, v) <- fields) bldr += k -> v
MongoDBObject(oper -> bldr.result.asDBObject).asDBObject
MongoDBObject(oper -> bldr.result.asDBObject)
}

}


/*[>*
* A "Targetted" Bareword Query Operator.
*
* Specifically, operators who only target a field - they don't specify a value
*
* $unset is an example of this, where you simply specify the fields to Unset.
* While in the MongoDB Shell you would say {$unset: {"Foo": 1}} why bother in Scala?
* The 1 is implied.
*
* @author Brendan W. McAdams <bmcadams@novus.com>
* @version 1.0, 06/17/10
* @since 1.0
<]
trait BarewordTargetedQueryOperator extends BarewordQueryOperator {
def apply[A](oper: String)(fields: A*) = {
val invoc = super.apply(oper)_
log.debug("Invocation object: %s", invoc)
invoc
}
}
*/
/**
* Aggregation object for Bareword Operators.
* Bareword operators stand on their own - they lack the requirement for an LValue.
Expand Down
1 change: 0 additions & 1 deletion casbah-query/src/main/scala/CoreOperators.scala
Expand Up @@ -19,7 +19,6 @@ package com.novus.casbah
package query

import com.novus.casbah.commons.Imports._
import com.novus.casbah.commons.util.Logging

import com.mongodb.{DBObject, BasicDBObjectBuilder}
import scalaj.collection.Imports._
Expand Down
6 changes: 3 additions & 3 deletions casbah-query/src/main/scala/Implicits.scala
Expand Up @@ -27,7 +27,7 @@ import com.novus.casbah.commons.Imports._

import scalaj.collection.Imports._

trait Implicits {
trait Implicits extends FluidQueryBarewordOps {

/**
* Implicit extension methods for String values (e.g. a field name)
Expand Down Expand Up @@ -62,7 +62,7 @@ trait Implicits {
* @param left A string which should be the field name, the left hand of the query
* @return Tuple2[String, DBObject] A tuple containing the field name and the mapped operator value, suitable for instantiating a Map
*/
implicit def mongoNestedQueryStatements(nested: Tuple2[String, DBObject]) = new {
implicit def mongoNestedTupledQueryStatements(nested: Tuple2[String, DBObject]) = new {
val field = nested._1
} with FluidQueryOperators {
dbObj = Some(nested._2)
Expand All @@ -71,7 +71,7 @@ trait Implicits {

}

object Implicits extends Implicits with commons.Implicits with FluidQueryBarewordOps
object Implicits extends Implicits with commons.Implicits
object Imports extends Imports with commons.Imports
object BaseImports extends BaseImports with commons.BaseImports
object TypeImports extends TypeImports with commons.TypeImports
Expand Down

0 comments on commit 8bd6364

Please sign in to comment.