class Linkedlist::Menu

Menú básico.

Attributes

pct_grasas[R]

Porcentaje de grasas de sus platos.

pct_hdc[R]

Porcentaje de hidratos de carbono de sus platos.

pct_ingesta[R]

Porcentaje de ingesta diaria.

pct_prot[R]

Porcentaje de proteínas de sus platos.

platos[R]

Array de platos del menú.

titulo[R]

Título del menú.

vct[R]

Valor calórico total (VCT) en kcal.

Public Class Methods

err_pct(str) click to toggle source

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
is_pct?(num) click to toggle source

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
new(&block) click to toggle source

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

<=>(c_menu) click to toggle source

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
get_plate(num) click to toggle source

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
ingesta(ingesta) click to toggle source

Establece el porcentaje de ingesta diaria.

# File lib/linkedlist/linkedlist.rb, line 76
def ingesta(ingesta)
   @pct_ingesta = ingesta
end
plato(plato) click to toggle source

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
porcentajes(porcentajes) click to toggle source

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
tit(titulo) click to toggle source

Establece el título del menú.

# File lib/linkedlist/linkedlist.rb, line 71
def tit(titulo)
   @titulo = titulo
end
to_s() click to toggle source

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