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 115 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 110 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 61 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 121 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 96 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 77 def ingesta(ingesta) @pct_ingesta = ingesta end
Añade un plato al menú.
# File lib/linkedlist/linkedlist.rb, line 90 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 82 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 72 def tit(titulo) @titulo = titulo end
Devuelve el menú formateado como cadena.
# File lib/linkedlist/linkedlist.rb, line 101 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