Class: Menu
Overview
Menú dietético compuesto por varios platos
Direct Known Subclasses
Instance Attribute Summary collapse
-
#platos ⇒ Array<Plato>
readonly
Platos que componen el menu.
-
#porcentaje_diario ⇒ String
readonly
Porcentaje diario.
-
#porcentaje_grasas ⇒ Fixnum
readonly
Procentaje de grasas que contiene.
-
#porcentaje_hidratos ⇒ Fixnum
readonly
Porcentaje de hidratos que contiene.
-
#porcentaje_proteinas ⇒ Fixnum
readonly
Porcentaje de proteinas que contiene.
-
#titulo ⇒ String
readonly
Título del menú.
-
#vct ⇒ Float
readonly
Valor calórico total.
Instance Method Summary collapse
-
#<=>(other) ⇒ Object
Función de comparación para Mixin Comparable.
-
#get_plato(posicion) ⇒ Plato?
El plato o nil si no existe plato en la posición indicada.
-
#ingesta(cantidad) ⇒ Object
Asigna el porcentaje diario.
-
#initialize(&block) ⇒ Menu
constructor
Constructor.
-
#plato(options = {}) ⇒ Object
Inserta un plato.
-
#porcentajes(options = {}) ⇒ Object
Inserta los porcentajes.
-
#title(valor) ⇒ Object
Asigna el título del menú.
-
#to_s ⇒ Object
Devuelve cadena de texto que representa al menú.
Constructor Details
#initialize(&block) ⇒ Menu
Constructor
22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/Dieta/menu.rb', line 22 def initialize (&block) @platos = [] if block_given? # Recibimos un bloque if block.arity == 1 yield self else instance_eval &block end end end |
Instance Attribute Details
#platos ⇒ Array<Plato> (readonly)
Platos que componen el menu
16 17 18 |
# File 'lib/Dieta/menu.rb', line 16 def platos @platos end |
#porcentaje_diario ⇒ String (readonly)
Porcentaje diario
16 17 18 |
# File 'lib/Dieta/menu.rb', line 16 def porcentaje_diario @porcentaje_diario end |
#porcentaje_grasas ⇒ Fixnum (readonly)
Procentaje de grasas que contiene
16 17 18 |
# File 'lib/Dieta/menu.rb', line 16 def porcentaje_grasas @porcentaje_grasas end |
#porcentaje_hidratos ⇒ Fixnum (readonly)
Porcentaje de hidratos que contiene
16 17 18 |
# File 'lib/Dieta/menu.rb', line 16 def porcentaje_hidratos @porcentaje_hidratos end |
#porcentaje_proteinas ⇒ Fixnum (readonly)
Porcentaje de proteinas que contiene
16 17 18 |
# File 'lib/Dieta/menu.rb', line 16 def porcentaje_proteinas @porcentaje_proteinas end |
#titulo ⇒ String (readonly)
Título del menú
16 17 18 |
# File 'lib/Dieta/menu.rb', line 16 def titulo @titulo end |
#vct ⇒ Float (readonly)
Valor calórico total
16 17 18 |
# File 'lib/Dieta/menu.rb', line 16 def vct @vct end |
Instance Method Details
#<=>(other) ⇒ Object
Función de comparación para Mixin Comparable
90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/Dieta/menu.rb', line 90 def <=> (other) # devolvemos nil si no son del tipo Menu return nil unless other.is_a? Menu # realizamos las comparaciones necesarias return @titulo <=> other.titulo unless @titulo == other.titulo return @porcentaje_diario <=> other.porcentaje_diario unless @porcentaje_diario == other.porcentaje_diario return @platos <=> other.platos unless @platos & other.platos == @platos return @titulo <=> other.titulo unless @titulo == other.titulo return @porcentaje_proteinas <=> other.porcentaje_proteinas unless @porcentaje_proteinas == other.porcentaje_proteinas return @porcentaje_grasas <=> other.porcentaje_grasas unless @porcentaje_grasas == other.porcentaje_grasas return @porcentaje_hidratos <=> other.porcentaje_hidratos end |
#get_plato(posicion) ⇒ Plato?
Returns el plato o nil si no existe plato en la posición indicada.
74 75 76 77 78 |
# File 'lib/Dieta/menu.rb', line 74 def get_plato (posicion) if @platos.length > 0 && posicion.instance_of?(Fixnum) && posicion > -1 @platos[posicion] end end |
#ingesta(cantidad) ⇒ Object
Asigna el porcentaje diario
67 68 69 70 |
# File 'lib/Dieta/menu.rb', line 67 def ingesta(cantidad) raise ArgumentError.new("Porcentaje diario no es un String") if !cantidad.instance_of?(String) @porcentaje_diario = cantidad end |
#plato(options = {}) ⇒ Object
Inserta un plato
43 44 45 46 47 48 49 50 51 |
# File 'lib/Dieta/menu.rb', line 43 def plato( = {}) pl = Plato.new do description [:descripcion] if [:descripcion] porcion [:porcion] if [:porcion] cantidad [:cantidad] if [:cantidad] end @platos << pl end |
#porcentajes(options = {}) ⇒ Object
Inserta los porcentajes
54 55 56 57 58 59 60 61 62 63 |
# File 'lib/Dieta/menu.rb', line 54 def porcentajes( = {}) raise ArgumentError.new("Valor de V.C.T. no válido") if [:vct] && ![:vct].instance_of?(Float) raise ArgumentError.new("Valor de porcentaje de proteinas no válido") if [:proteinas] && ![:proteinas].instance_of?(Fixnum) raise ArgumentError.new("Valor de porcentaje de hidratos no válido") if [:hidratos] && ![:hidratos].instance_of?(Fixnum) raise ArgumentError.new("Valor de porcentaje de grasas no válido") if [:grasas] && ![:grasas].instance_of?(Fixnum) @vct = [:vct] if [:vct] @porcentaje_proteinas = [:proteinas] if [:proteinas] @porcentaje_hidratos = [:hidratos] if [:hidratos] @porcentaje_grasas = [:grasas] if [:grasas] end |
#title(valor) ⇒ Object
Asigna el título del menú
37 38 39 40 |
# File 'lib/Dieta/menu.rb', line 37 def title(valor) raise ArgumentError.new("PEl titulo no es un String") if !valor.instance_of?(String) @titulo = valor end |
#to_s ⇒ Object
Devuelve cadena de texto que representa al menú
81 82 83 84 85 86 87 |
# File 'lib/Dieta/menu.rb', line 81 def to_s s = "#{@titulo.upcase} (#{@porcentaje_diario}%)\n" @platos.each do |plato| s << "- #{plato.to_s}" end s << "V.C.T | %\t#{@vct.round(1)} kcal | #{@porcentaje_proteinas}% - #{@porcentaje_grasas}% - #{@porcentaje_hidratos}%\n" end |