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.
Files changed (81) hide show
  1. checksums.yaml +7 -0
  2. data/.comida.gemspec.swo +0 -0
  3. data/.comida.gemspec.swp +0 -0
  4. data/.coveralls.yml +2 -0
  5. data/.gitignore +13 -0
  6. data/.rspec +3 -0
  7. data/.travis.yml +7 -0
  8. data/Gemfile +4 -0
  9. data/Gemfile.lock +95 -0
  10. data/Guardfile +82 -0
  11. data/README.md +52 -0
  12. data/Rakefile +6 -0
  13. data/bin/console +14 -0
  14. data/bin/setup +8 -0
  15. data/comida.gemspec +38 -0
  16. data/docs/Comida/Comida.html +463 -0
  17. data/docs/Comida/Error.html +105 -0
  18. data/docs/Comida/Lista.html +627 -0
  19. data/docs/Comida/Plato.html +444 -0
  20. data/docs/Comida/PlatoHija.html +450 -0
  21. data/docs/Comida.html +228 -0
  22. data/docs/Gemfile.html +98 -0
  23. data/docs/Gemfile_lock.html +177 -0
  24. data/docs/Guardfile.html +165 -0
  25. data/docs/README_md.html +146 -0
  26. data/docs/Rakefile.html +100 -0
  27. data/docs/bin/setup.html +100 -0
  28. data/docs/comida_gemspec.html +132 -0
  29. data/docs/created.rid +16 -0
  30. data/docs/css/fonts.css +167 -0
  31. data/docs/css/rdoc.css +590 -0
  32. data/docs/fonts/Lato-Light.ttf +0 -0
  33. data/docs/fonts/Lato-LightItalic.ttf +0 -0
  34. data/docs/fonts/Lato-Regular.ttf +0 -0
  35. data/docs/fonts/Lato-RegularItalic.ttf +0 -0
  36. data/docs/fonts/SourceCodePro-Bold.ttf +0 -0
  37. data/docs/fonts/SourceCodePro-Regular.ttf +0 -0
  38. data/docs/images/add.png +0 -0
  39. data/docs/images/arrow_up.png +0 -0
  40. data/docs/images/brick.png +0 -0
  41. data/docs/images/brick_link.png +0 -0
  42. data/docs/images/bug.png +0 -0
  43. data/docs/images/bullet_black.png +0 -0
  44. data/docs/images/bullet_toggle_minus.png +0 -0
  45. data/docs/images/bullet_toggle_plus.png +0 -0
  46. data/docs/images/date.png +0 -0
  47. data/docs/images/delete.png +0 -0
  48. data/docs/images/find.png +0 -0
  49. data/docs/images/loadingAnimation.gif +0 -0
  50. data/docs/images/macFFBgHack.png +0 -0
  51. data/docs/images/package.png +0 -0
  52. data/docs/images/page_green.png +0 -0
  53. data/docs/images/page_white_text.png +0 -0
  54. data/docs/images/page_white_width.png +0 -0
  55. data/docs/images/plugin.png +0 -0
  56. data/docs/images/ruby.png +0 -0
  57. data/docs/images/tag_blue.png +0 -0
  58. data/docs/images/tag_green.png +0 -0
  59. data/docs/images/transparent.png +0 -0
  60. data/docs/images/wrench.png +0 -0
  61. data/docs/images/wrench_orange.png +0 -0
  62. data/docs/images/zoom.png +0 -0
  63. data/docs/index.html +115 -0
  64. data/docs/js/darkfish.js +161 -0
  65. data/docs/js/jquery.js +4 -0
  66. data/docs/js/navigation.js +141 -0
  67. data/docs/js/navigation.js.gz +0 -0
  68. data/docs/js/search.js +109 -0
  69. data/docs/js/search_index.js +1 -0
  70. data/docs/js/search_index.js.gz +0 -0
  71. data/docs/js/searcher.js +229 -0
  72. data/docs/js/searcher.js.gz +0 -0
  73. data/docs/table_of_contents.html +294 -0
  74. data/lib/comida/food.rb +99 -0
  75. data/lib/comida/lista.rb +167 -0
  76. data/lib/comida/menu.rb +79 -0
  77. data/lib/comida/palto_bloque.rb +59 -0
  78. data/lib/comida/plato.rb +233 -0
  79. data/lib/comida/version.rb +4 -0
  80. data/lib/comida.rb +12 -0
  81. metadata +220 -0
@@ -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
@@ -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
@@ -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
@@ -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