require "prct06/version" #Clase dieta base. Almacena un menú, indicando aspectos, tales como, porcentaje de ingesta, VCT, proteínas, grasas, hidratos y los platos class Dieta attr_reader :titulo, :porcentaje_ingesta, :VCT, :proteinas, :grasas, :hidratos, :platos include Comparable #constructor def initialize (titulo=0, porcentaje_ingesta=0, nplatos=0, vct=0, proteinas=0, grasas=0, hidratos=0, *des_platos, &block) @name = titulo @platos = [] if block_given? if block.arity == 1 yield self else instance_eval(&block) end else @titulo = titulo @porcentaje_ingesta = porcentaje_ingesta @nplatos = nplatos @platos = [] for i in 0..nplatos-1 do aux = [des_platos[i][0], des_platos[i][1], des_platos[i][2]] @platos.push(aux) end @VCT = vct @proteinas = proteinas @grasas = grasas @hidratos = hidratos end end def title(name) @titulo = name end def ingesta(options = {}) @porcentaje_ingesta = "#{options[:min]}-#{options[:max]}" end def plate(options = {}) @platos << ["#{options[:descripcion]}", "#{options[:porcion]}", options[:gramos]] end def porcentajes(options = {}) @VCT = options[:vct] if options[:vct] @proteinas = options[:proteinas] if options[:proteinas] @grasas = options[:grasas] if options[:grasas] @hidratos = options[:hidratos] if options[:hidratos] end def nplatos @platos.length end def <=> (other) @VCT <=> other.VCT end def plato (n) if n > @platos.length || n < 1 then return "" end return @platos[n-1] end #Muestra el menú correctamente formateado def to_s x = "" x << "#{@titulo} (#{@porcentaje_ingesta}%)\n" @platos.each do |i| x << "- #{i[0]}, #{i[1]}, #{i[2]}g\n" end x << "V.C.T | % #{@VCT} kcal | #{@proteinas} #{@grasas} #{@hidratos}" end end #Clase hija de Dieta que añade al menú el campo de grupo de alimentos. class Dieta_grupos < Dieta attr_reader :grupo def initialize (titulo=0, porcentaje_ingesta=0, nplatos=0, vct=0, proteinas=0, grasas=0, hidratos=0, grupo=0, *des_platos, &block) if block_given? super(&block) else @grupo = grupo super(titulo, porcentaje_ingesta, nplatos, vct, proteinas, grasas, hidratos, *des_platos) end end def grupo_alimentos(alimentos) @grupo = alimentos end def to_s output = super output << "\nGrupo: #{@grupo}" end end #Clase hija que hereda de Dieta y añade al menú un campo en el que se indica el grupo de edad para el cual está destinado el plato. class Dieta_edades < Dieta attr_reader :grupo_edades def initialize (titulo=0, porcentaje_ingesta=0, nplatos=0, vct=0, proteinas=0, grasas=0, hidratos=0, grupo_edades=0, *des_platos, &block) if block_given? super(&block) else @grupo_edades = grupo_edades super(titulo, porcentaje_ingesta, nplatos, vct, proteinas, grasas, hidratos, *des_platos) end end def grupo_edad(edades) @grupo_edades = edades end def to_s output = super output << "\nGrupo: #{@grupo_edades}" end end