AlimentoSolete 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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