class Recipe attr_reader :name, :alimentos, :valor_ener_total def initialize(name,&block) @@tabla_alimentos=[ Alimentos.new("Huevo frito", 14.1, 0.0, 19.5), Alimentos.new("Leche vaca", 3.3, 4.8, 3.2), Alimentos.new("Yogurt", 3.8, 4.9, 3.8), Alimentos.new("Cerdo", 21.5, 0.0, 6.3), Alimentos.new("Ternera", 21.1, 0.0, 3.1), Alimentos.new("Pollo", 20.6, 0.0, 5.6), Alimentos.new("Bacalao", 17.7, 0.0, 0.4), Alimentos.new("Atun", 21.5, 0.0, 15.5), Alimentos.new("Salmon", 19.9, 0.0, 13.6), Alimentos.new("Aceite de oliva", 0.0, 0.2, 99.6), Alimentos.new("Aceite de girasol",0.0,0.9,83.1), Alimentos.new("Mantequilla", 0.7, 0.0, 83.2), Alimentos.new("Chocolate", 5.3, 47.0, 30.0), Alimentos.new("Azucar", 0.0, 99.8, 0.0), Alimentos.new("Arroz", 6.8, 77.7, 0.6), Alimentos.new("Lentejas", 23.5, 52.0, 1.4), Alimentos.new("Papas", 2.0, 15.4, 0.1), Alimentos.new("Tomate", 1.0, 3.5, 0.2), Alimentos.new("Cebolla", 1.3, 5.8, 0.3), Alimentos.new("Calabaza", 1.1, 4.8, 0.1), Alimentos.new("Manzana", 0.3, 12.4, 0.4), Alimentos.new("Platano", 1.2, 21.4, 0.2), Alimentos.new("Pera", 0.5, 12.7, 0.3) ] @@porciones={"cucharada"=>15,"cucharon"=>40,"taza"=>100,"pieza"=>150} @name = name @alimentos=[] @valor_ener_total=0; if block_given? #Comprueba si el bloque existe if block.arity == 1 #Devuelve la cantidad de argumentos del bloque yield self else instance_eval(&block) end end end def vegetal(nombre_alimento, options = {}) food=@@tabla_alimentos.find{|x| x.alimento==nombre_alimento} ingredient = food.alimento sz=23-food.alimento.size ingredient << "#{" "*sz}#{food.glucidos}#{" "*9}#{food.proteinas}#{" "*8}#{food.grasas}#{" "*8}#{food.valor_ener.round(2)} " if options[:porcion] almacen=options[:porcion].split ingredient << "#{" "*11}#{almacen[0].to_f*@@porciones[almacen[1]]} gr" end @valor_ener_total+=food.valor_ener @alimentos << ingredient ingredient end def fruta(nombre_alimento, options = {}) food=@@tabla_alimentos.find{|x| x.alimento==nombre_alimento} ingredient=food.alimento sz=23-food.alimento.size ingredient << "#{" "*sz}#{food.glucidos}#{" "*9}#{food.proteinas}#{" "*8}#{food.grasas}#{" "*8}#{food.valor_ener.round(2)} " if options[:porcion] almacen=options[:porcion].split ingredient << "#{" "*11}#{almacen[0].to_f*@@porciones[almacen[1]]} gr" end @valor_ener_total+=food.valor_ener @alimentos << ingredient ingredient end def cereal(nombre_alimento, options = {}) food=@@tabla_alimentos.find{|x| x.alimento==nombre_alimento} ingredient = food.alimento sz=23-food.alimento.size ingredient << "#{" "*sz}#{food.glucidos}#{" "*9}#{food.proteinas}#{" "*8}#{food.grasas}#{" "*8}#{food.valor_ener.round(2)} " if options[:porcion] almacen=options[:porcion].split ingredient << "#{" "*11}#{almacen[0].to_f*@@porciones[almacen[1]]} gr" end @valor_ener_total+=food.valor_ener @alimentos << ingredient ingredient end def proteina(nombre_alimento, options = {}) food=@@tabla_alimentos.find{|x| x.alimento==nombre_alimento} ingredient = food.alimento sz=23-food.alimento.size ingredient << "#{" "*sz}#{food.glucidos}#{" "*9}#{food.proteinas}#{" "*8}#{food.grasas}#{" "*8}#{food.valor_ener.round(2)} " if options[:porcion] almacen=options[:porcion].split ingredient << "#{" "*11}#{almacen[0].to_f*@@porciones[almacen[1]]} gr" end @valor_ener_total+=food.valor_ener @alimentos << ingredient ingredient end def aceite(nombre_alimento, options = {}) food=@@tabla_alimentos.find{|x| x.alimento==nombre_alimento} ingredient = food.alimento sz=23-food.alimento.size ingredient << "#{" "*sz}#{food.glucidos}#{" "*9}#{food.proteinas}#{" "*8}#{food.grasas}#{" "*8}#{food.valor_ener.round(2)} " if options[:porcion] almacen=options[:porcion].split ingredient << "#{" "*11}#{almacen[0].to_f*@@porciones[almacen[1]]} gr" end @valor_ener_total+=food.valor_ener @alimentos << ingredient ingredient end def to_s output = @name output << "\n#{'=' * @name.size}\n" output << "Composición nutricional:\n" output << " Glúcidos Proteínas Lípidos Valor energético Cantidad\n" output << "#{@alimentos.join("\n")}\n\n" output << "valor energético total ==> #{@valor_ener_total}\n\n" output end end