AlimentoSolete 1.0.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.
@@ -0,0 +1,112 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ Top Level Namespace
8
+
9
+ &mdash; Documentation by YARD 0.9.10
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
14
+
15
+ <link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
16
+
17
+ <script type="text/javascript" charset="utf-8">
18
+ pathId = "";
19
+ relpath = '';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="class_list.html?1"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="_index.html">Index</a> &raquo;
40
+
41
+
42
+ <span class="title">Top Level Namespace</span>
43
+
44
+ </div>
45
+
46
+ <div id="search">
47
+
48
+ <a class="full_list_link" id="class_list_link"
49
+ href="class_list.html">
50
+
51
+ <svg width="24" height="24">
52
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
53
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
54
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
55
+ </svg>
56
+ </a>
57
+
58
+ </div>
59
+ <div class="clear"></div>
60
+ </div>
61
+
62
+ <div id="content"><h1>Top Level Namespace
63
+
64
+
65
+
66
+ </h1>
67
+ <div class="box_info">
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+ </div>
80
+
81
+ <h2>Defined Under Namespace</h2>
82
+ <p class="children">
83
+
84
+
85
+ <strong class="modules">Modules:</strong> <span class='object_link'><a href="ALU0101000756_ALIMENTO.html" title="ALU0101000756_ALIMENTO (module)">ALU0101000756_ALIMENTO</a></span>
86
+
87
+
88
+
89
+ <strong class="classes">Classes:</strong> <span class='object_link'><a href="Alimento.html" title="Alimento (class)">Alimento</a></span>, <span class='object_link'><a href="AlimentoCategorizable.html" title="AlimentoCategorizable (class)">AlimentoCategorizable</a></span>, <span class='object_link'><a href="GrupoAlimenticio.html" title="GrupoAlimenticio (class)">GrupoAlimenticio</a></span>, <span class='object_link'><a href="Lista.html" title="Lista (class)">Lista</a></span>, <span class='object_link'><a href="Node.html" title="Node (class)">Node</a></span>, <span class='object_link'><a href="Plato.html" title="Plato (class)">Plato</a></span>
90
+
91
+
92
+ </p>
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+ </div>
103
+
104
+ <div id="footer">
105
+ Generated on Tue Dec 12 21:38:03 2017 by
106
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
107
+ 0.9.10 (ruby-2.3.0).
108
+ </div>
109
+
110
+ </div>
111
+ </body>
112
+ </html>
@@ -0,0 +1,11 @@
1
+ require "alimento/version"
2
+ require "alimento/Alimento"
3
+ require "alimento/Lista"
4
+ require "alimento/AlimentoCategorizable"
5
+ require "alimento/GrupoAlimenticio"
6
+ require "alimento/Plato"
7
+
8
+ # Espacio de nombre que contiene las clases y metodos para el manejo de listas, nodos, alimentos y grupos de alimentos
9
+ # @since 1.0.0
10
+ module ALU0101000756_ALIMENTO
11
+ end
@@ -0,0 +1,79 @@
1
+ # Representación de un alimento según sus calorías aportadas y la cantidad de glucidos, proteinas y lipidos contenidos
2
+ #
3
+ # @author Eugenio José Gonzalez Luis
4
+ # @since 1.0.0
5
+ # @attr_reader String nombre Nombre del alimento
6
+ # @attr_reader Number glucidos glucidos contenidos en el alimento
7
+ # @attr_reader Number proteinas preoteinas contenidos en el alimento
8
+ # @attr_reader Number lipidos lipidos contenidos en el alimento
9
+ class Alimento
10
+ include Comparable
11
+ attr_reader :nombre, :glucidos, :proteinas, :lipidos, :indexGluc
12
+
13
+ # Constructor de Alimento
14
+ # @param [String] nombre nombre del alimento
15
+ # @param [Number] glucidos glucidos contenidos en el alimento
16
+ # @param [Number] proteinas preoteinas contenidos en el alimento
17
+ # @param [Number] lipidos lipidos contenidos en el alimento
18
+ #
19
+ # @return [Alimento] Devuelve el objeto creado de clase Alimento
20
+ def initialize(nombre, glucidos, proteinas, lipidos)
21
+ @nombre = nombre
22
+ @glucidos = glucidos
23
+ @proteinas = proteinas
24
+ @lipidos = lipidos
25
+ @indexGluc = nil
26
+ end
27
+
28
+ #Calcula el indice glucemico de un alimento
29
+ #
30
+ #@param data [array] Valores de los datos glucemicos de un alimento
31
+ #@param gluc [array] Valores de la glucosa
32
+ def calculate_index(data, gluc)
33
+ aibc = [[],[]]
34
+ data.each do |x|
35
+ t = 0
36
+ x.each_index do |a|
37
+ if (a != 0)
38
+ t += (((x[a] - x[0]) + (x[a - 1] - x[0])) /2)*5
39
+ end
40
+ end
41
+ aibc[0] << t
42
+ end
43
+ gluc.each do |x|
44
+ t = 0
45
+ x.each_index do |a|
46
+ if (a != 0)
47
+ t += (((x[a] - x[0]) + (x[a - 1] - x[0])) /2)*5
48
+ end
49
+ end
50
+ aibc[1] << t
51
+ end
52
+ igind = []
53
+ aibc[0].each_index { |x| igind << ((aibc[0][x] / aibc[1][x]) * 100)}
54
+ suma = 0
55
+ igind.each{ |x| suma += x}
56
+ @indexGluc = (suma / igind.length)
57
+
58
+ end
59
+
60
+ # Convierte el objeto en un String
61
+ # @return [String] descripción del alimento en una cadena de caracteres
62
+ def to_s
63
+ x = "#{nombre}: #{proteinas}g proteínas, #{glucidos}g glúcidos, #{lipidos}g lípidos"
64
+ return x
65
+ end
66
+
67
+ # Constructor de Alimento
68
+ # @return [Number] Devuelve el valor calórico del alimento representado
69
+ def kcal
70
+ @proteinas * 4 + @glucidos * 4 + @lipidos * 9
71
+ end
72
+
73
+ # Constructor de Alimento
74
+ # @param [Alimento] other otro objeto de clase Alimento
75
+ # @return [Number] Devuelve la relación de comparación entre el objeto que invoca el método y el otro objeto Alimento
76
+ def <=>(other)
77
+ kcal <=> other.kcal
78
+ end
79
+ end
@@ -0,0 +1,33 @@
1
+ # Representación de un alimento categorizable según sus calorías aportadas y la cantidad de glucidos, proteinas y lipidos contenidos
2
+ # Hereda de la clase Alimento
3
+ #
4
+ # @author Eugenio José González Luis
5
+ # @since 1.0.0
6
+ # @attr_reader String categoria Categoria del alimento
7
+ # @attr_reader String nombre Nombre del alimento
8
+ # @attr_reader Number glucidos glucidos contenidos en el alimento
9
+ # @attr_reader Number proteinas preoteinas contenidos en el alimento
10
+ # @attr_reader Number lipidos lipidos contenidos en el alimento
11
+ class AlimentoCategorizable < Alimento
12
+ attr_reader :categoria
13
+
14
+ # Constructor de Alimento
15
+ # @param [String] nombre nombre del alimento
16
+ # @param [String] categoria categoria del alimento
17
+ # @param [Number] glucidos glucidos contenidos en el alimento
18
+ # @param [Number] proteinas preoteinas contenidos en el alimento
19
+ # @param [Number] lipidos lipidos contenidos en el alimento
20
+ #
21
+ # @return [AlimentoCategorizable] Devuelve el objeto creado de clase AlimentoCategorizable
22
+ def initialize(nombre, categoria, glucidos, proteinas, lipidos)
23
+ super(nombre, glucidos, proteinas, lipidos)
24
+ @categoria = categoria
25
+ end
26
+
27
+ # Convierte el objeto en un String
28
+ # @return [String] descripción del alimento en una cadena de caracteres
29
+ def to_s
30
+ x = "#{nombre} (#{categoria}) : #{proteinas}g proteínas, #{glucidos}g glúcidos, #{lipidos}g lípidos"
31
+ return x
32
+ end
33
+ end
@@ -0,0 +1,49 @@
1
+ # Representación de un grupo alimenticio con categoría
2
+ # Hereda de Lista
3
+ #
4
+ # @author Eugenio José González Luis
5
+ # @since 1.0.0
6
+ # @attr_reader String categoria categoria del grupo alimenticio representado
7
+ # @attr_reader Node head Nodo en la cabeza de la lista
8
+ # @attr_reader Node tail Nodo en la última posición de la lista
9
+ class GrupoAlimenticio < Lista
10
+ attr_reader :categoria
11
+
12
+ # Constructor de GrupoAlimenticio
13
+ # @param [String] categoria categoria del grupo alimenticio
14
+ #
15
+ # @return [GrupoAlimenticio] Devuelve el objeto creado de clase GrupoAlimenticio
16
+ def initialize(categoria)
17
+ super()
18
+ @categoria = categoria
19
+ end
20
+
21
+ # Inserción de AlimentoCategorizable por la cabeza de la lista del GrupoAlimenticio
22
+ # @param [any] x valor del nuevo nodo
23
+ #
24
+ # @return [Node] Devuelve el head
25
+ def push_alimento(x)
26
+ if(x.is_a?(AlimentoCategorizable))
27
+ push_head(AlimentoCategorizable.new(x.nombre, @categoria, x.glucidos, x.proteinas, x.lipidos))
28
+ end
29
+ end
30
+
31
+ # Inserción de varios AlimentoCategorizable por la cabeza de la lista del GrupoAlimenticio
32
+ # @param [Array<any>] x valores de los nuevos nodos
33
+ #
34
+ # @return [Node] Devuelve el head
35
+ def push_alimentos(x)
36
+ x.each do |alimento|
37
+ if(alimento.is_a?(AlimentoCategorizable))
38
+ push_head(AlimentoCategorizable.new(alimento.nombre, @categoria, alimento.glucidos, alimento.proteinas, alimento.lipidos))
39
+ end
40
+ end
41
+ end
42
+
43
+ # Extracción del primer AlimentoCategorizable del GrupoAlimenticio
44
+ #
45
+ # @return [any, nil] devuelve el valor guardado en el primer nodo o nil si no hay nodos en el GrupoAlimenticio
46
+ def pop_alimento()
47
+ pop_head()
48
+ end
49
+ end
@@ -0,0 +1,110 @@
1
+ # Representación de un nodo en una lista
2
+ #
3
+ # @author Eugenio Jose Gonzalez Luis
4
+ # @since 1.0.0
5
+ # @attr_accessor any value Informacion contenida en el nodo
6
+ # @attr_accessor Node next Nodo siguiente con el que esta conectado
7
+ # @attr_accessor Node prev Nodo previo con el que esta conectado
8
+ Node = Struct.new(:value, :next, :prev)
9
+
10
+ # Representación de una lista doblemente enlazada de nodos
11
+ #
12
+ # @author Eugenio Jose Gonzalez Luis
13
+ # @since 1.0.0
14
+ # @attr_reader Node head Nodo en la cabeza de la lista
15
+ # @attr_reader Node tail Nodo en la última posición de la lista
16
+ class Lista
17
+ include Enumerable
18
+ attr_reader :head, :tail
19
+
20
+ # Inserción por la cabeza de la lista
21
+ # @param [any] x valor del nuevo nodo
22
+ #
23
+ # @return [Node] Devuelve el head
24
+ def push_head(x)
25
+ if(@head == nil)
26
+ @head = Node.new(x, nil, nil)
27
+ @tail = @head
28
+ else
29
+ nuevo = Node.new(x, nil, nil)
30
+ nuevo.next= @head
31
+ @head.prev = nuevo
32
+ @head = nuevo
33
+ end
34
+ end
35
+
36
+ # Inserción por la cola de la lista
37
+ # @param [any] x valor del nuevo nodo
38
+ #
39
+ # @return [Node] Devuelve el tail
40
+ def push_tail(x)
41
+ if(@tail == nil)
42
+ @tail = Node.new(x, nil, nil)
43
+ @head = @tail
44
+ else
45
+ nuevo = Node.new(x, nil, nil)
46
+ nuevo.prev = @tail
47
+ @tail.next = nuevo
48
+ @tail = nuevo
49
+ end
50
+ end
51
+
52
+ # Inserción por la cola de la lista de varios nodos
53
+ # @param [Array<any>] x valores de los nuevos nodos
54
+ #
55
+ # @return [Node] Devuelve el tail
56
+ def push(x)
57
+ x.each{
58
+ |i| push_tail(i)
59
+ }
60
+ end
61
+
62
+ # Extracción del primer nodo de la lista
63
+ #
64
+ # @return [any, nil] devuelve el valor guardado en el primer nodo o nil si no hay nodos en la lista
65
+ def pop_head()
66
+ if(@head == nil)
67
+ return nil
68
+ end
69
+
70
+ x = @head
71
+ @head = @head.next
72
+ if(@head == nil)
73
+ @tail = nil
74
+ else
75
+ @head.prev = nil
76
+ x.next = nil
77
+ end
78
+ x.value
79
+ end
80
+
81
+ # Extracción del último nodo de la lista
82
+ #
83
+ # @return [any, nil] devuelve el valor guardado en el último nodo o nil si no hay nodos en la lista
84
+ def pop_tail()
85
+ if(@tail == nil)
86
+ return nil
87
+ end
88
+
89
+ x = @tail
90
+ @tail = @tail.prev
91
+ if(@tail == nil)
92
+ @head = nil
93
+ else
94
+ @tail.next = nil
95
+ x.prev = nil
96
+ end
97
+ x.value
98
+ end
99
+
100
+ # Método para la enumeración de los nodos de la lista
101
+ #
102
+ # @return [Node] devuelve los nodos que conforman la lista
103
+ def each
104
+ x = @head
105
+ while(x != nil)
106
+ yield x.value
107
+ x = x.next
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,157 @@
1
+ # Representación de un plato, es decir de un conjunto de alimentos definido en lenguaje natural
2
+ #
3
+ # @author Eugenio José Gonzalez Luis
4
+ # @since 1.0.0
5
+ # @attr_reader String nombre Nombre del plato
6
+ # @attr_reader Array ingredientes Conjunto de Alimentos de un plato
7
+ # @attr_reader Array porciones Cantidad de cada alimento de un plato
8
+ # @attr_reader Array tabla todos los alimentos posibles
9
+ class Plato
10
+ attr_reader :nombre, :ingredientes, :porciones, :tabla
11
+
12
+ # Constructor de Plato
13
+ # @param [String] Nombre nombre del Plato
14
+ # @param [Block] bloque Codigo que dicta los ingredientes del plato
15
+ #
16
+ # @return [Plato] Devuelve el objeto creado de clase Plato
17
+ def initialize(nombre, &bloque)
18
+ @nombre = nombre
19
+ @tabla = [ AlimentoCategorizable.new("Huevo frito","Huevos y Lacteos", 14.1, 0.0, 19.5),
20
+ AlimentoCategorizable.new("Leche vaca","Huevos y Lacteos" , 3.3, 4.8, 3.2),
21
+ AlimentoCategorizable.new("Yogurt","Huevos y Lacteos", 3.8, 4.9, 3.8),
22
+ AlimentoCategorizable.new("Cerdo","Carnes y Derivados", 21.5, 0.0, 6.3),
23
+ AlimentoCategorizable.new("Ternera","Carnes y Derivados", 21.1, 0.0, 3.1),
24
+ AlimentoCategorizable.new("Pollo","Carnes y Derivados", 20.6, 0.0, 5.6),
25
+ AlimentoCategorizable.new("Bacalao","Pescados y Mariscos", 17.7, 0.0, 0.4),
26
+ AlimentoCategorizable.new("Atun","Pescados y Mariscos", 21.5, 0.0, 15.5),
27
+ AlimentoCategorizable.new("Salmon","Pescados y Mariscos", 19.9, 0.0, 13.6),
28
+ AlimentoCategorizable.new("Aceite de oliva","Alimentos Grasos", 0.0, 0.2, 99.6),
29
+ AlimentoCategorizable.new("Mantequilla","Alimentos Grasos", 0.7, 0.0, 83.2),
30
+ AlimentoCategorizable.new("Chocolate","Alimentos Grasos", 5.3, 47.0, 30.0),
31
+ AlimentoCategorizable.new("Azucar","Alimentos Ricos en Carbohidratos", 0.0, 99.8, 0.0),
32
+ AlimentoCategorizable.new("Arroz","Alimentos Ricos en Carbohidratos", 6.8, 77.7, 0.6),
33
+ AlimentoCategorizable.new("Lentejas","Alimentos Ricos en Carbohidratos", 23.5, 52.0, 1.4),
34
+ AlimentoCategorizable.new("Papas","Alimentos Ricos en Carbohidratos", 2.0, 15.4, 0.1),
35
+ AlimentoCategorizable.new("Tomate","Verduras y Hortalizas", 1.0, 3.5, 0.2),
36
+ AlimentoCategorizable.new("Cebolla","Verduras y Hortalizas", 1.3, 5.8, 0.3),
37
+ AlimentoCategorizable.new("Calabaza","Verduras y Hortalizas", 1.1, 4.8, 0.1),
38
+ AlimentoCategorizable.new("Manzana","Frutas", 0.3, 12.4, 0.4),
39
+ AlimentoCategorizable.new("Platanos","Frutas", 1.2, 21.4, 0.2),
40
+ AlimentoCategorizable.new("Pera","Frutas", 0.5 ,12.7, 0.3)]
41
+ @porciones = []
42
+ @ingredientes = []
43
+ if block_given?
44
+ if bloque.arity == 1
45
+ yield self
46
+ else
47
+ instance_eval(&bloque)
48
+ end
49
+ end
50
+ end
51
+
52
+ # Convierte el objeto en un String
53
+ # @return [String] descripción del plato en una cadena de caracteres
54
+ def to_s
55
+ texto = @nombre
56
+ texto << "\n#{'=' * @nombre.size}\n"
57
+ texto << "Composicion nutricional: \n"
58
+ @ingredientes.each_with_index do |i , p|
59
+ texto << i.to_s
60
+ texto << "#{i.kcal * @porciones[p]}"
61
+ texto << "\n"
62
+ end
63
+ return texto
64
+ end
65
+
66
+ #Añade una fruta al plato
67
+ #@param [String] nombre nombre de la fruta
68
+ #@param options cantidad de un alimento
69
+ def fruta(nombre, options = {})
70
+ tabla.each_with_index do |s , i|
71
+ if (s.nombre == nombre)
72
+ @ingredientes << tabla[i]
73
+ break
74
+ end
75
+ end
76
+ if (options[:gramos])
77
+ @porciones << options[:gramos]
78
+ else if (options[:porciones])
79
+ dummyString = options[:porciones]
80
+ @porciones << dummyString.scan(/\d+\.\d+/).first.to_f
81
+ end
82
+ end
83
+ end
84
+ #Añade un vegetal al plato
85
+ #@param [String] nombre nombre de la fruta
86
+ #@param options cantidad de un alimento
87
+ def vegetal(nombre, options = {})
88
+ tabla.each_with_index do |s , i|
89
+ if (s.nombre == nombre)
90
+ @ingredientes << tabla[i]
91
+ break
92
+ end
93
+ end
94
+ if (options[:gramos])
95
+ @porciones << options[:gramos]
96
+ else if (options[:porciones])
97
+ dummyString = options[:porciones]
98
+ @porciones << dummyString.scan(/\d+\.\d+/).first.to_f
99
+ end
100
+ end
101
+ end
102
+ #Añade una proteina al plato
103
+ #@param [String] nombre nombre de la fruta
104
+ #@param options cantidad de un alimento
105
+ def proteinas(nombre, options = {})
106
+ tabla.each_with_index do |s , i|
107
+ if (s.nombre == nombre)
108
+ @ingredientes << tabla[i]
109
+ break
110
+ end
111
+ end
112
+ if (options[:gramos])
113
+ @porciones << options[:gramos]
114
+ else if (options[:porciones])
115
+ dummyString = options[:porciones]
116
+ @porciones << dummyString.scan(/\d+\.\d+/).first.to_f
117
+ end
118
+ end
119
+ end
120
+ #Añade un grano al plato al plato
121
+ #@param [String] nombre nombre de la fruta
122
+ #@param options cantidad de un alimento
123
+ def granos_integrales(nombre, options = {})
124
+ tabla.each_with_index do |s , i|
125
+ if (s.nombre == nombre)
126
+ @ingredientes << tabla[i]
127
+ break
128
+ end
129
+ end
130
+ if (options[:gramos])
131
+ @porciones << options[:gramos]
132
+ else if (options[:porciones])
133
+ dummyString = " (#{options[:porciones]})"
134
+ @porciones << dummyString.scan(/\d+\.\d+/).first.to_f
135
+ end
136
+ end
137
+ end
138
+ #Añade una aceite al plato
139
+ #@param [String] nombre nombre de la fruta
140
+ #@param options cantidad de un alimento
141
+ def aceite(nombre, options = {})
142
+ tabla.each_with_index do |s , i|
143
+ if (s.nombre == nombre)
144
+ @ingredientes << tabla[i]
145
+ break
146
+ end
147
+ end
148
+ if (options[:gramos])
149
+ @porciones << options[:gramos]
150
+ else if (options[:porciones])
151
+ dummyString = options[:porciones]
152
+ @porciones << dummyString.scan(/\d+\.\d+/).first.to_f
153
+ end
154
+ end
155
+ end
156
+
157
+ end