diegodfsd
8/7/2011 - 5:43 AM

DSL Receita

DSL Receita

class Receita{
    private nome
    private dados        

    Receita(receita, Closure closure){ 
        nome = receita
        dados = ["ingredientes" : [:],
                 "porcoes": null,
                 "tempo" : null,
                 "preparo" : []]
        closure(this)
    }    
    
    def ingredientes(quantidade, nome){
        dados["ingredientes"][nome] = quantidade
    }
    
    def porcoes(quantidade){
        dados["porcoes"] = quantidade
    }
    
    def tempo(tempo){
        dados["tempo"] = tempo
    }
    
    def preparo(instrucao){
        dados["preparo"] << instrucao
    }
    
    String toString(){
        """\tNome: ${nome}
          Tempo: ${ dados.tempo }
          Porções: ${ dados.porcoes }
        
          Ingredientes:
          ${ dados.ingredientes.collect{ it.key + ", " + it.value }.join("\r\n\t") }
          
          Preparo:
          ${ dados.preparo.collect{ it }.join("\n\t") }
        """
    }
}

def novo = { nome, closure -> 
    new Receita(nome, closure)
}

println novo("Pudim de leite", {
    it.ingredientes 1, "lata de Leite MOÇA"
    it.ingredientes 2, "medidas (da lata) de leite"
    it.ingredientes 3, "ovos"
    
    it.preparo "Bata todos os ingredientes do pudim no liquidificador e despeje na fôrma reservada"
    it.preparo "Asse em banho-maria, em forno médio (180ºC), por cerca de 1 hora e 30 minutos"
    it.preparo "Depois de frio, leve para gelar por cerca de 6 horas"
    it.preparo "Desenforme e sirva a seguir"
    
    it.porcoes 10
    it.tempo "1h 30min"
})