comida 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.comida.gemspec.swo +0 -0
- data/.comida.gemspec.swp +0 -0
- data/.coveralls.yml +2 -0
- data/.gitignore +13 -0
- data/.rspec +3 -0
- data/.travis.yml +7 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +95 -0
- data/Guardfile +82 -0
- data/README.md +52 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/comida.gemspec +38 -0
- data/docs/Comida/Comida.html +463 -0
- data/docs/Comida/Error.html +105 -0
- data/docs/Comida/Lista.html +627 -0
- data/docs/Comida/Plato.html +444 -0
- data/docs/Comida/PlatoHija.html +450 -0
- data/docs/Comida.html +228 -0
- data/docs/Gemfile.html +98 -0
- data/docs/Gemfile_lock.html +177 -0
- data/docs/Guardfile.html +165 -0
- data/docs/README_md.html +146 -0
- data/docs/Rakefile.html +100 -0
- data/docs/bin/setup.html +100 -0
- data/docs/comida_gemspec.html +132 -0
- data/docs/created.rid +16 -0
- data/docs/css/fonts.css +167 -0
- data/docs/css/rdoc.css +590 -0
- data/docs/fonts/Lato-Light.ttf +0 -0
- data/docs/fonts/Lato-LightItalic.ttf +0 -0
- data/docs/fonts/Lato-Regular.ttf +0 -0
- data/docs/fonts/Lato-RegularItalic.ttf +0 -0
- data/docs/fonts/SourceCodePro-Bold.ttf +0 -0
- data/docs/fonts/SourceCodePro-Regular.ttf +0 -0
- data/docs/images/add.png +0 -0
- data/docs/images/arrow_up.png +0 -0
- data/docs/images/brick.png +0 -0
- data/docs/images/brick_link.png +0 -0
- data/docs/images/bug.png +0 -0
- data/docs/images/bullet_black.png +0 -0
- data/docs/images/bullet_toggle_minus.png +0 -0
- data/docs/images/bullet_toggle_plus.png +0 -0
- data/docs/images/date.png +0 -0
- data/docs/images/delete.png +0 -0
- data/docs/images/find.png +0 -0
- data/docs/images/loadingAnimation.gif +0 -0
- data/docs/images/macFFBgHack.png +0 -0
- data/docs/images/package.png +0 -0
- data/docs/images/page_green.png +0 -0
- data/docs/images/page_white_text.png +0 -0
- data/docs/images/page_white_width.png +0 -0
- data/docs/images/plugin.png +0 -0
- data/docs/images/ruby.png +0 -0
- data/docs/images/tag_blue.png +0 -0
- data/docs/images/tag_green.png +0 -0
- data/docs/images/transparent.png +0 -0
- data/docs/images/wrench.png +0 -0
- data/docs/images/wrench_orange.png +0 -0
- data/docs/images/zoom.png +0 -0
- data/docs/index.html +115 -0
- data/docs/js/darkfish.js +161 -0
- data/docs/js/jquery.js +4 -0
- data/docs/js/navigation.js +141 -0
- data/docs/js/navigation.js.gz +0 -0
- data/docs/js/search.js +109 -0
- data/docs/js/search_index.js +1 -0
- data/docs/js/search_index.js.gz +0 -0
- data/docs/js/searcher.js +229 -0
- data/docs/js/searcher.js.gz +0 -0
- data/docs/table_of_contents.html +294 -0
- data/lib/comida/food.rb +99 -0
- data/lib/comida/lista.rb +167 -0
- data/lib/comida/menu.rb +79 -0
- data/lib/comida/palto_bloque.rb +59 -0
- data/lib/comida/plato.rb +233 -0
- data/lib/comida/version.rb +4 -0
- data/lib/comida.rb +12 -0
- metadata +220 -0
data/lib/comida/food.rb
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
# Autor:: Christian Torres Gonzalez
|
2
|
+
# Universidad de La laguna
|
3
|
+
# Lenguajes y Paradigmas de Programacion
|
4
|
+
#
|
5
|
+
# == Documentacion RDOC
|
6
|
+
#
|
7
|
+
# === Clase Comida
|
8
|
+
#
|
9
|
+
# Definición de la clase Comida con los metodos:
|
10
|
+
# * metodo initialize
|
11
|
+
# * <=>
|
12
|
+
# * to_s
|
13
|
+
# * calculo_valor_energetico
|
14
|
+
# * impacto_ambiental_hombre
|
15
|
+
# * impacto_ambiental_mujer
|
16
|
+
#
|
17
|
+
|
18
|
+
module Comida
|
19
|
+
# Clase utilizada para almacenar los atributos como nombre, proteinas,carbohidratos, lipidos, gei, terreno
|
20
|
+
# de los que esta formado cada alimento
|
21
|
+
class Comida
|
22
|
+
include Comparable
|
23
|
+
|
24
|
+
# Atributo utilizado para almacenar el nombre del alimento,
|
25
|
+
# Atributo utilizado para almacenar las proteinas del alimento,
|
26
|
+
# Atributo utilizado para almacenar los carbohidratos del alimento,
|
27
|
+
# Atributo utilizado para almacenar los lipidos del alimento,
|
28
|
+
# Atributo utilizado para almacenar el valor de gases de efecto invernadero
|
29
|
+
# Atributo utilizado para almacenar el valor del terreno del alimento
|
30
|
+
attr_reader :nombre, :proteinas, :carbohidratos, :lipidos, :gei, :terreno
|
31
|
+
|
32
|
+
# Metodo utilizado para comparar dos alimentos. El cual se basa en el valor energetico y las emisiones
|
33
|
+
# de efecto invernadero y del terrno. Utilizamos un array para la comparacion el cual va a comparar
|
34
|
+
# elemento a elemento
|
35
|
+
def <=>(other)
|
36
|
+
comparando = [self.calculo_valor_energetico, self.gei, self.terreno]
|
37
|
+
comparador = [other.calculo_valor_energetico, other.gei, other.terreno]
|
38
|
+
comparando <=> comparador
|
39
|
+
end
|
40
|
+
|
41
|
+
# Meetodo encargado de asignar a cada variable el valor del argumento recibido
|
42
|
+
def initialize(name, protein, carbo, lipido, g, t)
|
43
|
+
@nombre = name # Atributo utilizado para almacenar el nombre del alimento
|
44
|
+
@proteinas = protein # Atributo utilizado para almacenar las proteinas del alimento
|
45
|
+
@carbohidratos = carbo # Atributo utilizado para almacenar los carbohidratos del alimento
|
46
|
+
@lipidos = lipido # Atributo utilizado para almacenar los lipidos del alimento
|
47
|
+
@gei = g # Atributo utilizado para almacenar el valor de gases de efecto invernadero
|
48
|
+
@terreno = t # Atributo utilizado para almacenar el valor del terreno del alimento
|
49
|
+
end
|
50
|
+
|
51
|
+
# Metodo utilizado para formatear la salida de las variables de un alimento.
|
52
|
+
# Es decir mostrarlo en formato string con los valores de cada atributo
|
53
|
+
def to_s
|
54
|
+
"(#{@nombre}, #{@proteinas}, #{@carbohidratos}, #{@lipidos}, #{@gei}, #{@terreno})"
|
55
|
+
end
|
56
|
+
|
57
|
+
# Funcion utilizada para el calculo del valor energetico, el cual consiste simplemente
|
58
|
+
# en multiplicar las proteinas, lipidos y carbohidratos por su respectivo indice
|
59
|
+
def calculo_valor_energetico
|
60
|
+
(@carbohidratos*4) + (@lipidos*9) + (@proteinas*4)
|
61
|
+
end
|
62
|
+
|
63
|
+
# Metodo utilizado para calcular el impacto ambiental del hombre. Para ello se utiliza
|
64
|
+
# el valor de los gases de efecto invernadero y del terreno. Al ser un array de alimentos,
|
65
|
+
# es por ello que recorremos todo el array y sumamos cada valor de gei y terreno de almento.
|
66
|
+
# Esta es la funcion utilizada para el hombre
|
67
|
+
def impacto_ambiental_hombre(value)
|
68
|
+
i = 0
|
69
|
+
impacto_ambiental = 0.0
|
70
|
+
impacto_terreno = 0.0
|
71
|
+
|
72
|
+
while i < value.length
|
73
|
+
impacto_ambiental += value[i].gei
|
74
|
+
impacto_terreno += value[i].terreno
|
75
|
+
i += 1
|
76
|
+
end
|
77
|
+
|
78
|
+
salida = [impacto_ambiental, impacto_terreno]
|
79
|
+
end
|
80
|
+
|
81
|
+
# Metodo utilizado para calcular el impacto ambiental del hombre. Para ello se utiliza
|
82
|
+
# el valor de los gases de efecto invernadero y del terreno. Al ser un array de alimentos,
|
83
|
+
# es por ello que recorremos todo el array y sumamos cada valor de gei y terreno de almento.
|
84
|
+
# Esta es la funcion utilizada para el hombre
|
85
|
+
def impacto_ambiental_mujer(value)
|
86
|
+
i = 0
|
87
|
+
impacto_ambiental = 0.0
|
88
|
+
impacto_terreno = 0.0
|
89
|
+
|
90
|
+
while i < value.length
|
91
|
+
impacto_ambiental += value[i].gei
|
92
|
+
impacto_terreno += value[i].terreno
|
93
|
+
i += 1
|
94
|
+
end
|
95
|
+
|
96
|
+
salida = [impacto_ambiental, impacto_terreno]
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
data/lib/comida/lista.rb
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
# Autor:: Christian Torres Gonzalez
|
2
|
+
# Universidad de La laguna
|
3
|
+
# Lenguajes y Paradigmas de Programacion
|
4
|
+
#
|
5
|
+
# == Documentacion RDOC
|
6
|
+
#
|
7
|
+
# === Clase Lista
|
8
|
+
#
|
9
|
+
# Definición de la clase Lista con los metodos:
|
10
|
+
# * metodo initialize
|
11
|
+
# * each
|
12
|
+
# * insert_tail
|
13
|
+
# * isnert_head
|
14
|
+
# * insert_muchos_head
|
15
|
+
# * insert_muchos_tail
|
16
|
+
# * extract_head
|
17
|
+
# * extract_tail
|
18
|
+
# * calculo_emisiones_ei
|
19
|
+
# * calculo_emisiones_ei_anuales
|
20
|
+
# * calculo_terreno
|
21
|
+
#
|
22
|
+
|
23
|
+
module Comida
|
24
|
+
|
25
|
+
# Estructura utilizada para la lista, es decir, cada lista va a contener un atributovalue que va
|
26
|
+
# a ser el alimento que se va a utilizar, y los atributos next y prev para poder moverse por la lista
|
27
|
+
Nodo = Struct.new(:value, :next, :prev)
|
28
|
+
|
29
|
+
# Clase utilizada para almacenar un conjunto de alimetnos que vamos a unir para formar un plato
|
30
|
+
class Lista
|
31
|
+
include Enumerable
|
32
|
+
|
33
|
+
# Variable utilizada para trabajar con la lista por delante,
|
34
|
+
# Variable utilizada para trabajar con la lista por detras
|
35
|
+
attr_reader :head, :tail
|
36
|
+
|
37
|
+
# Metodo del Enumerable para poder moverse por la lista e implementar metodos como collect
|
38
|
+
# sort,select min, max,
|
39
|
+
def each
|
40
|
+
inicio = head
|
41
|
+
while inicio != nil
|
42
|
+
yield inicio.value
|
43
|
+
|
44
|
+
inicio = inicio.next
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# Metodo para inizializar los atributos de la clase, que en este caso son a nil
|
49
|
+
def initialize
|
50
|
+
@head = nil # Variable utilizada para trabajar con la lista por delante
|
51
|
+
@tail = nil # Variable utilizada para trabajar con la lista por detras
|
52
|
+
end
|
53
|
+
|
54
|
+
# Metodo utilizado para insertar datos en la lista por la cola
|
55
|
+
def insert_tail(value)
|
56
|
+
if (@head == nil && @tail == nil) then
|
57
|
+
nodo = Nodo.new(value, nil, nil)
|
58
|
+
@head = nodo
|
59
|
+
@tail = nodo
|
60
|
+
else
|
61
|
+
nodo = Nodo.new(value,nil,@tail)
|
62
|
+
@tail[:next] = nodo
|
63
|
+
@tail = nodo
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# Metodo utilizado para insertar datos en la lista por la cabeza por delante
|
68
|
+
def insert_head(value)
|
69
|
+
if (@head == nil && @tail == nil) then
|
70
|
+
nodo = Nodo.new(value, nil, nil)
|
71
|
+
@head = nodo
|
72
|
+
@tail = nodo
|
73
|
+
else
|
74
|
+
nodo = Nodo.new(value,@head,nil)
|
75
|
+
@head[:prev] = nodo
|
76
|
+
@head = nodo
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# Metodo utilizado para insertar mas de un dato a la vez en la lista por la cabeza
|
81
|
+
def insert_muchos_head(value)
|
82
|
+
i = 0
|
83
|
+
|
84
|
+
while i < value.length
|
85
|
+
insert_head(value[i])
|
86
|
+
i += 1
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
# Metodo utilizado para insertar mas de un dato a la vez en la lista por la cola
|
91
|
+
def insert_muchos_tail(value)
|
92
|
+
i = 0
|
93
|
+
|
94
|
+
while i < value.length
|
95
|
+
insert_tail(value[i])
|
96
|
+
i += 1
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
# Metodo utilizado para extraer elementos de la lista por la cabeza, simplemente tenemos
|
101
|
+
# que asignar la cabeza al siguiente elemento del que esta apuntando actualmente
|
102
|
+
def extract_head()
|
103
|
+
if (@head != nil && @tail != nil) then
|
104
|
+
if (@head == @tail) then
|
105
|
+
@head = nil
|
106
|
+
@tail = nil
|
107
|
+
else
|
108
|
+
@head = @head[:next]
|
109
|
+
@head[:prev] = nil
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
# Metodo utilizado para extraer elementos de la lista por la cola, simplemente tenemos
|
115
|
+
# que asignar la cola al anterior elemento del que esta apuntando actualmente
|
116
|
+
def extract_tail()
|
117
|
+
if (@head != nil && @tail != nil) then
|
118
|
+
if (@head == @tail) then
|
119
|
+
@head = nil
|
120
|
+
@tail = nil
|
121
|
+
else
|
122
|
+
@tail = @tail[:prev]
|
123
|
+
@tail[:next] = nil
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
# Metodo empleado para el calculo de las emisiones de efecto invernadero. Para ello solo tenemos
|
129
|
+
# que recorrer cada elemetno de la lista e ir sumando el valor de gei
|
130
|
+
def calculo_emisiones_ei
|
131
|
+
i = 0
|
132
|
+
suma = 0
|
133
|
+
nodo = self.head
|
134
|
+
|
135
|
+
while nodo != nil
|
136
|
+
suma = suma + nodo.value.gei
|
137
|
+
nodo = nodo[:next]
|
138
|
+
i += 1
|
139
|
+
end
|
140
|
+
|
141
|
+
return suma
|
142
|
+
end
|
143
|
+
|
144
|
+
# Metodo para calcular las emisinoes de efecto invernadero anuales. SOlo tenemos que
|
145
|
+
# obtener el valor de las emisione de efecto invernadero en un dia y multiplicarlo por 365
|
146
|
+
def calculo_emisiones_ei_anuales
|
147
|
+
return self.calculo_emisiones_ei * 365
|
148
|
+
end
|
149
|
+
|
150
|
+
# Metodo para calcular el terreno empleado en funcion de los alimetnos de la lista.
|
151
|
+
# Para ello solo tenemos que recorrer la lista e ir sumando el valor del terreno
|
152
|
+
# de cada alimento
|
153
|
+
def calculo_terreno(lista)
|
154
|
+
i = 0
|
155
|
+
suma = 0
|
156
|
+
nodo = lista.head
|
157
|
+
|
158
|
+
while nodo != nil
|
159
|
+
suma = suma + nodo.value.terreno
|
160
|
+
nodo = nodo[:next]
|
161
|
+
i += 1
|
162
|
+
end
|
163
|
+
|
164
|
+
suma
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
data/lib/comida/menu.rb
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
# Autor:: Christian Torres Gonzalez
|
2
|
+
# Universidad de La laguna
|
3
|
+
# Lenguajes y Paradigmas de Programacion
|
4
|
+
#
|
5
|
+
# == Documentacion RDOC
|
6
|
+
#
|
7
|
+
# === Clase Comida
|
8
|
+
#
|
9
|
+
# Definición de la clase Comida con los metodos:
|
10
|
+
# * metodo initialize
|
11
|
+
# * <=>
|
12
|
+
# * to_s
|
13
|
+
# * calculo_valor_energetico
|
14
|
+
# * impacto_ambiental_hombre
|
15
|
+
# * impacto_ambiental_mujer
|
16
|
+
#
|
17
|
+
|
18
|
+
module Comida
|
19
|
+
class Menu
|
20
|
+
attr_reader :nombre, :descripcion, :platos, :precios, :precio_total, :v_nutricional, :v_ambiental
|
21
|
+
|
22
|
+
def initialize(nombre, &block)
|
23
|
+
@nombre = nombre
|
24
|
+
@platos = []
|
25
|
+
|
26
|
+
if block_given?
|
27
|
+
if block.arity == 1
|
28
|
+
yield self
|
29
|
+
else
|
30
|
+
instance_eval(&block)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def descripcion(descrip)
|
36
|
+
@descripcion = descrip
|
37
|
+
end
|
38
|
+
|
39
|
+
def plato(nombre, options = {})
|
40
|
+
plato = nombre
|
41
|
+
plato << "(#{options[:descripcion]})" if options[:descripcion]
|
42
|
+
plato << "(#{options[:cantidad]})" if options[:cantidad]
|
43
|
+
plato << "(#{options[:precio]})" if options[:precio]
|
44
|
+
|
45
|
+
@platos << plato
|
46
|
+
end
|
47
|
+
|
48
|
+
def preparacion(descripcion, options = {})
|
49
|
+
preparar = descripcion
|
50
|
+
preparar << "(#{options[:duracion]})" if options[:duracion]
|
51
|
+
|
52
|
+
@platos << preparar
|
53
|
+
end
|
54
|
+
|
55
|
+
def precio_total(precio)
|
56
|
+
@precio_total = precio
|
57
|
+
end
|
58
|
+
|
59
|
+
def valor_nutricional(valor)
|
60
|
+
@v_nutricional = valor
|
61
|
+
end
|
62
|
+
|
63
|
+
def valor_ambiental(valor)
|
64
|
+
@v_ambiental = valor
|
65
|
+
end
|
66
|
+
|
67
|
+
def to_s
|
68
|
+
output = @nombre
|
69
|
+
output << "\n#{'=' * @nombre.size}\n\n"
|
70
|
+
output << "Platos : \n\n"
|
71
|
+
|
72
|
+
@platos.each_with_index do |plato, index|
|
73
|
+
output << "#{index + 1}) #{plato[:descripcion]}, #{plato[:cantidad]}, #{plato[:precio]}\n"
|
74
|
+
end
|
75
|
+
|
76
|
+
output
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# Autor:: Christian Torres Gonzalez
|
2
|
+
# Universidad de La laguna
|
3
|
+
# Lenguajes y Paradigmas de Programacion
|
4
|
+
#
|
5
|
+
# == Documentacion RDOC
|
6
|
+
#
|
7
|
+
# === Clase Comida
|
8
|
+
#
|
9
|
+
# Definición de la clase Comida con los metodos:
|
10
|
+
# * metodo initialize
|
11
|
+
# * <=>
|
12
|
+
# * to_s
|
13
|
+
# * calculo_valor_energetico
|
14
|
+
# * impacto_ambiental_hombre
|
15
|
+
# * impacto_ambiental_mujer
|
16
|
+
#
|
17
|
+
|
18
|
+
module Comida
|
19
|
+
class Plato_bloque
|
20
|
+
attr_reader :nombre, :descripcion, :alimentos
|
21
|
+
|
22
|
+
def initialize(name, &block)
|
23
|
+
@nombre = name
|
24
|
+
@alimentos = []
|
25
|
+
|
26
|
+
if block_given?
|
27
|
+
if block.arity == 1
|
28
|
+
yield self
|
29
|
+
else
|
30
|
+
instance_eval(&block)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def descripcion(descrip)
|
36
|
+
@descripcion = descrip
|
37
|
+
end
|
38
|
+
|
39
|
+
def alimento(descripcion, options = {})
|
40
|
+
descripcion << "(#{options[:description]})" if options[:description]
|
41
|
+
descripcion << "(#{options[:gramos]})" if options[:gramos]
|
42
|
+
|
43
|
+
@alimentos << descripcion
|
44
|
+
end
|
45
|
+
|
46
|
+
def to_s
|
47
|
+
output = @nombre
|
48
|
+
output << "\n#{'=' * @nombre.size}\n\n"
|
49
|
+
output << "Platos : \n\n"
|
50
|
+
|
51
|
+
@alimentos.each_with_index do |alimento, index|
|
52
|
+
output << "#{index + 1}) #{alimento[:descripcion]}, #{alimento[:gramos]}\n"
|
53
|
+
end
|
54
|
+
|
55
|
+
output
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
end
|
data/lib/comida/plato.rb
ADDED
@@ -0,0 +1,233 @@
|
|
1
|
+
# Autor:: Christian Torres Gonzalez
|
2
|
+
# Universidad de La laguna
|
3
|
+
# Lenguajes y Paradigmas de Programacion
|
4
|
+
#
|
5
|
+
# == Documentacion RDOC
|
6
|
+
#
|
7
|
+
# === Clase Plato
|
8
|
+
#
|
9
|
+
# Definición de la clase Plato con los metodos:
|
10
|
+
# * metodo initialize
|
11
|
+
# * porcentaje_proteinas
|
12
|
+
# * porcentaje_lipidos
|
13
|
+
# * porcentaje_carbohidratos
|
14
|
+
# * calculo_valor_calorico_total
|
15
|
+
# * to_s
|
16
|
+
#
|
17
|
+
#
|
18
|
+
# Definicion de la clase PlatoHIja con metodos:
|
19
|
+
# * initialize
|
20
|
+
# * <=>
|
21
|
+
# * calculo_emisiones_diarias
|
22
|
+
# * calculo_metros_terreno
|
23
|
+
# * to_s
|
24
|
+
# * huella_nutricional
|
25
|
+
#
|
26
|
+
|
27
|
+
|
28
|
+
module Comida
|
29
|
+
# Clase Plato la cual vamos a utilizar para almacenar una lista de alimentos que va a ser la lista
|
30
|
+
# que utilizamos para almacenar los alimentos del plato y la otra lista que es la de cantidades
|
31
|
+
# utilizadas para cada alimento
|
32
|
+
class Plato
|
33
|
+
# Nombre del Plato, Lista con los alimentos que forman el plato, Lista con las cantidades que hay que usar de cada alimento
|
34
|
+
attr_reader :nombre_plato, :lista_alimentos, :lista_cantidades
|
35
|
+
|
36
|
+
# Metodo inicializar los atributos del Plato
|
37
|
+
def initialize(nombre,alimentos,cantidad)
|
38
|
+
@nombre_plato = nombre # Nombre del Plato
|
39
|
+
@lista_alimentos = alimentos # Lista con los alimentos que forman el plato
|
40
|
+
@lista_cantidades = cantidad # Lista con las cantidades que hay que usar de cada alimento
|
41
|
+
end
|
42
|
+
|
43
|
+
# Metodo para calcular el porcentaje total de proteinas de todos los alimentos que se han
|
44
|
+
# usado para crear el plato
|
45
|
+
def porcentaje_proteinas
|
46
|
+
recorrido = lista_alimentos.head
|
47
|
+
acumulador = 0
|
48
|
+
porcentaje = 0
|
49
|
+
|
50
|
+
while recorrido != nil
|
51
|
+
acumulador = acumulador + recorrido.value.proteinas + recorrido.value.carbohidratos + recorrido.value.lipidos
|
52
|
+
porcentaje = porcentaje + recorrido.value.proteinas
|
53
|
+
|
54
|
+
recorrido = recorrido.next
|
55
|
+
end
|
56
|
+
|
57
|
+
((porcentaje * 100)/acumulador).round(2)
|
58
|
+
end
|
59
|
+
|
60
|
+
# Metodo para calcular el porcentaje total de lipidos de todos los alimentos que se han
|
61
|
+
# usado para crear el plato
|
62
|
+
def porcentaje_lipidos
|
63
|
+
recorrido = lista_alimentos.head
|
64
|
+
acumulador = 0
|
65
|
+
porcentaje = 0
|
66
|
+
|
67
|
+
while recorrido != nil
|
68
|
+
acumulador = acumulador + recorrido.value.proteinas + recorrido.value.carbohidratos + recorrido.value.lipidos
|
69
|
+
porcentaje = porcentaje + recorrido.value.lipidos
|
70
|
+
|
71
|
+
recorrido = recorrido.next
|
72
|
+
end
|
73
|
+
|
74
|
+
((porcentaje * 100)/acumulador).round(2)
|
75
|
+
end
|
76
|
+
|
77
|
+
# Metodo para calcular el porcentaje total de hidratos de carbono de todos los alimentos que se han
|
78
|
+
# usado para crear el plato
|
79
|
+
def porcentaje_carbohidratos
|
80
|
+
recorrido = lista_alimentos.head
|
81
|
+
acumulador = 0
|
82
|
+
porcentaje = 0
|
83
|
+
|
84
|
+
while recorrido != nil
|
85
|
+
acumulador = acumulador + recorrido.value.proteinas + recorrido.value.carbohidratos + recorrido.value.lipidos
|
86
|
+
porcentaje = porcentaje + recorrido.value.carbohidratos
|
87
|
+
|
88
|
+
recorrido = recorrido.next
|
89
|
+
end
|
90
|
+
|
91
|
+
((porcentaje * 100)/acumulador).round(2)
|
92
|
+
end
|
93
|
+
|
94
|
+
# Calculo del valor calorico del plato en funcion de las proteinas,lipidos e hidratos de carbono
|
95
|
+
# que contienen los alimentos usados
|
96
|
+
def calculo_valor_calorico_total
|
97
|
+
recorrido = lista_alimentos.head
|
98
|
+
cantidad = lista_cantidades.head
|
99
|
+
acumulador = 0
|
100
|
+
|
101
|
+
while (recorrido != nil && cantidad != nil)
|
102
|
+
acumulador = acumulador + (((recorrido.value.proteinas * cantidad.value)/1000) * 4) + (((recorrido.value.lipidos * cantidad.value)/1000) * 9) + (((recorrido.value.carbohidratos * cantidad.value)/1000) * 4)
|
103
|
+
|
104
|
+
recorrido = recorrido.next
|
105
|
+
cantidad = cantidad.next
|
106
|
+
end
|
107
|
+
|
108
|
+
acumulador.round(2)
|
109
|
+
end
|
110
|
+
|
111
|
+
# Metodo para formatear la salida de la cantidad de cada alimento con su correspondiente alimento
|
112
|
+
def to_s
|
113
|
+
recorrido = lista_alimentos.head
|
114
|
+
cantidad = lista_cantidades.head
|
115
|
+
formateo = []
|
116
|
+
|
117
|
+
while (recorrido != nil && cantidad != nil)
|
118
|
+
salida = cantidad.value.to_s + "gr de " + recorrido.value.nombre
|
119
|
+
formateo.push(salida)
|
120
|
+
|
121
|
+
recorrido = recorrido.next
|
122
|
+
cantidad = cantidad.next
|
123
|
+
end
|
124
|
+
|
125
|
+
formateo
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
|
130
|
+
# Clase PlatoHija la cual vamos a utilizar para almacenar una las emisiones de efecto invernadero
|
131
|
+
# y el valor del terreno. Al ser una clase heredada, podremos acceder a los atributos de las clase
|
132
|
+
# padre
|
133
|
+
class PlatoHija < Plato
|
134
|
+
include Comparable
|
135
|
+
|
136
|
+
# Variable para almacenar valor de efceto invernadero,
|
137
|
+
# variable para almacenar valor del terreno
|
138
|
+
attr_reader :emisiones_diarias, :metros_terreno
|
139
|
+
|
140
|
+
# Definicion del metodo <=> utilizado para comparar la huella nutricional de platos
|
141
|
+
def <=>(other)
|
142
|
+
comparando = self.huella_nutricional
|
143
|
+
comparador = other.huella_nutricional
|
144
|
+
comparando <=> comparador
|
145
|
+
end
|
146
|
+
|
147
|
+
# Al igual que en la clase padre, inicializacion de los atributos con los que va a trabajar
|
148
|
+
# la clase PlatoHija
|
149
|
+
def initialize(nombre,alimentos,cantidad)
|
150
|
+
super(nombre,alimentos,cantidad) # Llamada al contructor de la clase padre
|
151
|
+
@emisiones_diarias = 0 # Variable para almacenar valor de efceto invernadero
|
152
|
+
@metros_terreno = 0 # variable para almacenar valor del terreno
|
153
|
+
end
|
154
|
+
|
155
|
+
# Metodo empleado para el calculo de las emisiones diarias de efecto invernadero
|
156
|
+
def calculo_emisiones_diarias
|
157
|
+
recorrido = lista_alimentos.head
|
158
|
+
cantidad = lista_cantidades.head
|
159
|
+
|
160
|
+
while (recorrido != nil && cantidad != nil)
|
161
|
+
@emisiones_diarias = @emisiones_diarias + ((recorrido.value.gei * cantidad.value)/1000)
|
162
|
+
|
163
|
+
recorrido = recorrido.next
|
164
|
+
cantidad = cantidad.next
|
165
|
+
end
|
166
|
+
|
167
|
+
@emisiones_diarias
|
168
|
+
end
|
169
|
+
|
170
|
+
# Metodo empleado para el calculo de los metros de terreno utilizados para la
|
171
|
+
# elaboracion del plato
|
172
|
+
def calculo_metros_terreno
|
173
|
+
recorrido = lista_alimentos.head
|
174
|
+
cantidad = lista_cantidades.head
|
175
|
+
|
176
|
+
while (recorrido != nil && cantidad != nil)
|
177
|
+
@metros_terreno = @emisiones_diarias + ((recorrido.value.terreno * cantidad.value)/1000)
|
178
|
+
|
179
|
+
recorrido = recorrido.next
|
180
|
+
cantidad = cantidad.next
|
181
|
+
end
|
182
|
+
|
183
|
+
@metros_terreno
|
184
|
+
end
|
185
|
+
|
186
|
+
# Metodo para formatear la salida de la cantidad de gases de efecto invernadero de cada alimentos
|
187
|
+
# ademas de los metros de terreno empleados
|
188
|
+
def to_s
|
189
|
+
recorrido = lista_alimentos.head
|
190
|
+
cantidad = lista_cantidades.head
|
191
|
+
formateo = []
|
192
|
+
|
193
|
+
while (recorrido != nil && cantidad != nil)
|
194
|
+
salida = cantidad.value.to_s + "gr de " + recorrido.value.nombre
|
195
|
+
formateo.push(salida)
|
196
|
+
|
197
|
+
recorrido = recorrido.next
|
198
|
+
cantidad = cantidad.next
|
199
|
+
end
|
200
|
+
|
201
|
+
formateo.push(@emisiones_diarias)
|
202
|
+
formateo.push(@metros_terreno)
|
203
|
+
|
204
|
+
formateo
|
205
|
+
end
|
206
|
+
|
207
|
+
# Metodo utilizado para el calculo del valor de la huella nutricional del plato, el cual
|
208
|
+
# se basa en el dato medio del calculo del valor calorico y el calculo de las emisiones
|
209
|
+
# de efecto invernadero
|
210
|
+
def huella_nutricional
|
211
|
+
numero1 = self.calculo_valor_calorico_total
|
212
|
+
numero2 = self.calculo_emisiones_diarias
|
213
|
+
|
214
|
+
if numero1 < 670
|
215
|
+
ienergia = 1
|
216
|
+
elsif numero1 <=830
|
217
|
+
ienergia = 2
|
218
|
+
else
|
219
|
+
ienergia = 3
|
220
|
+
end
|
221
|
+
|
222
|
+
if numero2 < 800
|
223
|
+
icarbono = 1
|
224
|
+
elsif numero2 <= 1200
|
225
|
+
icarbono = 2
|
226
|
+
else
|
227
|
+
icarbono = 3
|
228
|
+
end
|
229
|
+
|
230
|
+
media = (ienergia + icarbono)/2
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|