class Linkedlist::Menu
Menú básico.
Attributes
Porcentaje de grasas de sus platos.
Porcentaje de hidratos de carbono de sus platos.
Porcentaje de ingesta diaria.
Porcentaje de proteínas de sus platos.
Array de platos del menú.
Título del menú.
Valor calórico total (VCT) en kcal.
Public Class Methods
Devuelve la cadena de error si el porcentaje no es correcto.
# File lib/linkedlist/linkedlist.rb, line 114 def self.err_pct(str) return "[Menu.initialize] El porcentaje de #{str} debe estar entre 0 y 100" end
Comprueba que num está entre 0 y 100 (ambos incluidos).
# File lib/linkedlist/linkedlist.rb, line 109 def self.is_pct?(num) return (0.0..100.0).include?(num) end
Inicializa el menú con los datos pasados (formato DSL).
# File lib/linkedlist/linkedlist.rb, line 60 def initialize(&block) instance_eval(&block) raise ArgumentError, Menu.err_pct('ingesta diaria') unless Menu.is_pct?(@pct_ingesta) raise ArgumentError, Menu.err_pct('proteínas') unless Menu.is_pct?(@pct_prot) raise ArgumentError, Menu.err_pct('grasas') unless Menu.is_pct?(@pct_grasas) raise ArgumentError, Menu.err_pct('hidratos') unless Menu.is_pct?(@pct_hdc) raise ArgumentError, "[Menu.initialize] Los porcentajes de macronutrientes deben sumar 100%" unless @pct_prot + @pct_grasas + @pct_hdc == 100 raise ArgumentError, "[Menu.initialize] Debe haber al menos un plato" unless @platos.count > 0 end
Public Instance Methods
Comparación de menús. La comparación es por orden alfabético de títulos y por cantidad de platos (de más a menos) si hay igualdad en los títulos.
# File lib/linkedlist/linkedlist.rb, line 120 def <=>(c_menu) titulos_ord = @titulo <=> c_menu.titulo if titulos_ord == 0 return -(@platos.count <=> c_menu.platos.count) else return titulos_ord end end
Obtiene el plato correspondiente al número num o nil si éste no existe.
# File lib/linkedlist/linkedlist.rb, line 95 def get_plate(num) return (num >= 0 && num < platos.count) ? platos[num] : nil end
Establece el porcentaje de ingesta diaria.
# File lib/linkedlist/linkedlist.rb, line 76 def ingesta(ingesta) @pct_ingesta = ingesta end
Añade un plato al menú.
# File lib/linkedlist/linkedlist.rb, line 89 def plato(plato) @platos = [] if @platos.nil? @platos.push(Plato.new(plato[:descripcion], plato[:porcion], plato[:gramos])) end
Establece el valor calórico total (VCT) y los porcentajes de proteínas, grasas e hidratos de carbono.
# File lib/linkedlist/linkedlist.rb, line 81 def porcentajes(porcentajes) @vct = porcentajes[:vct] @pct_prot = porcentajes[:proteinas] @pct_grasas = porcentajes[:grasas] @pct_hdc = porcentajes[:hidratos] end
Establece el título del menú.
# File lib/linkedlist/linkedlist.rb, line 71 def tit(titulo) @titulo = titulo end
Devuelve el menú formateado como cadena.
# File lib/linkedlist/linkedlist.rb, line 100 def to_s s = '' s << "#{@titulo.upcase} (#{@pct_ingesta}%)\n" # Título y porcentaje de ingesta diaria @platos.each {|plato| s << "- #{plato.to_s}\n"} # Platos s << "V.C.T. | % #{@vct} kcal | #{@pct_prot}% - #{pct_grasas}% - #{pct_hdc}%\n" # VCT y porcentajes de macronutrientes return s end