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.
- checksums.yaml +7 -0
- data/.coveralls.yml +1 -0
- data/.rspec_status +46 -0
- data/Alimento.gemspec +40 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +95 -0
- data/Guardfile +82 -0
- data/LICENSE.txt +21 -0
- data/README.md +54 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/coverage/.last_run.json +5 -0
- data/coverage/.resultset.json +224 -0
- data/coverage/.resultset.json.lock +0 -0
- data/doc/ALU0101000756_ALIMENTO.html +133 -0
- data/doc/Alimento.html +1473 -0
- data/doc/AlimentoCategorizable.html +773 -0
- data/doc/GrupoAlimenticio.html +960 -0
- data/doc/Lista.html +1246 -0
- data/doc/Node.html +441 -0
- data/doc/Plato.html +1723 -0
- data/doc/_index.html +169 -0
- data/doc/class_list.html +51 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +58 -0
- data/doc/css/style.css +492 -0
- data/doc/file.README.html +162 -0
- data/doc/file_list.html +56 -0
- data/doc/frames.html +17 -0
- data/doc/index.html +162 -0
- data/doc/js/app.js +248 -0
- data/doc/js/full_list.js +216 -0
- data/doc/js/jquery.js +4 -0
- data/doc/method_list.html +443 -0
- data/doc/top-level-namespace.html +112 -0
- data/lib/Alimento.rb +11 -0
- data/lib/alimento/Alimento.rb +79 -0
- data/lib/alimento/AlimentoCategorizable.rb +33 -0
- data/lib/alimento/GrupoAlimenticio.rb +49 -0
- data/lib/alimento/Lista.rb +110 -0
- data/lib/alimento/Plato.rb +157 -0
- data/lib/alimento/version.rb +19 -0
- metadata +185 -0
@@ -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
|
+
— 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> »
|
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>
|
data/lib/Alimento.rb
ADDED
@@ -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
|