Scala dsls-dissecting-and-implementing-rogue

Post on 15-Jan-2015

339 views 0 download

Tags:

description

Just a few simple slides for a presentation at Kraków's Scala User Group. The rest of the session is live coding where we reimplement a tiny subset of Rogue, Foursquares MongoDB DSL.

Transcript of Scala dsls-dissecting-and-implementing-rogue

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