Skip to content

Instantly share code, notes, and snippets.

View aposwolsky's full-sized avatar

Adam Poswolsky aposwolsky

View GitHub Profile
@aposwolsky
aposwolsky / prime_abp_v5.scala
Created March 18, 2013 05:50
type-safe priming - generalized. Example: Checkin has a (1) Venue and (2) User foreign key. Venue in turn has an (1) Owner and (2) Page foreign key. This example shows how to take a list of checkins and prime all the fields in a type-safe manner. In the end it will call a print routine that requires a list of checkins that is fully primed and wh…
package demov5
/* **** GENERAL PRIMEABLE FIELDS **** */
class PrimedReference[T] {
private var _obj: Option[T] = None
private var _isCalced = false
def cachedObj: Option[T] = {
if (!_isCalced) {
throw new RuntimeException("Attempting to access unprimed resource!... impossible!")
@aposwolsky
aposwolsky / prime_abp_v4.scala
Created March 18, 2013 05:49
type-safe priming -- specific example
package demov4
/* **** GENERAL PRIMEABLE FIELDS **** */
class PrimedReference[T] {
private var _obj: Option[T] = None
private var _isCalced = false
def cachedObj: Option[T] = {
if (!_isCalced) {
throw new RuntimeException("Attempting to access unprimed resource!... impossible!")
@aposwolsky
aposwolsky / prime_abp_v2.scala
Created March 16, 2013 05:49
deep priming version 2
package demo
/* *********** USER ************** */
class User(id: Int) { def name = "User" + id }
/* *********** END OF USER ************** */
/* *********** Page ************** */
class Page(id: Int) { def name = "Page" + id }
/* *********** END OF USER ************** */
package demo
/* *********** USER ************** */
class User(id: Int) { def name = "User" + id }
/* *********** END OF USER ************** */
/* *********** VENUE ************** */
sealed abstract class Venue {
def venueId: Int
@aposwolsky
aposwolsky / priming_abp.scala
Created March 15, 2013 21:23
Priming with traits...
package demo
class Bar(id: Int) { def name = "Bar" + id }
class Baz(id: Int) { def name = "Baz" + id }
sealed abstract class Foo {
def id: Int
def barId: Int
def bazId: Int
}