class Drug {
String name
String toString() { name }
}
class DrugQuantity {
int number
String toString() {
number == 1 ? "1 pill" : "$number pills"
}
}
class TimeDuration {
Number number
String unit
}
Integer.metaClass.getPills = { -> new DrugQuantity(number: delegate) }
Number.metaClass.getHours = { -> new TimeDuration(number: delegate, unit: "hours") }
def take(Map m, DrugQuantity dq) {
println "Take $dq of $m.of in $m.in.number $m.in.unit"
}
def chloroquinine = new Drug(name: "Chloroquinine")
take 2.pills, of: chloroquinine, in: 6.hours