module Dieta # Clase menú class Menu include Comparable # Variable que almacena el título del menú attr_accessor :titulo # Array que almacena los porcentajes del menú en concreto attr_accessor :porcentaje # Array que almacena los platos que forman parte del menú attr_accessor :platos # Variable que almacena la información de VCT del manú attr_accessor :VCT # Variable que almacena la información de las kilocalorias del manú attr_accessor :kilocalorias # Variable que almacena la información de las proteínas del manú attr_accessor :proteinas # Variable que almacena la información de las grasas del manú attr_accessor :grasas # Variable que almacena la información de los hidratos del manú attr_accessor :hidratos # Inicializa la lista def initialize(cabecera, platos, informacion) @titulo = cabecera[0] @porcentaje = cabecera[1].to_s + "-" + cabecera[2].to_s + "%" @platos = platos @VCT = informacion[0] @kilocalorias = informacion[1] @proteinas = informacion[2] @grasas = informacion[3] @hidratos = informacion[4] end # Devuelve un plato que contiene un array de elementos # @param numero el número del plato en concreto def get_plato(numero) @platos[numero] end # Devuelve la descripción del plato # @param numero el número del plato en concreto def get_descripcion(numero) @platos[numero][0] end # Devuelve la porción del plato # @param numero el número del plato en concreto def get_porcion(numero) @platos[numero][1] end # Devuelve la ingesta del plato # @param numero el número del plato en concreto def get_ingesta(numero) @platos[numero][2] end # Devuelve el array de los platos def get_pt @platos end # Compara la cantidad de platos entre dos menús # @param anOther otro elemento menú con el que comparar def <=>(anOther) @platos.length <=> anOther.get_pt.length end # Método a string def to_s mostrar = "#{@titulo} (#{@porcentaje})\n" i = 0; while i < @platos.length mostrar += "- #{@platos[i][0]}, #{platos[i][1]}, #{platos[i][2]}\n" i+=1 end mostrar += "V.C.T. #{@VCT} #{@kilocalorias} kcal | #{@proteinas}% - #{@grasas}% - #{@hidratos}%\n" end end #Clase GruposAlimentos que hereda de Menu para agregar grupos de alimentos class GruposAlimentos < Menu # Variable utilizada para agregar el grupo de alimento a los menús attr_reader :grupoAlimento # Inicializa la lista def initialize(grupoAlimento, cabecera, platos, informacion) super(cabecera, platos, informacion) @grupoAlimento = grupoAlimento end # Devuelve el grupo de alimento al que pertenezca def get_grupoA @grupoAlimento end end #Clase GruposEdad que hereda de Menu para agregar grupos de edades class GruposEdad < Menu # Variable utilizada para agregar el grupo de edades a los menús attr_reader :grupoEdad # Inicializa la lista def initialize(grupoEdad, cabecera, platos, informacion) super(cabecera, platos, informacion) @grupoEdad = grupoEdad end # Devuelve el grupo de edad al que pertenezca def get_grupoE @grupoEdad end end class Menu_DSL < Menu def initialize(tag, &block) super([], [], []) if block_given? if block.arity == 1 yield self else instance_eval(&block) end end end def titulo(name) @titulo = name end def ingesta(options = {}) @porcentaje = "#{options[:min]}" if options[:max] @porcentaje += "-#{options[:max]}" end @porcentaje += "%" end def plato(options = {}) plato = []; plato << options[:description] plato << options[:porcion] plato << options[:gramos].to_s @platos << plato end def porcentajes(options = {}) @VCT = options[:vct].to_s @proteinas = options[:proteinas].to_s @grasas = options[:grasas].to_s @hidratos = options[:hidratos].to_s end end end