# Author: Pablo Pastor Martín #Modulo que contiene la dieta module Dieta #Clase para representar menús dietéticos class Dieta include Comparable attr_reader :descripcion, :ingredientes, :informacion #Metodo encargado de inicializar la clase def initialize(descripcion=[], ingredientes=[], informacion=[], &block) @descripcion = Array.new(2) @ingredientes = Array.new @informacion = Array.new if block_given? instance_eval(&block) else @descripcion=descripcion @ingredientes=ingredientes @informacion=informacion end end def plato(options) ingredientes << [options[:componente],options[:cantidad], options[:peso]] end def porcentajes(options) informacion << options[:vct] << options[:proteinas] << options[:grasas] << options[:hidratos] end def titulo(title) descripcion[0] = title end def porcentaje (valor) descripcion[1] = valor end #Metodo para imprimir el menu formateado def to_s output = @descripcion[0] + " | " + "#{@descripcion[1]}" + "%\n" for i in 0..@ingredientes.size-1 output+="- " + @ingredientes[i][0] + ": " + " #{@ingredientes[i][1]}, " + " #{@ingredientes[i][2]} gramos \n" end output+= "V.C.T | % " + "#{@informacion[0]} " + "kcal | " + "#{@informacion[1]}% - #{@informacion[2]}% - #{@informacion[3]}%" output end #Metodo que devuelve el tipo de menu que es def get_desc @descripcion[0] end #Metodo para obtener el % de la ingesta calorica diaria def get_porcentaje_diario @descripcion[1] end #Devuelve el ingrediente i-esimo del menu def get_plato(i) @ingredientes[i] end #Devuelve el vector de ingredientes def get_ingredientes @ingredientes end #Devuelve las calorías def get_vct @informacion[0] end #Devuelve el % de proteinas def get_proteinas @informacion[1] end #Devuelve el % de grasas def get_grasas @informacion[2] end #Devuelve el % de hidratos def get_hidratos @informacion[3] end #Devuelve el ingrediente i-esimo formateado def get_desc_plato(i) @ingredientes[i][0] + ": " + " #{@ingredientes[i][1]}, " + " #{@ingredientes[i][2]} gramos" end #Compara dos menus def ==(other) self.to_s == other.to_s end #Metodo usado para comparar def <=>(anOther) @informacion[0]<=>anOther.get_vct end end end #Clase que añade al menu una categoria de alimento class MenuPorClaseDeAlimento < Dieta::Dieta attr_reader :grupo def initialize(descripcion, ingredientes, informacion, grupo) super(descripcion, ingredientes, informacion) @grupo = grupo end #Añade al to_s de la clase padre el tipo de alimento def to_s output = super output += "\nGrupo: #{@grupo}" end #Devuelve el grupo de alimento def get_grupo @grupo end end #Clase que agrupa los menus por grupo de edad class MenuPorGrupoDeEdad < Dieta::Dieta attr_reader :grupo def initialize(descripcion, ingredientes, informacion, grupo_de_edad) super(descripcion, ingredientes, informacion) @grupo = grupo_de_edad end #Añade al to_s original la descripcion del grupo de edad def to_s output = super output += "\nGrupo de edad: #{@grupo[0]}-#{@grupo[1]} años" end #Devuelve el array representando el rango de edad def get_grupo_edad @grupo end end