Class: Plato

Inherits:
ListaDobleEnlazada show all
Includes:
Comparable
Defined in:
lib/Plato.rb

Overview

Esta clase describe una lista de instancias de la clase Alimento

Direct Known Subclasses

PlatoEficienciaEnergetica

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

Attributes inherited from ListaDobleEnlazada

#head, #size, #tail

Class Method Summary collapse

Instance Method Summary collapse

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

#nombreObject

Returns the value of attribute nombre.



21
22
23
# File 'lib/Plato.rb', line 21

def nombre
  @nombre
end

#pesoObject (readonly)

Returns the value of attribute peso.



20
21
22
# File 'lib/Plato.rb', line 20

def peso
  @peso
end

#porcentajeCarbohidratosObject (readonly)

Returns the value of attribute porcentajeCarbohidratos.



20
21
22
# File 'lib/Plato.rb', line 20

def porcentajeCarbohidratos
  @porcentajeCarbohidratos
end

#porcentajeLipidosObject (readonly)

Returns the value of attribute porcentajeLipidos.



20
21
22
# File 'lib/Plato.rb', line 20

def porcentajeLipidos
  @porcentajeLipidos
end

#porcentajeProteinasObject (readonly)

Returns the value of attribute porcentajeProteinas.



20
21
22
# File 'lib/Plato.rb', line 20

def porcentajeProteinas
  @porcentajeProteinas
end

#precioObject

Returns the value of attribute precio.



21
22
23
# File 'lib/Plato.rb', line 21

def precio
  @precio
end

#totalCarbohidratosObject (readonly)

Returns the value of attribute totalCarbohidratos.



20
21
22
# File 'lib/Plato.rb', line 20

def totalCarbohidratos
  @totalCarbohidratos
end

#totalLipidosObject (readonly)

Returns the value of attribute totalLipidos.



20
21
22
# File 'lib/Plato.rb', line 20

def totalLipidos
  @totalLipidos
end

#totalProteinasObject (readonly)

Returns the value of attribute totalProteinas.



20
21
22
# File 'lib/Plato.rb', line 20

def totalProteinas
  @totalProteinas
end

#totalVCTObject (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

Parameters:



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(options = {} )
	nombre = options[:descripcion] ? "#{options[:descripcion]}" : 'Sin nombre'
	proteinas = options[:proteinas] ? options[:proteinas] : 0.1
	carbohidratos = options[:carbohidratos] ? options[:carbohidratos] : 0.1
	lipidos = options[:lipidos] ? options[:lipidos] : 0.1
	gei = options[:gei] ? options[:gei] : 0.1
	terreno = options[:terreno] ? options[:terreno] : 0.1
	cantidad = options[:gramos] ? options[: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’

Parameters:

  • nodo (Alimento)

    El alimento que acaba de ser eliminado de la lista



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

#huellaNutricionalObject

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’

Parameters:

  • value (Alimento)

    El alimento que acaba de ser insertado



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_sObject

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