Mais conteúdo relacionado
Semelhante a Internal DSLs Scala (20)
Internal DSLs Scala
- 3. header("Add entry")
form {
table {
row {
col { text("Your name:") }
col { newEntry.name = input(newEntry.name) }
}
row {
col { text("Your message:") }
col { newEntry.text = inputText(newEntry.text) }
}
}
button("Post") {
newEntry.save()
goto(Home())
}
}
- 6. case class Home() extends Page {
def ui {
header("Welcome to my guestbook!")
section {
header("All entries")
list {
for (e <- cache("entries", Entry.all)) {
listitem {
form {
text(e.name)
text(": ")
text(e.text)
button("Delete") {
e.delete()
goto(Home())
}
}
}
}
}
}
}
}
- 8. case class Home() extends Page {
def ui {
header("Welcome to my guestbook!")
section {
entries
}
}
def entries {
header("All entries")
list {
for (e <- cache("entries", Entry.all)) {
listitem {
form {
text(e.name)
text(": ")
text(e.text)
button("Delete") {
e.delete()
goto(Home())
}
}
}
}
}
}
}
- 9. abstract class MainTemplate extends Page {
def body
def ui {
block("headerblock") {
header {
navigate(Home()) {text("My Guestbook")}
}
}
hr
body
hr
text("(C) 2009, Zef Hemel")
}
}
- 10. case class Home() extends MainTemplate {
def body {
header("Welcome to my guestbook!")
section {
entries
}
}
def entries {
header("All entries")
for (e <- cache("entries", Entry.all)) {
listitem {
form {
text(e.name)
text(": ")
text(e.text)
button("Delete") {
e.delete()
goto(Home())
}
}
}
}
}
...
}
- 12. object DefaultStyle extends Style {
block("headerblock") >> header {
fontsize = 30 pt;
width = 100 percent;
bgcolor = "#eeeeee";
}
section >> header {
color = "#0c0ccc";
}
body {
fontfamily = "Helvetica, Arial, Verdana, sans-serif"
}
}
- 13. abstract class MainTemplate extends Page {
def body
style = DefaultStyle
def ui {
block("headerblock") {
header {
navigate(Home()) {text("My Guestbook")}
}
}
hr
body
hr
text("(C) 2009, Zef Hemel")
}
}
- 15. case class CannotEnter() extends Page with AccessControl {
def canAccess = false
def ui {
text("You should never see this!")
}
}
- 17. class Entry extends DataObject {
def singleton = Entry
@Column var name : String = ""
@Column var text : String = ""
}
object Entry extends DataObjectSingleton(classOf[Entry])
- 21. flexible syntax
a >> b == a.>>(b)
form { ... } ~= form(() => { ... })
- 23. type inference
var newEntry = Entry()
==
var newEntry : Entry = Entry()