Scala dsls-dissecting-and-implementing-rogue
-
Upload
konrad-malawski -
Category
Technology
-
view
339 -
download
0
description
Transcript of Scala dsls-dissecting-and-implementing-rogue
Konrad Malawski / @ktosoplGDG / PJUG / KSUG / SCKRK
ScalaCamp 23.01.2012
Scala DSLsDissecting Rogue
Wednesday, December 26, 12
Wednesday, December 26, 12
Querying Mongo
Wednesday, December 26, 12
Querying Mongo
Wednesday, December 26, 12
Querying Mongo
Wednesday, December 26, 12
QL = Plain JSON
Querying Mongo
Wednesday, December 26, 12
QL = Plain JSONJavaScript Console
Querying Mongo
Wednesday, December 26, 12
QL = Plain JSONJavaScript Console
Java Driver
Querying Mongo
Wednesday, December 26, 12
QL = Plain JSONJavaScript Console
Java DriverCasbah = Scala Driver
Querying Mongo
Wednesday, December 26, 12
QL = Plain JSONJavaScript Console
Java DriverCasbah = Scala Driver
... used by Rogue
Querying Mongo
Wednesday, December 26, 12
Querying Mongo: JS
Console API
Wednesday, December 26, 12
Querying Mongo: JS
db.inventory.find( {} )
Wednesday, December 26, 12
Querying Mongo: JS
db.inventory.find( {} )
“find all”
Wednesday, December 26, 12
Querying Mongo: JS
db.inventory.find( { qty: { $gt: 20 } } )
Wednesday, December 26, 12
Querying Mongo: JS
db.inventory.find( { qty: { $gt: 20 } } )
gt means >=
Wednesday, December 26, 12
Querying Mongo: JS
db.pople.find( { age: { $gte: 20 }, $or: [ { name: “Ken” }, { name: “Kenshiro” }, { city: “Tokyo” }, ... ] } )
Wednesday, December 26, 12
Querying Mongo: JS
db.pople.find( { age: { $gte: 20 }, $or: [ { name: “Ken” }, { name: “Kenshiro” }, { city: “Tokyo” }, ... ] } )
$or may contain any clause
Wednesday, December 26, 12
Querying Mongo: Java
Java API(Morhpia)
Wednesday, December 26, 12
Querying Mongo: Java
ds.find(Employee.class).field("manager").equal(null).get();
Wednesday, December 26, 12
Querying Mongo: Java
ds.find(Employee.class).field("manager").equal(null).get();
You call this typesafe!?
Wednesday, December 26, 12
Mongo with Rogue
Wednesday, December 26, 12
Rogue in Action
import com.foursquare.rogue.Rogue._
Wednesday, December 26, 12
Rogue in Action
Person where(_.age gte 18) limit(100) fetch()
Wednesday, December 26, 12
Rogue in Action
Person where(_.age gte 18) limit(100) fetch()
Code Completion
Code Completion
Code Completion
Code Completion
Wednesday, December 26, 12
Rogue in Action
Person where(_.age gte “Bazinga”) limit(100) fetch()
Wednesday, December 26, 12
Rogue in Action
Person where(_.age gte “Bazinga”) limit(100) fetch()
Won’t compile - age is IntField
Wednesday, December 26, 12
Rogue in Action
Person where(_.age gte 18) limit(100) fetch()
Wednesday, December 26, 12
Rogue in Action
Person where(_.age gte 18) limit(100) fetch()
Limit
Wednesday, December 26, 12
Rogue in Action
Person where(_.age gte 18) limit(100) foreach { p => println(”Name: ” + p.firstName)}
Wednesday, December 26, 12
Rogue in Action
Person where(_.age gte 18) limit(100) foreach { p => println(”Name: ” + p.firstName)}
gte means >=
Wednesday, December 26, 12
Rogue in Action
Person or( _.where(_.name eqs "Ken"), _.where(_.name eqs "ken") _.whereOpt(Option("Kenshiro")(_.name eqs _))) get()
Wednesday, December 26, 12
Rogue in Action
Person or( _.where(_.name eqs "Ken"), _.where(_.name eqs "ken") _.whereOpt(Option("Kenshiro")(_.name eqs _))) get()
eqs means Equals
Wednesday, December 26, 12
Rogue in Action
Person or( _.where(_.name eqs "Ken"), _.where(_.name eqs "ken") _.whereOpt(Option("Kenshiro")(_.name eqs _))) get()
Get me one Person.
eqs means Equals
Wednesday, December 26, 12
Rogue in Action
Person or( _.where(_.name eqs "Ken"), _.where(_.name eqs "ken") _.whereOpt(Option("Kenshiro")(_.name eqs _))) get()
Get me one Person.
eqs means Equals
Issue #69: fix in my pull req
Wednesday, December 26, 12
Live Hacking
Wednesday, December 26, 12
Live Hacking
Wednesday, December 26, 12
Live Hacking
Wednesday, December 26, 12
Advanced Stuff.
Live Hacking
Wednesday, December 26, 12
Advanced Stuff.Fast.
Live Hacking
Wednesday, December 26, 12
Advanced Stuff.Fast.
Ask Questions!
Live Hacking
Wednesday, December 26, 12
Wednesday, December 26, 12
def links = • Scala Lang http://www.scala-lang.org/
• Scala Koans http://www.scalakoans.org
• Blog.Project13.pl - http://www.blog.project13.pl
•MongoDB ref - docs.mongodb.org/manual/reference/operators/
• Foursquare Rogue - https://github.com/foursquare/rogue
• Java Morphia - http://code.google.com/p/morphia/
• Kraków Scala UG - http://krakowscala.pl / http://scalacamp.pl
Wednesday, December 26, 12
def links = • Scala Lang http://www.scala-lang.org/
• Scala Koans http://www.scalakoans.org
• Blog.Project13.pl - http://www.blog.project13.pl
•MongoDB ref - docs.mongodb.org/manual/reference/operators/
• Foursquare Rogue - https://github.com/foursquare/rogue
• Java Morphia - http://code.google.com/p/morphia/
• Kraków Scala UG - http://krakowscala.pl / http://scalacamp.pl
Mailing lists rock!
Wednesday, December 26, 12
Konrad Malawski / @ktosoplGDG / PJUG / KSUG / SCKRK
ScalaCamp 23.01.2012
Thanks! Dziękuję!ありがとう!
Wednesday, December 26, 12
I love feedback! <3 Konrad Malawski / @ktosoplGDG / PJUG / KSUG / SCKRK
ScalaCamp 23.01.2012
Thanks! Dziękuję!ありがとう!
Wednesday, December 26, 12