alimentacion 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 (79) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +7 -0
  5. data/Gemfile +4 -0
  6. data/Gemfile.lock +95 -0
  7. data/Guardfile +82 -0
  8. data/README.md +9 -0
  9. data/Rakefile +6 -0
  10. data/alimentacion.gemspec +38 -0
  11. data/bin/console +14 -0
  12. data/bin/setup +8 -0
  13. data/docs/Alimentacion.html +110 -0
  14. data/docs/Alimentacion/Error.html +103 -0
  15. data/docs/Alimentos.html +529 -0
  16. data/docs/Eficiencia_Energetica.html +484 -0
  17. data/docs/Gemfile.html +98 -0
  18. data/docs/Gemfile_lock.html +177 -0
  19. data/docs/Guardfile.html +165 -0
  20. data/docs/Lista.html +622 -0
  21. data/docs/Object.html +127 -0
  22. data/docs/Plato.html +504 -0
  23. data/docs/README_md.html +104 -0
  24. data/docs/Rakefile.html +100 -0
  25. data/docs/alimentacion_gemspec.html +132 -0
  26. data/docs/bin/setup.html +100 -0
  27. data/docs/created.rid +16 -0
  28. data/docs/css/fonts.css +167 -0
  29. data/docs/css/rdoc.css +590 -0
  30. data/docs/fonts/Lato-Light.ttf +0 -0
  31. data/docs/fonts/Lato-LightItalic.ttf +0 -0
  32. data/docs/fonts/Lato-Regular.ttf +0 -0
  33. data/docs/fonts/Lato-RegularItalic.ttf +0 -0
  34. data/docs/fonts/SourceCodePro-Bold.ttf +0 -0
  35. data/docs/fonts/SourceCodePro-Regular.ttf +0 -0
  36. data/docs/images/add.png +0 -0
  37. data/docs/images/arrow_up.png +0 -0
  38. data/docs/images/brick.png +0 -0
  39. data/docs/images/brick_link.png +0 -0
  40. data/docs/images/bug.png +0 -0
  41. data/docs/images/bullet_black.png +0 -0
  42. data/docs/images/bullet_toggle_minus.png +0 -0
  43. data/docs/images/bullet_toggle_plus.png +0 -0
  44. data/docs/images/date.png +0 -0
  45. data/docs/images/delete.png +0 -0
  46. data/docs/images/find.png +0 -0
  47. data/docs/images/loadingAnimation.gif +0 -0
  48. data/docs/images/macFFBgHack.png +0 -0
  49. data/docs/images/package.png +0 -0
  50. data/docs/images/page_green.png +0 -0
  51. data/docs/images/page_white_text.png +0 -0
  52. data/docs/images/page_white_width.png +0 -0
  53. data/docs/images/plugin.png +0 -0
  54. data/docs/images/ruby.png +0 -0
  55. data/docs/images/tag_blue.png +0 -0
  56. data/docs/images/tag_green.png +0 -0
  57. data/docs/images/transparent.png +0 -0
  58. data/docs/images/wrench.png +0 -0
  59. data/docs/images/wrench_orange.png +0 -0
  60. data/docs/images/zoom.png +0 -0
  61. data/docs/index.html +117 -0
  62. data/docs/js/darkfish.js +161 -0
  63. data/docs/js/jquery.js +4 -0
  64. data/docs/js/navigation.js +141 -0
  65. data/docs/js/navigation.js.gz +0 -0
  66. data/docs/js/search.js +109 -0
  67. data/docs/js/search_index.js +1 -0
  68. data/docs/js/search_index.js.gz +0 -0
  69. data/docs/js/searcher.js +229 -0
  70. data/docs/js/searcher.js.gz +0 -0
  71. data/docs/table_of_contents.html +293 -0
  72. data/lib/alimentacion.rb +11 -0
  73. data/lib/alimentacion/alimentos.rb +65 -0
  74. data/lib/alimentacion/lista.rb +136 -0
  75. data/lib/alimentacion/menu_dsl.rb +36 -0
  76. data/lib/alimentacion/plato_dsl.rb +45 -0
  77. data/lib/alimentacion/platos.rb +199 -0
  78. data/lib/alimentacion/version.rb +3 -0
  79. metadata +221 -0
@@ -0,0 +1,11 @@
1
+ require "alimentacion/version"
2
+ require "alimentacion/alimentos"
3
+ require "alimentacion/lista"
4
+ require "alimentacion/platos"
5
+ require "alimentacion/plato_dsl"
6
+ require "alimentacion/menu_dsl"
7
+
8
+ module Alimentacion
9
+ class Error < StandardError; end
10
+ # Your code goes here...
11
+ end
@@ -0,0 +1,65 @@
1
+ # encoding: utf-8
2
+ # Esta clase contiene información sobre alimentos, tales como las proteínas, lípidos, hidratos,etc.
3
+ # Se calcula el valor energético de cada alimento, así como su impacto ambiental en hombres y mujeres.
4
+ #
5
+ # Author:: David Hernández Suárez (mailto:david@alimentos)
6
+ # Copyright:: Cretive Commons
7
+ # License:: Distributes under the same terms as Ruby
8
+
9
+ class Alimentos
10
+ attr_accessor :nombre,:proteinas,:hidratos,:lipidos,:gei,:terreno
11
+ include Comparable
12
+
13
+ # Se utiliza el módulo Comparable, comparando los alimentos en base a sus proteínas.
14
+ def <=>(anOther)
15
+ self. proteinas <=> anOther.proteinas
16
+ end
17
+
18
+ # Se asignan el nombre del alimento, sus proteínas, hidratos, lípidos, gases y uso del terreno.
19
+ def initialize(nombre,proteinas,hidratos,lipidos,gei,terreno)
20
+ @nombre,@proteinas,@hidratos,@lipidos,@gei,@terreno = nombre,proteinas,hidratos,lipidos,gei,terreno
21
+ end
22
+
23
+ # Se obtiene el alimento formateado.
24
+ def to_s
25
+ "(#{@nombre},#{@proteinas},#{@hidratos},#{@lipidos},#{@gei},#{@terreno})"
26
+ end
27
+
28
+ # Se calcula el valor energético (calórico) del alimento.
29
+ def valor_energetico
30
+ energia = 4 * (@proteinas + @hidratos) + (@lipidos * 9)
31
+ energia.round(2)
32
+ end
33
+
34
+ # Función auxiliar para calcular los gases anuales.
35
+ def auxiliar(gramos)
36
+ x = ( @gei * gramos ) / 1000
37
+ end
38
+
39
+ # Función auxiliar para calcular el uso del terreno anual.
40
+ def auxiliar2(gramos)
41
+ x = ( @terreno * gramos ) / 1000
42
+ end
43
+
44
+ # Se calcula el impacto ambiental de un alimento en un hombre.
45
+ def impacto_hombre(gramos)
46
+ alimento1 = Alimentos.new("Carne vaca",21.1,0.0,3.1,50.0,164.0)
47
+ alimento2 = Alimentos.new("Salmon",19.9,0.0,13.6,6.0,3.7)
48
+ alimento3 = Alimentos.new("Huevos",13.0,1.1,11.0,4.2,5.7)
49
+ a = alimento1.auxiliar(gramos) + alimento2.auxiliar(gramos) + alimento3.auxiliar(gramos)
50
+ b = alimento1.auxiliar2(gramos) + alimento2.auxiliar2(gramos) + alimento3.auxiliar2(gramos)
51
+ vector = [a.round(2),b.round(2)]
52
+ end
53
+
54
+ # Se calcula el impacto ambiental de un alimento en una mujer.
55
+ def impacto_mujer(gramos1,gramos2,gramos3,gramos4,gramos5)
56
+ alimento1 = Alimentos.new("Tofu",10,2.37,6,2.0,2.2)
57
+ alimento2 = Alimentos.new("Nuez",50,10.5,27,0.3,7.9)
58
+ alimento3 = Alimentos.new("Camarones",10,0.85,0.34,18.0,2.0)
59
+ alimento4 = Alimentos.new("Chocolate",5,44.34,28.30,2.3,3.4)
60
+ alimento5 = Alimentos.new("Leche",6,8.72,5.82,3.2,8.9)
61
+ a = alimento1.auxiliar(gramos1) + alimento2.auxiliar(gramos2) + alimento3.auxiliar(gramos3) + alimento4.auxiliar(gramos4) + alimento5.auxiliar(gramos5)
62
+ b = alimento1.auxiliar2(gramos1) + alimento2.auxiliar2(gramos2) + alimento3.auxiliar2(gramos3) + alimento4.auxiliar2(gramos4) + alimento5.auxiliar2(gramos5)
63
+ vector = [a.round(2),b.round(2)]
64
+ end
65
+ end
@@ -0,0 +1,136 @@
1
+ # encoding: utf-8
2
+ # Esta clase implementa una lista doblemente enlazada.
3
+ # Se desarrollan los métodos para insertar y extraer nodos por la cabeza y por la cola, e imprimir la lista completa.
4
+ # Se utiliza una estructura para representar los nodos, con los valores value, next y prev.
5
+ #
6
+ # Author:: David Hernández Suárez (mailto:david@alimentos)
7
+ # Copyright:: Cretive Commons
8
+ # License:: Distributes under the same terms as Ruby
9
+
10
+ Nodo = Struct.new(:value, :next, :prev)
11
+ class Lista
12
+ include Enumerable
13
+
14
+ # Se utiliza el módulo Enumerable, para enumerar cualquier lista enlazada.
15
+ def each
16
+ aux = @head
17
+ while !aux.nil?
18
+ yield aux[:value]
19
+ aux = aux[:next]
20
+ end
21
+ end
22
+
23
+ attr_accessor :head,:tail
24
+
25
+ # Se asignan la cabecera de la lista y la cola de la lista. Inicialmente apuntan a nil.
26
+ def initialize(head,tail)
27
+ @head = nil
28
+ @tail = nil
29
+ end
30
+
31
+ # Se inserta un nodo por la cabeza de la lista
32
+ def insert_head(value)
33
+ if @head.nil?
34
+ @head = Nodo.new(value, nil, nil)
35
+ @tail = @head
36
+ else
37
+ @head[:prev] = Nodo.new(value, @head, nil)
38
+ @head = @head[:prev]
39
+ end
40
+ end
41
+
42
+ # Se inserta un nodo por la cola de la lista
43
+ def insert_tail(value)
44
+ if @head.nil?
45
+ @head = Nodo.new(value, nil, nil)
46
+ @tail = @head
47
+ else
48
+ @tail[:next] = Nodo.new(value, nil, @tail)
49
+ @tail = @tail[:next]
50
+ end
51
+ end
52
+
53
+ # Se extrae el nodo situado en la cabeza de la lista
54
+ def extract_head()
55
+ if @head.nil?
56
+ raise RuntimeError, "La lista está vacía"
57
+ else
58
+ if @head == @tail
59
+ @head, @tail = nil
60
+ else
61
+ @head = @head[:next]
62
+ @head[:prev] = nil
63
+ end
64
+
65
+ end
66
+ end
67
+
68
+ # Se extrae el nodo situado en la cola de la lista
69
+ def extract_tail()
70
+ if @head.nil?
71
+ raise RuntimeError, "La lista está vacía"
72
+ else
73
+ if @head == @tail
74
+ @head, @tail = nil
75
+ else
76
+ @tail = @tail[:prev]
77
+ @tail[:next] = nil
78
+ end
79
+ end
80
+ end
81
+
82
+ # Se insertan por la cola un conjunto de nodos
83
+ def insert(nodos)
84
+ for i in (0.. nodos.size-1)
85
+ insert_tail(nodos[i])
86
+ end
87
+ end
88
+
89
+ # Se visualiza la lista
90
+ def imprimir
91
+ aux = @head
92
+ lista = []
93
+ while (!aux.nil?)
94
+ lista << aux[:value].to_s
95
+ aux = aux[:next]
96
+ end
97
+ return lista
98
+
99
+ end
100
+
101
+ # Calcula el total de gases anuales que tiene la lista de alimentos
102
+ def dieta_gases_anuales(gramos)
103
+ aux = @head
104
+ suma_gases = 0
105
+ i = 0
106
+ while (!aux.nil?)
107
+ suma_gases += aux[:value].auxiliar(gramos[i])
108
+ aux = aux[:next]
109
+ i = i+1
110
+ end
111
+ return suma_gases.round(2)
112
+
113
+ end
114
+
115
+ # Calcula el total de gases diarios que tiene la lista de alimentos
116
+ def dieta_gases_diarios(gramos)
117
+ gases_diarios = dieta_gases_anuales(gramos)/365
118
+ return gases_diarios.round(3)
119
+ end
120
+
121
+ # Calcula el total de uso del terreno que tiene la lista de alimentos
122
+ def dieta_terreno(gramos)
123
+
124
+ aux = @head
125
+ suma_terreno = 0
126
+ i = 0
127
+ while (!aux.nil?)
128
+ suma_terreno += aux[:value].auxiliar2(gramos[i])
129
+ aux = aux[:next]
130
+ i = i+1
131
+ end
132
+ return suma_terreno.round(2)
133
+
134
+ end
135
+
136
+ end
@@ -0,0 +1,36 @@
1
+ class Menu_DSL
2
+ attr_reader :nombre_menu, :lista_platos, :precio_menu
3
+
4
+ def initialize (nombre_menu, &block)
5
+ #@nombre_menu = nombre_menu
6
+ @lista_platos = []
7
+ @precio_menu = 0
8
+
9
+ if block_given?
10
+ if block.arity == 1
11
+ yield self
12
+ else
13
+ instance_eval(&block)
14
+ end
15
+ end
16
+ end
17
+
18
+ def descripcion(n)
19
+ @nombre_menu = n
20
+ end
21
+
22
+ def componente(descripcion, precio = {})
23
+ componente = "\n - " + descripcion
24
+ componente << " || Precio: #{precio[:Precio]} € " if precio[:Precio]
25
+ @precio_menu += precio[:Precio]
26
+ @lista_platos << componente
27
+ end
28
+
29
+ def to_s
30
+ output = @nombre_menu
31
+ output << "\n#{'=' * @nombre_menu.size}\n\n"
32
+ output << "Platos: \n #{@lista_platos.join(' ')}\n\n"
33
+ output << "Precio total: #{@precio_menu} €"
34
+ end
35
+
36
+ end
@@ -0,0 +1,45 @@
1
+ class Plato_DSL
2
+
3
+ attr_reader :nombre_plato, :lista_alimentos
4
+ include Comparable
5
+ def <=>(anOther)
6
+ self.porcentaje_proteinas <=> anOther.porcentaje_proteinas
7
+ end
8
+
9
+ def initialize(nombre_plato, &block)
10
+ #@nombre_plato = nombre_plato
11
+ @lista_alimentos = []
12
+
13
+ if block_given?
14
+ if block.arity == 1
15
+ yield self
16
+ else
17
+ instance_eval(&block)
18
+ end
19
+ end
20
+ end
21
+
22
+ def nombre (n)
23
+ @nombre_plato = n
24
+ end
25
+
26
+ def alimento(descripcion, gramos = {})
27
+ alimento = "\n - " + descripcion
28
+ alimento << "\n Información nutricional:"
29
+ alimento << " || Cantidad: #{gramos[:Gramos]} gramos ||" if gramos[:Gramos]
30
+ alimento << " Proteínas: #{gramos[:Proteinas]} gramos ||" if gramos[:Proteinas]
31
+ alimento << " Hidratos: #{gramos[:Hidratos]} gramos ||" if gramos[:Hidratos]
32
+ alimento << " Lípidos: #{gramos[:Lipidos]} gramos" if gramos[:Lipidos]
33
+ alimento << "\n Información ambiental:"
34
+ alimento << " Gases anuales: #{gramos[:Gases]} kilogramos ||" if gramos[:Gases]
35
+ alimento << " Uso del terreno: #{gramos[:Terreno]} metros cuadrados" if gramos[:Gases]
36
+ @lista_alimentos << alimento
37
+ end
38
+
39
+ def to_s
40
+ output = @nombre_plato
41
+ output << "\n#{'=' * @nombre_plato.size}\n\n"
42
+ output << "Alimentos: \n #{@lista_alimentos.join(' ')}\n\n"
43
+ end
44
+
45
+ end
@@ -0,0 +1,199 @@
1
+ # encoding: utf-8
2
+ # Esta clase contiene información acerca de los distintos alimentos que forman un plato.
3
+ # Se calcula el porcentaje de proteínas, hidratos y lípidos que contiene cada conjunto de alimentos, así como su valor energético.
4
+ #
5
+ # Author:: David Hernández Suárez (mailto:alu0101048239@ull.edu.es)
6
+ # Copyright:: Cretive Commons
7
+ # License:: Distributes under the same terms as Ruby
8
+
9
+ class Plato
10
+ attr_reader :nombre_plato, :lista_alimentos, :lista_gramos
11
+ include Comparable
12
+
13
+ # Se utiliza el módulo Comparable, comparando los alimentos en base a su porcentaje de proteínas.
14
+ def <=>(anOther)
15
+ self.porcentaje_proteinas <=> anOther.porcentaje_proteinas
16
+ end
17
+
18
+ # Se asignan el nombre del plato, la lista de alimentos que lo compone y los gramos de cada alimento.
19
+ def initialize(nombre_plato, lista_alimentos, lista_gramos)
20
+ @nombre_plato = nombre_plato
21
+ @lista_alimentos = lista_alimentos
22
+ @lista_gramos = lista_gramos
23
+ end
24
+
25
+ # Se calcula el porcentaje de proteínas total del plato
26
+ def porcentaje_proteinas
27
+ aux = @lista_alimentos.head
28
+ aux2 = @lista_gramos.head
29
+ suma_proteinas = 0
30
+ suma_gramos = 0
31
+ while (!aux.nil?)
32
+ suma_proteinas += ( (aux[:value].proteinas)*(aux2[:value]) )/100
33
+ suma_gramos += aux2[:value]
34
+ aux = aux[:next]
35
+ aux2 = aux2[:next]
36
+ end
37
+
38
+ return ( (suma_proteinas/suma_gramos)*100 ).round(2)
39
+
40
+ end
41
+
42
+ # Se calcula el porcentaje de hidratos de carbono total del plato
43
+ def porcentaje_hidratos
44
+ aux = @lista_alimentos.head
45
+ aux2 = @lista_gramos.head
46
+ suma_hidratos = 0
47
+ suma_gramos = 0
48
+ while (!aux.nil?)
49
+ suma_hidratos += ( (aux[:value].hidratos)*(aux2[:value]) )/100
50
+ suma_gramos += aux2[:value]
51
+ aux = aux[:next]
52
+ aux2 = aux2[:next]
53
+ end
54
+
55
+ return ( (suma_hidratos/suma_gramos)*100 ).round(2)
56
+
57
+ end
58
+
59
+ # Se calcula el porcentaje de lípidos total del plato
60
+ def porcentaje_lipidos
61
+ aux = @lista_alimentos.head
62
+ aux2 = @lista_gramos.head
63
+ suma_lipidos = 0
64
+ suma_gramos = 0
65
+ while (!aux.nil?)
66
+ suma_lipidos += ( (aux[:value].lipidos)*(aux2[:value]) )/100
67
+ suma_gramos += aux2[:value]
68
+ aux = aux[:next]
69
+ aux2 = aux2[:next]
70
+ end
71
+
72
+ return ( (suma_lipidos/suma_gramos)*100 ).round(2)
73
+
74
+ end
75
+
76
+ # Se calcula el valor calórico total del plato
77
+ def valor_calorico
78
+ aux = @lista_alimentos.head
79
+ aux2 = @lista_gramos.head
80
+ calorias = 0
81
+ while (!aux.nil?)
82
+ aux[:value].proteinas = ( (aux[:value].proteinas) * (aux2[:value]) )/100
83
+ aux[:value].hidratos = ( (aux[:value].hidratos) * (aux2[:value]) )/100
84
+ aux[:value].lipidos = ( (aux[:value].lipidos) * (aux2[:value]) )/100
85
+ calorias += aux[:value].valor_energetico
86
+ aux = aux[:next]
87
+ aux2 = aux2[:next]
88
+ end
89
+
90
+ return calorias.round(2)
91
+ end
92
+
93
+ # Se obtiene el plato formateado
94
+ def to_s
95
+ aux = @lista_alimentos.head
96
+ aux2 = @lista_gramos.head
97
+ vector = []
98
+ vector << @nombre_plato
99
+ while (!aux.nil?)
100
+ vector << aux[:value].to_s
101
+ vector << aux2[:value]
102
+ aux = aux[:next]
103
+ aux2 = aux2[:next]
104
+ end
105
+
106
+ return vector
107
+
108
+ end
109
+
110
+ end
111
+
112
+ # encoding: utf-8
113
+ # Esta clase, que hereda de la clase Plato, calculará las emisiones diarias y anuales de los gases de efecto invernadero, y el uso del terreno# en referencia a los alimentos que componen cada plato.
114
+ #
115
+ # Author:: David Hernández Suárez (mailto:alu0101048239@ull.edu.es)
116
+ # Copyright:: Cretive Commons
117
+ # License:: Distributes under the same terms as Ruby
118
+
119
+
120
+ class Eficiencia_Energetica < Plato
121
+
122
+ attr_reader :nombre_plato, :lista_alimentos, :lista_gramos
123
+ include Comparable
124
+
125
+ # Se utiliza el módulo Comparable, comparando los alimentos en base a su huella nutricional.
126
+ def <=>(anOther)
127
+ #self.uso_terreno <=> anOther.uso_terreno
128
+ self.huella_nutricional <=> anOther.huella_nutricional
129
+ end
130
+
131
+ # Se asignan el nombre del plato, la lista de alimentos que lo contienen y la lista de gramos de cada alimento.
132
+ def initialize(nombre_plato, lista_alimentos, lista_gramos)
133
+ super(nombre_plato, lista_alimentos, lista_gramos)
134
+ end
135
+
136
+ # Se calculan las emisiones anuales de gases de efecto invernadero que produce el plato
137
+ def emisiones_gases_anuales
138
+ aux = @lista_alimentos.head
139
+ aux2 = @lista_gramos.head
140
+ suma_gases_anuales = 0
141
+ while (!aux.nil?)
142
+ suma_gases_anuales += aux[:value].auxiliar(aux2[:value])
143
+ aux = aux[:next]
144
+ aux2 = aux2[:next]
145
+ end
146
+
147
+ return suma_gases_anuales.round(2)
148
+ end
149
+
150
+ # Se calculan las emisiones diarias de gases de efecto invernadero que produce el plato
151
+ def emisiones_gases_diarios
152
+ suma = (emisiones_gases_anuales / 365)
153
+ return suma.round(3)
154
+ end
155
+
156
+ # Se calcula el uso del terreno anual que produce el plato
157
+ def uso_terreno
158
+ aux = @lista_alimentos.head
159
+ aux2 = @lista_gramos.head
160
+ suma_terreno = 0
161
+ while (!aux.nil?)
162
+ suma_terreno += aux[:value].auxiliar2(aux2[:value])
163
+ aux = aux[:next]
164
+ aux2 = aux2[:next]
165
+ end
166
+
167
+ return suma_terreno.round(2)
168
+ end
169
+
170
+ # Se obtiene la información de gases y terreno formateada
171
+ def to_s
172
+ "( #{self.emisiones_gases_anuales}, #{self.emisiones_gases_diarios}, #{self.uso_terreno} )"
173
+
174
+ end
175
+
176
+ # Se calcula la huella nutricional del plato
177
+ def huella_nutricional
178
+ if (valor_calorico < 670)
179
+ aux = 1
180
+ elsif (valor_calorico < 830)
181
+ aux = 2
182
+ else
183
+ aux = 3
184
+ end
185
+
186
+ if (emisiones_gases_anuales < 0.8)
187
+ aux2 = 1
188
+ elsif (emisiones_gases_anuales < 1.2)
189
+ aux2 = 2
190
+ else
191
+ aux2 = 3
192
+ end
193
+
194
+ return ((aux+aux2)/2.0).round(2)
195
+ end
196
+
197
+
198
+
199
+ end