require 'etiqueta/etiqueta' class Menu attr_accessor :dia, :titl, :ingesta_min, :ingesta_max, :al_desayuno, :al_almuerzo, :al_cena def initialize(dia, &block) @dia = dia @titl = '' @ingesta_min = 0 @ingesta_max = 0 @al_desayuno = [] @al_almuerzo = [] @al_cena = [] if block_given? if block.arity == 1 yield self else instance_eval(&block) end end end def to_s output = @dia output << "\t\tTitulo: #{@titl}\n" output << "Ingesta min: #{@ingesta_min} - Ingesta max: #{@ingesta_max}\n" output << "==================================================================\n" output << "".ljust(25) << "grasas".ljust(15) << "carbohid.".ljust(15) << "proteínas".ljust(15) << "fibra".ljust(15) << "sal".ljust(15) << "valor energético\n" { 'Desayuno' => @al_desayuno, 'Almuerzo' => @al_almuerzo, 'Cena' => @al_cena }.each do |nombre, comida| output << "-- #{nombre} --\n" comida.each do |x| output << x.nombre.ljust(25) << x.grasas.to_s.ljust(15) << x.hidratos.to_s.ljust(15) << x.proteinas.to_s.ljust(15) << x.fibra_alimentaria.to_s.ljust(15) << x.sal.to_s.ljust(15) << x.valor_nutr_kcal.to_s << "\n" end output << "\n" end output << "Valor energetico total\t" output << (@al_desayuno + @al_almuerzo + @al_cena).collect(&:valor_nutr_kcal).reduce(:+).to_s output end def titulo(titl) @titl = titl end def ingesta(options = {}) @ingesta_min = options[:min] if options[:min] @ingesta_max = options[:max] if options[:max] end def desayuno(options = {}) @al_desayuno << process_etiqueta(options) end def almuerzo(options = {}) @al_almuerzo << process_etiqueta(options) end def cena(options = {}) @al_cena << process_etiqueta(options) end private def process_etiqueta(options = {}) alimento = Etiqueta.new( options[:descripcion], options[:gramos], Grasas.new(options[:grasas], options[:grasas]), Hidratos.new(options[:carbohidratos], options[:carbohidratos]), options[:proteinas], options[:sal], options[:fibra], nil, options[:porcion] ) alimento end end