Skip to content

Instantly share code, notes, and snippets.

@alexflav23
Last active December 28, 2015 02:49
Show Gist options
  • Save alexflav23/7430401 to your computer and use it in GitHub Desktop.
Save alexflav23/7430401 to your computer and use it in GitHub Desktop.
package whatever;
import java.util.{ List => JList, Map => JMap }
import com.foursquare.rogue.LiftRogue._
import com.foursquare.rogue.{
AbstractQueryField,
AbstractModifyField,
EqClause,
ModifyClause,
ModOps,
QueryHelpers
}
import net.liftweb.json.DefaultFormats;
import net.liftweb.json.JObject;
import net.liftweb.json.Extraction.decompose
import net.liftweb.http.js.JsExp;
import net.liftweb.record.Field;
import net.liftweb.mongodb.record.BsonRecord;
import net.liftweb.mongodb.record.field.{ Password, MongoPasswordField }
import net.liftweb.record.field.PasswordField
import com.foursquare.rogue.LiftRogue._
object RogueExtensions {
class EnumCaseClassModifyField[M <: BsonRecord[M]](field: RField[MyCaseClassWithEnum, M]) extends AbstractModifyField[MyCaseClassWithEnum, String, JMap[String, MyEnum#Value], M)(field) {
override def valueToDB(value: MyCaseClassWithEnum): JMap[String, MyEnum#Value] {
val map = Map("name" -> value.name, "value" -> value.value)
QueryHelpers.makeJavaMap(map);
}
override def setTo(p: MyCaseClassWithEnum): ModifyClause = {
val map = Map("name" -> p.name, "value" -> p.value);
new ModifyClause(ModOps.Set, field.name -> QueryHelpers.makeJavaMap(map))
}
}
implicit def enumFieldToModifyField[M <: BsonRecord[M]](f: Field[MyCaseClassWithEnum, M]): EnumCaseClassModifyField[M] = new EnumCaseClassModifyField(f);
implicit def rogueEnumFieldToModifyField[M <: BsonRecord[M]])(f: RField[MyCaseClassWithEnum, M]): EnumCaseClassModifyField[M] = new EnumCaseClassModifyField(f);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment