Class: Plato
- Inherits:
-
ListaDobleEnlazada
- Object
- ListaDobleEnlazada
- Plato
- Includes:
- Comparable
- Defined in:
- lib/Plato.rb
Overview
Esta clase describe una lista de instancias de la clase Alimento
Direct Known Subclasses
Defined Under Namespace
Modules: CompareMode
Constant Summary collapse
- @@compareMode =
Flag de clase Plato que guarda el modo en el que las comparaciones entre instancias de la clase Plato se han de ejecutar
CompareMode::ByVCT
Instance Attribute Summary collapse
-
#nombre ⇒ Object
Returns the value of attribute nombre.
-
#peso ⇒ Object
readonly
Returns the value of attribute peso.
-
#porcentajeCarbohidratos ⇒ Object
readonly
Returns the value of attribute porcentajeCarbohidratos.
-
#porcentajeLipidos ⇒ Object
readonly
Returns the value of attribute porcentajeLipidos.
-
#porcentajeProteinas ⇒ Object
readonly
Returns the value of attribute porcentajeProteinas.
-
#precio ⇒ Object
Returns the value of attribute precio.
-
#totalCarbohidratos ⇒ Object
readonly
Returns the value of attribute totalCarbohidratos.
-
#totalLipidos ⇒ Object
readonly
Returns the value of attribute totalLipidos.
-
#totalProteinas ⇒ Object
readonly
Returns the value of attribute totalProteinas.
-
#totalVCT ⇒ Object
readonly
Returns the value of attribute totalVCT.
Attributes inherited from ListaDobleEnlazada
Class Method Summary collapse
-
.setCompareMode(mode) ⇒ Object
Define el modo de la comparación entre 2 instancias de la clase Plato.
Instance Method Summary collapse
-
#<=>(other) ⇒ Object
Implementación del metodo ‘Comparable::<=>’ para implementación con clase Plato.
-
#alimento(options = {}) ⇒ Object
Funcion adhoc para soporte DSL Formato: { :descripcion => <“Nombre alimento”>, :proteinas => X, :carbohidratos => Y, :lipidos => Z, :gei => A, :terreno => B, :gramos => C }.
-
#extracted(nodo) ⇒ Object
Define el comportamiento de la clase Plato en el momento en el que un alimento es eliminado de su lista inserta Sobreescribe el metodo ‘extracted(nodo)’ definido en la clase padre ‘ListaDobleEnlazada’ y es llamado internamente cada vez que se llama al metodo ‘delete’ en clase padre ‘ListaDobleEnlazada’.
-
#huellaNutricional ⇒ Object
Devuelve la media de las huellasNutricionales de todos los alimentos del plato.
-
#initialize(nombre, &block) ⇒ Plato
constructor
A new instance of Plato.
-
#inserted(value) ⇒ Object
Define el comportamiento de la clase Plato en el momento en el que un nuevo alimento es insertado Sobreescribe el metodo ‘inserted(value)’ definido en la clase padre ‘ListaDobleEnlazada’ y es llamado inertamente cada vez que se llama al metodo ‘insert’ en clase padre ‘ListaDobleEnlazada’.
-
#to_s ⇒ Object
Devuelve el objeto Plato formateado en un string endentible para un ser humano.
Methods inherited from ListaDobleEnlazada
#[], #each, #extract_head, #extract_tail, #insert, #insertList
Constructor Details
#initialize(nombre, &block) ⇒ Plato
Returns a new instance of Plato.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/Plato.rb', line 28 def initialize(nombre, &block) super() #Nombre del plato @nombre = nombre #Peso (en kg) del plato @peso = 0 #Proteinas (en g) del plato @totalProteinas = 0 #Porcentaje de proteinas respecto al total(carbohidratos + proteinas + lipidos) @porcentajeProteinas = 0 #Carbohidratos (en g) del plato @totalCarbohidratos = 0 #Carbohidratos de proteinas respecto al total(carbohidratos + proteinas + lipidos) @porcentajeCarbohidratos = 0 #Lípidos (en g) del plato @totalLipidos = 0 #Porcentaje de lipidos respecto al total(carbohidratos + proteinas + lipidos) @porcentajeLipidos = 0 #El valor calorico (en kcal) total del plato (de la suma del valor calorico de todos los alimentos del plato) @totalVCT = 0 #Impacto del plato en relación a las kcal y los kgCO2 que emiten los alimentos del plato. @huellaNutricional = 0 @precio = 0.0 if block_given? if block.arity == 1 yield self else instance_eval(&block) end end end |
Instance Attribute Details
#nombre ⇒ Object
Returns the value of attribute nombre.
21 22 23 |
# File 'lib/Plato.rb', line 21 def nombre @nombre end |
#peso ⇒ Object (readonly)
Returns the value of attribute peso.
20 21 22 |
# File 'lib/Plato.rb', line 20 def peso @peso end |
#porcentajeCarbohidratos ⇒ Object (readonly)
Returns the value of attribute porcentajeCarbohidratos.
20 21 22 |
# File 'lib/Plato.rb', line 20 def porcentajeCarbohidratos @porcentajeCarbohidratos end |
#porcentajeLipidos ⇒ Object (readonly)
Returns the value of attribute porcentajeLipidos.
20 21 22 |
# File 'lib/Plato.rb', line 20 def porcentajeLipidos @porcentajeLipidos end |
#porcentajeProteinas ⇒ Object (readonly)
Returns the value of attribute porcentajeProteinas.
20 21 22 |
# File 'lib/Plato.rb', line 20 def porcentajeProteinas @porcentajeProteinas end |
#precio ⇒ Object
Returns the value of attribute precio.
21 22 23 |
# File 'lib/Plato.rb', line 21 def precio @precio end |
#totalCarbohidratos ⇒ Object (readonly)
Returns the value of attribute totalCarbohidratos.
20 21 22 |
# File 'lib/Plato.rb', line 20 def totalCarbohidratos @totalCarbohidratos end |
#totalLipidos ⇒ Object (readonly)
Returns the value of attribute totalLipidos.
20 21 22 |
# File 'lib/Plato.rb', line 20 def totalLipidos @totalLipidos end |
#totalProteinas ⇒ Object (readonly)
Returns the value of attribute totalProteinas.
20 21 22 |
# File 'lib/Plato.rb', line 20 def totalProteinas @totalProteinas end |
#totalVCT ⇒ Object (readonly)
Returns the value of attribute totalVCT.
20 21 22 |
# File 'lib/Plato.rb', line 20 def totalVCT @totalVCT end |
Class Method Details
.setCompareMode(mode) ⇒ Object
Define el modo de la comparación entre 2 instancias de la clase Plato
15 16 17 |
# File 'lib/Plato.rb', line 15 def Plato.setCompareMode(mode) @@compareMode = mode end |
Instance Method Details
#<=>(other) ⇒ Object
Implementación del metodo ‘Comparable::<=>’ para implementación con clase Plato
130 131 132 133 134 135 136 137 |
# File 'lib/Plato.rb', line 130 def <=>(other) return nil unless other.instance_of? Plato if(@@compareMode == CompareMode::ByVCT) then @totalVCT <=> other.totalVCT else self.huellaNutricional <=> other.huellaNutricional end end |
#alimento(options = {}) ⇒ Object
Funcion adhoc para soporte DSL Formato:
{ :descripcion => <"Nombre alimento">, :proteinas => X, :carbohidratos => Y, :lipidos => Z, :gei => A, :terreno => B, :gramos => C }
65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/Plato.rb', line 65 def alimento( = {} ) nombre = [:descripcion] ? "#{[:descripcion]}" : 'Sin nombre' proteinas = [:proteinas] ? [:proteinas] : 0.1 carbohidratos = [:carbohidratos] ? [:carbohidratos] : 0.1 lipidos = [:lipidos] ? [:lipidos] : 0.1 gei = [:gei] ? [:gei] : 0.1 terreno = [:terreno] ? [:terreno] : 0.1 cantidad = [:gramos] ? [:gramos].to_f/1000.0 : 1 result = Alimento.new(nombre,proteinas,carbohidratos,lipidos,gei,terreno,cantidad) self.insert(result) end |
#extracted(nodo) ⇒ Object
Define el comportamiento de la clase Plato en el momento en el que un alimento es eliminado de su lista inserta Sobreescribe el metodo ‘extracted(nodo)’ definido en la clase padre ‘ListaDobleEnlazada’ y es llamado internamente cada vez que se llama al metodo ‘delete’ en clase padre ‘ListaDobleEnlazada’
104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/Plato.rb', line 104 def extracted(nodo) alimento = nodo if( value.instance_of? Node) then alimento = value.value end @peso -= alimento.cantidad*100 #Representado en g @totalProteinas -= alimento.proteinas @totalCarbohidratos -= alimento.carbohidratos @totalLipidos -= alimento.lipidos @totalVCT -= alimento.valorEnergetico totalNutrientes = @totalProteinas + @totalCarbohidratos + @totalLipidos @porcentajeProteinas = @totalProteinas / totalNutrientes * 100 @porcentajeCarbohidratos = @totalCarbohidratos / totalNutrientes * 100 @porcentajeLipidos = @totalLipidos / totalNutrientes * 100 @huellaNutricional -= alimento.huellaNutricional end |
#huellaNutricional ⇒ Object
Devuelve la media de las huellasNutricionales de todos los alimentos del plato
24 25 26 |
# File 'lib/Plato.rb', line 24 def huellaNutricional() return @huellaNutricional/self.size() end |
#inserted(value) ⇒ Object
Define el comportamiento de la clase Plato en el momento en el que un nuevo alimento es insertado Sobreescribe el metodo ‘inserted(value)’ definido en la clase padre ‘ListaDobleEnlazada’ y es llamado inertamente cada vez que se llama al metodo ‘insert’ en clase padre ‘ListaDobleEnlazada’
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/Plato.rb', line 82 def inserted(value) #method(:insert).super_method.call(value) #Llama al metodo insert de padre alimento = value if( value.instance_of? Node) then alimento = value.value end @peso += alimento.cantidad*100 #Representado en g @totalProteinas += alimento.proteinas @totalCarbohidratos += alimento.carbohidratos @totalLipidos += alimento.lipidos @totalVCT += alimento.valorEnergetico totalNutrientes = @totalProteinas + @totalCarbohidratos + @totalLipidos @porcentajeProteinas = @totalProteinas / totalNutrientes * 100 @porcentajeCarbohidratos = @totalCarbohidratos / totalNutrientes * 100 @porcentajeLipidos = @totalLipidos / totalNutrientes * 100 @huellaNutricional += alimento.huellaNutricional end |
#to_s ⇒ Object
Devuelve el objeto Plato formateado en un string endentible para un ser humano
120 121 122 123 124 125 126 127 |
# File 'lib/Plato.rb', line 120 def to_s result = "#{self.nombre} : " self.each{|alimento| result += "#{alimento.nombre}(#{alimento.cantidad*1000} g), " } if self.size > 0 result = result[0...-2] result += ". #{@porcentajeProteinas.round(2)}% Proteinas, #{@porcentajeCarbohidratos.round(2)}% Carbohidratos, #{@porcentajeLipidos.round(2)}% Lipidos, #{@totalVCT.round(2)} kcal" return result end |