alimento-alu0100947441 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.coveralls.yml +1 -0
- data/.gitignore +15 -0
- data/.rspec +2 -0
- data/.travis.yml +7 -0
- data/Gemfile +6 -0
- data/Guardfile +82 -0
- data/README.md +7 -0
- data/Rakefile +6 -0
- data/alimento.gemspec +42 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/docs/Alimento.html +157 -0
- data/docs/Alimento/Alimento.html +927 -0
- data/docs/Alimento/GrupoAlimento.html +401 -0
- data/docs/List.html +779 -0
- data/docs/Node.html +409 -0
- data/docs/_index.html +155 -0
- data/docs/class_list.html +51 -0
- data/docs/css/common.css +1 -0
- data/docs/css/full_list.css +58 -0
- data/docs/css/style.css +492 -0
- data/docs/file.README.html +82 -0
- data/docs/file_list.html +56 -0
- data/docs/frames.html +17 -0
- data/docs/index.html +82 -0
- data/docs/js/app.js +248 -0
- data/docs/js/full_list.js +216 -0
- data/docs/js/jquery.js +4 -0
- data/docs/method_list.html +251 -0
- data/docs/top-level-namespace.html +112 -0
- data/lib/alimento.rb +9 -0
- data/lib/alimento/alimento.rb +145 -0
- data/lib/alimento/array.rb +49 -0
- data/lib/alimento/list.rb +84 -0
- data/lib/alimento/plato.rb +125 -0
- data/lib/alimento/version.rb +3 -0
- metadata +205 -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.9
|
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="Alimento.html" title="Alimento (module)">Alimento</a></span>
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
<strong class="classes">Classes:</strong> <span class='object_link'><a href="List.html" title="List (class)">List</a></span>, <span class='object_link'><a href="Node.html" title="Node (class)">Node</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 Fri Nov 17 00:34:35 2017 by
|
106
|
+
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
107
|
+
0.9.9 (ruby-2.3.0).
|
108
|
+
</div>
|
109
|
+
|
110
|
+
</div>
|
111
|
+
</body>
|
112
|
+
</html>
|
data/lib/alimento.rb
ADDED
@@ -0,0 +1,145 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# Este módulo
|
3
|
+
# se ha desarrollado para practicar la metodología de
|
4
|
+
# desarrollo dirigido por pruebas, así como el uso de
|
5
|
+
# diversas herramientas de Ruby.
|
6
|
+
#
|
7
|
+
# @author Sara Revilla
|
8
|
+
|
9
|
+
module Alimento
|
10
|
+
|
11
|
+
# Esta clase representa un alimento y sus macroelementos.
|
12
|
+
class Alimento
|
13
|
+
include Comparable
|
14
|
+
attr_reader :nombre, :prot, :gluc, :gras, :mediciones
|
15
|
+
|
16
|
+
# Asigna el nombre y los valores de sus macroelementos.
|
17
|
+
def initialize (n, proteinas, glucidos, grasas, mediciones)
|
18
|
+
@nombre = n
|
19
|
+
@prot = proteinas
|
20
|
+
@gluc = glucidos
|
21
|
+
@gras = grasas
|
22
|
+
@mediciones = mediciones
|
23
|
+
end
|
24
|
+
|
25
|
+
# Devuelve un string formateado con la información del alimento.
|
26
|
+
def to_s
|
27
|
+
"#{@nombre} -> P: #{@prot}g | Gl: #{@gluc}g | Gr: #{@gras}g"
|
28
|
+
end
|
29
|
+
|
30
|
+
# Valor energético del alimento.
|
31
|
+
def kcal
|
32
|
+
prot_kcal + gluc_kcal + gras_kcal
|
33
|
+
end
|
34
|
+
|
35
|
+
# Índice glucémico del alimento
|
36
|
+
def ig
|
37
|
+
ig = (@mediciones.map{ |i| ig_ind(i) }.reduce(:+))/ @mediciones.size
|
38
|
+
ig.round(2)
|
39
|
+
end
|
40
|
+
|
41
|
+
# Se utiliza para el mixin Comparable.
|
42
|
+
# Se toma como valor para la comparación
|
43
|
+
# del valor calórico.
|
44
|
+
def <=>(other)
|
45
|
+
return nil unless other.kind_of?Alimento
|
46
|
+
kcal <=> other.kcal
|
47
|
+
end
|
48
|
+
|
49
|
+
# Área Incremental Bajo la Curva, para el Índice Glucémico
|
50
|
+
def aibc (g)
|
51
|
+
|
52
|
+
r = g.map do | alimento |
|
53
|
+
alimento.each_with_index.map do | index, item |
|
54
|
+
if index > 0
|
55
|
+
alimento[index] < alimento[0] ? 0.0 : (((item - alimento[0]) + (alimento[index-1] - alimento[0]))/2)*5
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
s = r.map{ |n| n.reduce(:+) }
|
61
|
+
s.map{ |i| i.round(2) }
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
# Índice glucémico del alimento por individuo
|
66
|
+
def ig_ind (g)
|
67
|
+
(aibc(g).reduce(:/) * 100).round(2)
|
68
|
+
end
|
69
|
+
|
70
|
+
# Valor energético del alimento por sus proteínas.
|
71
|
+
def prot_kcal
|
72
|
+
@prot*4
|
73
|
+
end
|
74
|
+
# Valor energético del alimento por sus glúcidos.
|
75
|
+
def gluc_kcal
|
76
|
+
@gluc*4
|
77
|
+
end
|
78
|
+
# Valor energético del alimento por sus grasas.
|
79
|
+
def gras_kcal
|
80
|
+
@gras*9
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# Esta clase representa un alimento perteneciente
|
85
|
+
# a un grupo determinado (lácteos, carnes...)
|
86
|
+
class GrupoAlimento < Alimento
|
87
|
+
|
88
|
+
attr_reader :grupo
|
89
|
+
|
90
|
+
# Asigna el nombre, el grupo y los valores de sus macroelementos.
|
91
|
+
def initialize (grupo, n, p, gl, gr, med)
|
92
|
+
case grupo
|
93
|
+
when 'Derivado', 'Carne', 'Pescado', 'Grasa', 'Carbohidrato', 'Verdura', 'Fruta'
|
94
|
+
@grupo = grupo
|
95
|
+
else
|
96
|
+
@grupo = 'Desconocido'
|
97
|
+
end
|
98
|
+
|
99
|
+
super(n, p, gl, gr, med)
|
100
|
+
end
|
101
|
+
|
102
|
+
# Devuelve un string formateado con la información.
|
103
|
+
def to_s
|
104
|
+
"(#{@grupo}) " + super
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
# Constantes de alimentos
|
109
|
+
HUEVO = GrupoAlimento.new('Derivado', 'Huevo', 14.1, 0, 19.5, nil)
|
110
|
+
LECHE = GrupoAlimento.new('Derivado', 'Leche de vaca', 3.3, 4.8, 3.2, nil)
|
111
|
+
YOGURT = GrupoAlimento.new('Derivado', 'Yogurt', 3.8, 4.9, 3.8, nil)
|
112
|
+
CERDO = GrupoAlimento.new('Carne', 'Cerdo', 21.5, 0, 6.3, nil)
|
113
|
+
TERNERA = GrupoAlimento.new('Carne', 'Ternera', 21.1, 0, 3.1, nil)
|
114
|
+
POLLO = GrupoAlimento.new('Carne', 'Pollo', 20.6, 0, 5.6, nil)
|
115
|
+
BACALAO = GrupoAlimento.new('Pescado', 'Bacalao', 17.7, 0, 0.4, nil)
|
116
|
+
ATUN = GrupoAlimento.new('Pescado', 'Atún', 21.5, 0, 15.5, nil)
|
117
|
+
SALMON = GrupoAlimento.new('Pescado', 'Salmón', 19.9, 0, 13.6, nil)
|
118
|
+
ACEITE = GrupoAlimento.new('Grasa', 'Aceite de oliva', 0, 0.2, 99.6, nil)
|
119
|
+
MANTEQUILLA = GrupoAlimento.new('Grasa', 'Mantequilla', 0.7, 0, 83.2, nil)
|
120
|
+
CHOCOLATE = GrupoAlimento.new('Grasa', 'Chocolate', 5.3, 47, 30, nil)
|
121
|
+
AZUCAR = GrupoAlimento.new('Carbohidrato', 'Azucar', 0, 99.8, 0, nil)
|
122
|
+
ARROZ = GrupoAlimento.new('Carbohidrato', 'Arroz', 6.8, 77.7, 0.6, nil)
|
123
|
+
LENTEJAS = GrupoAlimento.new('Carbohidrato', 'Lentejas', 23.5, 52, 1.4, nil)
|
124
|
+
PAPAS = GrupoAlimento.new('Carbohidrato', 'Papas', 2, 15.4, 0.1, nil)
|
125
|
+
TOMATE = GrupoAlimento.new('Verdura', 'Tomate', 1, 3.5, 0.2, nil)
|
126
|
+
CEBOLLA = GrupoAlimento.new('Verdura', 'Cebolla', 1.3, 5.8, 0.3, nil)
|
127
|
+
CALABAZA = GrupoAlimento.new('Verdura', 'Calabaza', 1.1, 4.8, 0.1, nil)
|
128
|
+
MANZANA = GrupoAlimento.new('Fruta', 'Manzana', 0.3, 12.4, 0.4, nil)
|
129
|
+
PLATANO = GrupoAlimento.new('Fruta', 'Plátano', 1.2, 21.4, 0.2, nil)
|
130
|
+
PERA = GrupoAlimento.new('Fruta', 'Pera', 0.5, 12.7, 0.3, nil)
|
131
|
+
|
132
|
+
# Tabla de alimentos
|
133
|
+
TABLA = [HUEVO, LECHE, YOGURT,
|
134
|
+
CERDO, TERNERA, POLLO,
|
135
|
+
BACALAO, ATUN, SALMON,
|
136
|
+
ACEITE, MANTEQUILLA, CHOCOLATE,
|
137
|
+
AZUCAR, ARROZ, LENTEJAS, PAPAS,
|
138
|
+
TOMATE, CEBOLLA, CALABAZA,
|
139
|
+
MANZANA, PLATANO, PERA]
|
140
|
+
TABLA_ORDENADA = [TOMATE, CALABAZA, CEBOLLA, MANZANA, PERA, LECHE, YOGURT,
|
141
|
+
PAPAS, BACALAO, PLATANO, TERNERA, POLLO, CERDO,
|
142
|
+
SALMON, ATUN, HUEVO, LENTEJAS, ARROZ, AZUCAR,
|
143
|
+
CHOCOLATE, MANTEQUILLA, ACEITE]
|
144
|
+
|
145
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# Extensión de la clase array
|
3
|
+
#
|
4
|
+
# @author Sara Revilla
|
5
|
+
|
6
|
+
class Array
|
7
|
+
|
8
|
+
# Devuelve un array nuevo ordenado
|
9
|
+
# utilizando bucles for (ordenación por selección)
|
10
|
+
def ordena_for
|
11
|
+
output = self.dup
|
12
|
+
|
13
|
+
for i in 0..(output.size() - 1)
|
14
|
+
pos_min = i
|
15
|
+
j = i + 1
|
16
|
+
# Busco el mínimo
|
17
|
+
while j < (output.size()) do
|
18
|
+
if output[j] < output[pos_min]
|
19
|
+
pos_min = j
|
20
|
+
end
|
21
|
+
j = j + 1
|
22
|
+
end
|
23
|
+
# Intercambio, pongo el mínimo al final del subarray ordenado, al principio
|
24
|
+
output[pos_min], output[i] = output[i], output[pos_min]
|
25
|
+
end
|
26
|
+
|
27
|
+
output
|
28
|
+
end
|
29
|
+
|
30
|
+
# Devuelve un array nuevo ordenado
|
31
|
+
# utilizando el método each
|
32
|
+
def ordena_each
|
33
|
+
output = self.dup
|
34
|
+
|
35
|
+
(0..(output.size()-1)).each do |inx|
|
36
|
+
minimo = output.find_index(output[inx..(output.size()-1)].min)
|
37
|
+
output[inx], output[minimo] = output[minimo], output[inx]
|
38
|
+
end
|
39
|
+
|
40
|
+
output
|
41
|
+
end
|
42
|
+
|
43
|
+
# Devuelve un array nuevo ordenado
|
44
|
+
# utilizando el método sort
|
45
|
+
def ordena_sort
|
46
|
+
self.sort
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# Este fichero contiene la descripción de una
|
3
|
+
# lista doblemente enlazada y sus nodos.
|
4
|
+
#
|
5
|
+
# @author Sara Revilla
|
6
|
+
|
7
|
+
module Alimento
|
8
|
+
# Este struct describe los nodos de la lista.
|
9
|
+
Node = Struct.new(:value, :next, :prev)
|
10
|
+
|
11
|
+
# Esta clase representa la lista, tiene cabeza y cola.
|
12
|
+
class List
|
13
|
+
include Enumerable
|
14
|
+
attr_reader :head, :tail
|
15
|
+
|
16
|
+
# Inicializa las variables de instancia
|
17
|
+
def initialize
|
18
|
+
@head
|
19
|
+
@tail
|
20
|
+
end
|
21
|
+
|
22
|
+
# Devuelve un string con la lista formateada correctamente
|
23
|
+
def to_s
|
24
|
+
s = "("
|
25
|
+
node = @head
|
26
|
+
while !node.nil?
|
27
|
+
s += "#{node.value}"
|
28
|
+
if !node.next.nil?
|
29
|
+
s += ","
|
30
|
+
end
|
31
|
+
node = node.next
|
32
|
+
end
|
33
|
+
s += ")"
|
34
|
+
s
|
35
|
+
end
|
36
|
+
|
37
|
+
# Toma un valor determinado, crea un nodo para él, y lo
|
38
|
+
# inserta por la cola de la lista.
|
39
|
+
def insert(value)
|
40
|
+
node = Node.new(value, nil, nil)
|
41
|
+
# Si la lista está vacía
|
42
|
+
if @head.nil? and @tail.nil?
|
43
|
+
@head = @tail = node
|
44
|
+
else
|
45
|
+
@tail.next = node
|
46
|
+
node.prev = @tail
|
47
|
+
@tail = node
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# Elimina el nodo que se encuentra en la cabeza y devuelve el valor
|
52
|
+
def pop_head
|
53
|
+
if !(@head.nil?)
|
54
|
+
node = @head
|
55
|
+
@head = node.next
|
56
|
+
node.next.prev = nil
|
57
|
+
node.next = nil
|
58
|
+
node.value
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# Elimina el nodo que se encuentra en la cola y devuelve el valor
|
63
|
+
def pop_tail
|
64
|
+
if !(@tail.nil?)
|
65
|
+
node = @tail
|
66
|
+
@tail = node.prev
|
67
|
+
node.prev.next = nil
|
68
|
+
node.prev = nil
|
69
|
+
node.value
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
# Necesario para el mixin Enumerable
|
74
|
+
# Iteración sobre los elementos de la lista, de cabeza a cola
|
75
|
+
def each
|
76
|
+
node = @head
|
77
|
+
while !node.nil?
|
78
|
+
yield node.value
|
79
|
+
node = node.next
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
@@ -0,0 +1,125 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# Clase para el DSL que define un Plato Harvard
|
3
|
+
#
|
4
|
+
# @author Sara Revilla
|
5
|
+
|
6
|
+
module Alimento
|
7
|
+
|
8
|
+
EQUIVALENCIAS = { "pieza" => 200,
|
9
|
+
"taza" => 140,
|
10
|
+
"tazon" => 300,
|
11
|
+
"cucharon" => 160,
|
12
|
+
"cucharón" => 160,
|
13
|
+
"cucharada" => 20,
|
14
|
+
"cucharadita" => 8,
|
15
|
+
}
|
16
|
+
|
17
|
+
class Plato
|
18
|
+
|
19
|
+
attr_reader :nombre, :ingredientes, :cantidades
|
20
|
+
|
21
|
+
def initialize (nombre, &block)
|
22
|
+
@nombre = nombre
|
23
|
+
@ingredientes = []
|
24
|
+
@cantidades = []
|
25
|
+
|
26
|
+
if block_given?
|
27
|
+
instance_eval(&block)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def to_s
|
32
|
+
|
33
|
+
line = "~"*80
|
34
|
+
s = "#{@nombre}\n" + line + "\n"
|
35
|
+
s << "%-25s %-10s %-10s %-10s %s\n" % [' ', 'Glúcidos', 'Proteínas', 'Lípidos', 'Valor energético']
|
36
|
+
(0..(@ingredientes.size-1)).each do |i|
|
37
|
+
nombre = @ingredientes[i].nombre
|
38
|
+
gluc = ((@ingredientes[i].gluc)*@cantidades[i]/100)
|
39
|
+
prot = ((@ingredientes[i].prot)*@cantidades[i]/100)
|
40
|
+
lip = ((@ingredientes[i].gras)*@cantidades[i]/100)
|
41
|
+
i_kcal = ((@ingredientes[i].kcal)*@cantidades[i]/100)
|
42
|
+
s << "%-25s %-10.2f %-10.2f %-10.2f %.2f\n" % [ nombre, gluc, prot, lip, i_kcal ]
|
43
|
+
end
|
44
|
+
|
45
|
+
s << "%-58s %.2f\n" % ['Valor energético total', kcal]
|
46
|
+
s
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
def kcal
|
51
|
+
kcal = 0
|
52
|
+
(0..(@ingredientes.size-1)).each do |i|
|
53
|
+
kcal += @ingredientes[i].kcal * @cantidades[i] / 100
|
54
|
+
end
|
55
|
+
kcal.round(2)
|
56
|
+
end
|
57
|
+
|
58
|
+
def vegetal (nombre, opciones = {})
|
59
|
+
ingrediente(nombre, opciones)
|
60
|
+
end
|
61
|
+
|
62
|
+
def fruta (nombre, opciones = {})
|
63
|
+
ingrediente(nombre, opciones)
|
64
|
+
end
|
65
|
+
|
66
|
+
def cereal (nombre, opciones = {})
|
67
|
+
ingrediente(nombre, opciones)
|
68
|
+
end
|
69
|
+
|
70
|
+
def proteina (nombre, opciones = {})
|
71
|
+
ingrediente(nombre, opciones)
|
72
|
+
end
|
73
|
+
|
74
|
+
def aceite (nombre, opciones = {})
|
75
|
+
ingrediente(nombre, opciones)
|
76
|
+
end
|
77
|
+
|
78
|
+
def ingrediente (nombre, opciones = {})
|
79
|
+
ingrediente = TABLA.find { |i| i.nombre == nombre }
|
80
|
+
gramos = 0.0
|
81
|
+
|
82
|
+
return if ingrediente.nil?
|
83
|
+
|
84
|
+
if opciones.has_key?(:gramos)
|
85
|
+
gramos = opciones[:gramos]
|
86
|
+
|
87
|
+
elsif opciones.has_key?(:porcion)
|
88
|
+
# Divido las palabras/números
|
89
|
+
porcion = opciones[:porcion].split(' ')
|
90
|
+
|
91
|
+
# Supongo que puede ser un número o una fracción
|
92
|
+
if porcion[0] =~ /^[0-9]+$/
|
93
|
+
gramos = porcion[0].to_f
|
94
|
+
elsif porcion[0] =~ /^[0-9]+\/[0-9]+$/
|
95
|
+
gramos = porcion[0].to_r.to_f
|
96
|
+
end
|
97
|
+
|
98
|
+
# Compruebo si es un plural, si lo es, lo modifico
|
99
|
+
if porcion[1][-2,2] == 'es'
|
100
|
+
porcion[1] = porcion[1][0...-2]
|
101
|
+
elsif porcion[1][-1,1] == 's'
|
102
|
+
porcion[1] = porcion[1][0...-1]
|
103
|
+
end
|
104
|
+
|
105
|
+
gramos *= EQUIVALENCIAS[porcion[1]]
|
106
|
+
|
107
|
+
# Si la medida está ajustada (pequeño o grande), modifico
|
108
|
+
if porcion.size > 2
|
109
|
+
if porcion[2] =~ /^pequeñ/
|
110
|
+
gramos /= 2
|
111
|
+
elsif porcion[2] =~ /^grand/
|
112
|
+
gramos *= 2
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
117
|
+
|
118
|
+
@ingredientes << ingrediente
|
119
|
+
@cantidades << gramos
|
120
|
+
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|