Skip to content

Instantly share code, notes, and snippets.

@erangaeb
erangaeb / Language.scala
Last active January 31, 2016 11:24
Traits vs Abstract classes scala
// this won't compile
trait Language(name: String)
// Use abstract class when needs to have constrctor arguments
abstract class Language(name: String)
@erangaeb
erangaeb / Language.scala
Last active January 31, 2016 10:58
Scala Trait
trait Language {
// abstract
var name: String
// concrete
val maxUsage = 10
// abstract
def lang(): Unit
@erangaeb
erangaeb / Language.scala
Last active January 31, 2016 10:58
Scala multiple inheritance via traits
trait Language {
def lang(): Unit
}
trait Functional extends Language {
override def lang() {
println("Functional")
}
}
@erangaeb
erangaeb / Lambda.scala
Created January 31, 2016 06:16
Self typed annotation
trait Lambda {
val l = "Lambda"
}
trait Calculus {
this: Lambda =>
val c = "Calculus"
val lc = l + c
}
@erangaeb
erangaeb / Lambda.scala
Created January 31, 2016 06:29
Inheritance
trait Lambda {
val l = "Lambda"
}
trait Calculus extends Lambda {
val c = "Calculus"
val lc = l + c
}
@erangaeb
erangaeb / EmployeeDb.scala
Created January 31, 2016 07:36
Cake pattern based layered component
trait EmployeeDbComp {
val employeeDb: EmployeeDb
trait EmployeeDb {
def createEmployee(employee: Employee)
def getEmployee(empId: Int): Employee
}
}
@erangaeb
erangaeb / CassandraEmployeeDbComp.scala
Created January 31, 2016 08:12
Cassandra based EmployeeDb component
trait CassandraEmployeeDbComp extends EmployeeDbComp {
this: CakezCassandraCluster =>
val employeeDb = new CassandraEmployeeDb
class CassandraEmployeeDb extends EmployeeDb {
def logger = LoggerFactory.getLogger(this.getClass)
@erangaeb
erangaeb / EmployeeService.scala
Last active January 31, 2016 08:24
Employee service component
trait EmployeeServiceComp {
val Service: EmployeeService
trait EmployeeService {
def POST(employee: Employee): Future[Unit]
def GET(id: Int): Future[Employee]
}
}
@erangaeb
erangaeb / SprayEmployeeServiceComp.scala
Created January 31, 2016 08:28
Spray based Employee Service implementation
trait SprayEmployeeServiceCompImpl extends EmployeeServiceComp with Configuration {
this: CakezActorSystem =>
val employeeService = new SprayEmployeeService
class SprayEmployeeService extends EmployeeService {
def logger = LoggerFactory.getLogger(this.getClass)
@erangaeb
erangaeb / EmployeeHandler.scala
Created January 31, 2016 08:56
Handler dependencies via self typed annotaion
class EmployeeHandler {
this: EmployeeDbComp with EmployeeServiceComp =>
def logger = LoggerFactory.getLogger(this.getClass)
def createEmployee(inputEmp: String): Employee = {
// inputEmp comes as 'emp_id name department'
val tokens = inputEmp.split(" ")