module Alimento $alimentos = [] $alimentos << GrupoAlimentos.new("Huevo", 14.1, 0.0, 19.5, [], "Lácteos") $alimentos << GrupoAlimentos.new("Leche", 3.3, 4.8, 3.2, [], "Lácteos") $alimentos << GrupoAlimentos.new("Yogurt", 3.8, 4.9, 3.8, [], "Lácteos") $alimentos << GrupoAlimentos.new("Cerdo", 21.5, 0.0, 6.3, [], "Carnes") $alimentos << GrupoAlimentos.new("Ternera", 21.1, 0.0, 3.1, [], "Carnes") $alimentos << GrupoAlimentos.new("Pollo", 20.6, 0.0, 5.6, [], "Carnes") $alimentos << GrupoAlimentos.new("Bacalao", 17.7, 0.0, 0.4, [], "Pescados") $alimentos << GrupoAlimentos.new("Atún", 21.5, 0.0, 15.5, [], "Pescados") $alimentos << GrupoAlimentos.new("Salmón", 19.9, 0.0, 13.6, [], "Pescados") $alimentos << GrupoAlimentos.new("Aceite de oliva", 0.0, 0.2, 99.6, [], "Grasos") $alimentos << GrupoAlimentos.new("Mantequilla", 0.7, 0.0, 83.2, [], "Grasos") $alimentos << GrupoAlimentos.new("Chocolate", 5.3, 47.0, 30.0, [], "Grasos") $alimentos << GrupoAlimentos.new("Azúcar", 0.0, 99.8, 0.0, [], "Carbohidratos") $alimentos << GrupoAlimentos.new("Arroz", 6.8, 77.7, 0.6, [], "Carbohidratos") $alimentos << GrupoAlimentos.new("Lentejas", 23.5, 52.0, 1.4, [], "Carbohidratos") $alimentos << GrupoAlimentos.new("Papas", 2.0, 15.4, 0.1, [], "Carbohidratos") $alimentos << GrupoAlimentos.new("Tomate", 1.0, 3.5, 0.2, [], "Verduras") $alimentos << GrupoAlimentos.new("Cebolla", 1.3, 5.8, 0.3, [], "Verduras") $alimentos << GrupoAlimentos.new("Calabaza", 1.1, 4.8, 0.1, [], "Verduras") $alimentos << GrupoAlimentos.new("Manzana", 0.3, 12.4, 0.4, [], "Frutas") $alimentos << GrupoAlimentos.new("Plátano", 1.2, 21.4, 0.2, [], "Frutas") $alimentos << GrupoAlimentos.new("Pera", 0.5, 12.7, 0.3, [], "Frutas") class Plato attr_accessor :name, :ingredients, :grams def initialize(name, &block) @name = name @ingredients = [] @grams = [] if block_given? if block.arity == 1 yield self else instance_eval(&block) end end end def to_s output = @name output << "\n#{'=' * @name.size}\n" output << "Composición nutricional:\n" output << "#{' ' * 16}glúcidos proteínas lípidos\tvalor energético\n" valor = 0.0 @ingredients.each_with_index do |ing, i| output << "#{ing}" output << "#{' ' * (16 - ing.nombre.size)}" output << "#{(ing.glucidos * @grams[i]).round(2)}\t " output << "#{(ing.proteinas * @grams[i]).round(2)}\t " output << "#{(ing.lipidos * @grams[i]).round(2)} \t" output << "#{(ing.kcal * @grams[i]).round(2)}\n" valor += ing.kcal * @grams[i] end output << "\nvalor energético total\t\t\t\t#{valor.round(2)}" output end def vegetal(name, options = {}) alimento = $alimentos.find{ |x| x.nombre == name } cantidad = amount(options) @ingredients << alimento @grams << cantidad end def fruta(name, options = {}) alimento = $alimentos.find{ |x| x.nombre == name } cantidad = amount(options) @ingredients << alimento @grams << cantidad end def cereal(name, options = {}) alimento = $alimentos.find{ |x| x.nombre == name } cantidad = amount(options) @ingredients << alimento @grams << cantidad end def proteina(name, options = {}) alimento = $alimentos.find{ |x| x.nombre == name } cantidad = amount(options) @ingredients << alimento @grams << cantidad end def aceite(name, options = {}) alimento = $alimentos.find{ |x| x.nombre == name } cantidad = amount(options) @ingredients << alimento @grams << cantidad end def amount(options = {}) cantidad = 1 cantidad = options[:gramos] if options[:gramos] cantidad = options[:porcion].chars.reject{ |x| x =~ /[^\d.\/]/ }.join("").to_r*15 if /cucharada/ =~ options[:porcion] cantidad = options[:porcion].chars.reject{ |x| x =~ /[^\d.\/]/ }.join("").to_r*250 if /cucharón/ =~ options[:porcion] cantidad = options[:porcion].chars.reject{ |x| x =~ /[^\d.\/]/ }.join("").to_r*225 if /taza/ =~ options[:porcion] cantidad = options[:porcion].chars.reject{ |x| x =~ /[^\d.\/]/ }.join("").to_r*220 if /pieza/ =~ options[:porcion] cantidad = options[:porcion].chars.reject{ |x| x =~ /[^\d.\/]/ }.join("").to_r*110 if /pieza/ =~ options[:porcion] && /pequeña/ =~ options[:porcion] cantidad end end end