nutrientes 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 (55) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +13 -0
  4. data/.rspec +2 -0
  5. data/.travis.yml +7 -0
  6. data/Gemfile +6 -0
  7. data/Guardfile +82 -0
  8. data/README.md +31 -0
  9. data/Rakefile +6 -0
  10. data/bin/benchmark.rb +35 -0
  11. data/bin/console +15 -0
  12. data/bin/setup +8 -0
  13. data/docs/Alimento.html +867 -0
  14. data/docs/AlimentoGraso.html +146 -0
  15. data/docs/AlimentoRicoCarbohidratos.html +146 -0
  16. data/docs/Bebida.html +146 -0
  17. data/docs/DerivadoCarne.html +146 -0
  18. data/docs/Fruta.html +146 -0
  19. data/docs/HuevoLacteoHelado.html +146 -0
  20. data/docs/Lista.html +921 -0
  21. data/docs/Nodo.html +398 -0
  22. data/docs/Nutrientes.html +117 -0
  23. data/docs/PescadoMarisco.html +146 -0
  24. data/docs/VerduraHortaliza.html +146 -0
  25. data/docs/_index.html +229 -0
  26. data/docs/class_list.html +51 -0
  27. data/docs/css/common.css +1 -0
  28. data/docs/css/full_list.css +58 -0
  29. data/docs/css/style.css +492 -0
  30. data/docs/file.README.html +115 -0
  31. data/docs/file_list.html +56 -0
  32. data/docs/frames.html +17 -0
  33. data/docs/index.html +115 -0
  34. data/docs/js/app.js +248 -0
  35. data/docs/js/full_list.js +216 -0
  36. data/docs/js/jquery.js +4 -0
  37. data/docs/method_list.html +203 -0
  38. data/docs/top-level-namespace.html +112 -0
  39. data/lib/nutrientes/alimento.rb +55 -0
  40. data/lib/nutrientes/alimento_graso.rb +2 -0
  41. data/lib/nutrientes/alimento_rico_carbohidratos.rb +2 -0
  42. data/lib/nutrientes/array.rb +23 -0
  43. data/lib/nutrientes/bebida.rb +2 -0
  44. data/lib/nutrientes/derivado_carne.rb +2 -0
  45. data/lib/nutrientes/fruta.rb +2 -0
  46. data/lib/nutrientes/huevo_lacteo_helado.rb +2 -0
  47. data/lib/nutrientes/lista.rb +91 -0
  48. data/lib/nutrientes/nodo.rb +1 -0
  49. data/lib/nutrientes/pescado_marisco.rb +2 -0
  50. data/lib/nutrientes/plato.rb +128 -0
  51. data/lib/nutrientes/verdura_hortaliza.rb +2 -0
  52. data/lib/nutrientes/version.rb +3 -0
  53. data/lib/nutrientes.rb +18 -0
  54. data/nutrientes.gemspec +40 -0
  55. metadata +209 -0
@@ -0,0 +1,23 @@
1
+ class Array
2
+ def sort_for
3
+ array_ordenado=self.map(&:clone)
4
+ n = array_ordenado.length
5
+ loop do
6
+ cambiado = false
7
+ for i in 0..n-2 do
8
+ if array_ordenado[i] > array_ordenado[i+1]
9
+ array_ordenado[i], array_ordenado[i+1] = array_ordenado[i+1], array_ordenado[i]
10
+ cambiado = true
11
+ end
12
+ end
13
+ break unless cambiado
14
+ end
15
+ array_ordenado
16
+ end
17
+
18
+ def sort_each
19
+ array_ordenado=self.map(&:clone)
20
+ (0..(self.size-1)*(self.size-1)).each {(0..self.size-2).each {|i| array_ordenado[i], array_ordenado[i+1]=array_ordenado[i+1], array_ordenado[i] if 1==(array_ordenado[i]<=>array_ordenado[i+1])}}
21
+ array_ordenado
22
+ end
23
+ end
@@ -0,0 +1,2 @@
1
+ class Bebida < Alimento
2
+ end
@@ -0,0 +1,2 @@
1
+ class DerivadoCarne < Alimento
2
+ end
@@ -0,0 +1,2 @@
1
+ class Fruta < Alimento
2
+ end
@@ -0,0 +1,2 @@
1
+ class HuevoLacteoHelado < Alimento
2
+ end
@@ -0,0 +1,91 @@
1
+ # Clase que representa una lista doblemente enlazada
2
+ class Lista
3
+ include Comparable
4
+ include Enumerable
5
+
6
+ def initialize
7
+ @cabeza = nil
8
+ @cola = nil
9
+ end
10
+
11
+ # Inserta un elemento en la lista
12
+ # @param elemento [Object] el elemento
13
+ def insertar(elemento)
14
+ nodo = Nodo.new
15
+ nodo.valor = elemento
16
+ if @cabeza.nil?
17
+ @cabeza = nodo
18
+ @cola = nodo
19
+ else
20
+ @cola.siguiente = nodo
21
+ nodo.previo = @cola
22
+ @cola = nodo
23
+ end
24
+ end
25
+
26
+ # Inserta varios elementos en la lista
27
+ # @param elementos [Array] el array de elementos
28
+ def insertar_a(elementos)
29
+ raise ArgumentError, "elementos no es un array" unless elementos.is_a? Array
30
+ elementos.each {|e| insertar e}
31
+ end
32
+
33
+ # Extrae el primer elemento de la lista
34
+ # @return [Object] el primer elemento de la lista o nil si esta vacia
35
+ def extraer_cabeza
36
+ if @cabeza.nil?
37
+ nil
38
+ else
39
+ antigua_cabeza = @cabeza
40
+ siguiente = @cabeza.siguiente
41
+ if siguiente.nil?
42
+ @cabeza = nil
43
+ @cola = nil
44
+ else
45
+ siguiente.previo = nil
46
+ @cabeza = siguiente
47
+ end
48
+ antigua_cabeza.valor
49
+ end
50
+ end
51
+
52
+ # Extrae el ultimo elemento de la lista
53
+ # @return [Object] el ultimo elemento de la lista o nil si esta vacia
54
+ def extraer_cola
55
+ if @cola.nil?
56
+ nil
57
+ else
58
+ antigua_cola = @cola
59
+ previo = @cola.previo
60
+ if previo.nil?
61
+ @cabeza = nil
62
+ @cola = nil
63
+ else
64
+ previo.previo = nil
65
+ @cola = previo
66
+ end
67
+ antigua_cola.valor
68
+ end
69
+ end
70
+
71
+ # Obtiene el numero de elementos en la lista
72
+ # @return [Numeric] el numero de elementos
73
+ def numero_nodos
74
+ nodo_actual = @cabeza
75
+ numero_nodos = 0
76
+ while nodo_actual != nil do
77
+ nodo_actual = nodo_actual.siguiente
78
+ numero_nodos += 1
79
+ end
80
+ numero_nodos
81
+ end
82
+
83
+ # Itera todos los elementos de la lista
84
+ def each
85
+ nodo_actual = @cabeza
86
+ 1.upto(numero_nodos) do
87
+ yield nodo_actual.valor
88
+ nodo_actual = nodo_actual.siguiente
89
+ end
90
+ end
91
+ end
@@ -0,0 +1 @@
1
+ Nodo = Struct.new(:valor, :siguiente, :previo)
@@ -0,0 +1,2 @@
1
+ class PescadoMarisco < Alimento
2
+ end
@@ -0,0 +1,128 @@
1
+ class Plato
2
+ attr_accessor :vegetales, :frutas, :cereales, :proteinas, :aceites
3
+
4
+ def initialize(nombre, &bloque)
5
+
6
+ @alimentos = [HuevoLacteoHelado.new("Huevo", 14.1, 0, 19.5),
7
+ HuevoLacteoHelado.new("Leche vaca", 3.3, 4.8, 3.2),
8
+ HuevoLacteoHelado.new("Yogurt", 3.8, 4.9, 3.8),
9
+ DerivadoCarne.new("Cerdo", 21.5, 0, 6.3),
10
+ DerivadoCarne.new("Ternera", 21.1, 0, 3.1),
11
+ DerivadoCarne.new("Pollo", 20.6, 0, 5.6),
12
+ PescadoMarisco.new("Bacalao", 17.7, 0, 0.4),
13
+ PescadoMarisco.new("Atún", 21.5, 0, 15.5),
14
+ PescadoMarisco.new("Salmón", 19.9, 0, 13.6),
15
+ AlimentoGraso.new("Aceite de oliva", 0, 0.2, 99.6),
16
+ AlimentoGraso.new("Mantequilla", 0.7, 0, 83.2),
17
+ AlimentoGraso.new("Chocolate", 5.3, 47, 30),
18
+ AlimentoRicoCarbohidratos.new("Azúcar", 0, 99.8, 0),
19
+ AlimentoRicoCarbohidratos.new("Arroz", 6.8, 77.7, 0.6),
20
+ AlimentoRicoCarbohidratos.new("Lentejas", 23.5, 52.0, 1.4),
21
+ AlimentoRicoCarbohidratos.new("Papas", 2, 15.4, 0.1),
22
+ VerduraHortaliza.new("Tomate", 1, 3.5, 0.2),
23
+ VerduraHortaliza.new("Cebolla", 1.3, 5.8, 0.3),
24
+ VerduraHortaliza.new("Calabaza", 1.1, 4.8, 0.1),
25
+ Fruta.new("Manzana", 0.3, 12.4, 0.4),
26
+ Fruta.new("Plátano", 1.2, 21.4, 0.2),
27
+ Fruta.new("Pera", 0.5, 12.7, 0.3)]
28
+ @equivalencias = {"pieza pequeña" => 30, "piezas pequeñas" => 30, "taza" => 100,
29
+ "tazas" => 100, "cucharón" => 50, "pieza" => 60, "piezas" => 60,
30
+ "cucharada" => 10, "cucharadas" => 10}
31
+ @nombre = nombre
32
+ @alimentos_plato = {:vegetales => [], :frutas => [], :cereales => [], :proteinas => [], :aceites => []}
33
+
34
+ if block_given?
35
+ if bloque.arity == 1
36
+ yield self
37
+ else
38
+ instance_eval(&bloque)
39
+ end
40
+ end
41
+
42
+ end
43
+
44
+ def vegetal(nombre, cantidad = {})
45
+ alimento_parseado = parsear_alimento(nombre, cantidad)
46
+ @alimentos_plato[:vegetales] << alimento_parseado if alimento_parseado.length > 0
47
+ end
48
+
49
+ def fruta(nombre, cantidad = {})
50
+ alimento_parseado = parsear_alimento(nombre, cantidad)
51
+ @alimentos_plato[:frutas] << alimento_parseado if alimento_parseado.length > 0
52
+ end
53
+
54
+ def cereal(nombre, cantidad = {})
55
+ alimento_parseado = parsear_alimento(nombre, cantidad)
56
+ @alimentos_plato[:cereales] << alimento_parseado if alimento_parseado.length > 0
57
+ end
58
+
59
+ def proteina(nombre, cantidad = {})
60
+ alimento_parseado = parsear_alimento(nombre, cantidad)
61
+ @alimentos_plato[:proteinas] << alimento_parseado if alimento_parseado.length > 0
62
+ end
63
+
64
+ def aceite(nombre, cantidad = {})
65
+ alimento_parseado = parsear_alimento(nombre, cantidad)
66
+ @alimentos_plato[:aceites] << alimento_parseado if alimento_parseado.length > 0
67
+ end
68
+
69
+ def to_s
70
+ salida = @nombre
71
+ salida << "\n#{'=' * @nombre.size}\n"
72
+ salida << "Composición nutricional:\n"
73
+ salida << formatear_texto(" ", 17)
74
+ salida << formatear_texto("glúcidos", 12)
75
+ salida << formatear_texto("proteínas", 12)
76
+ salida << formatear_texto("lípidos", 12)
77
+ salida << "valor energético\n"
78
+ total = 0
79
+ @alimentos_plato.each do |tipo, lista|
80
+ lista.each do |alimento|
81
+ salida << formatear_texto(alimento[:alimento].nombre, 17)
82
+ salida << formatear_texto(alimento[:alimento].glucidos.to_s, 12)
83
+ salida << formatear_texto(alimento[:alimento].proteinas.to_s, 12)
84
+ salida << formatear_texto(alimento[:alimento].grasas.to_s, 12)
85
+ valor_energetico = (alimento[:alimento].valor_energetico*alimento[:gramos]/10).round(2)
86
+ total += valor_energetico
87
+ salida << valor_energetico.to_s
88
+ salida << "\n"
89
+ end
90
+ end
91
+ salida << formatear_texto("Valor energético total", 53)
92
+ salida << total.round(2).to_s
93
+ salida
94
+ end
95
+
96
+ def test
97
+ puts @alimentos_plato
98
+ end
99
+
100
+ def formatear_texto(texto, longitud)
101
+ espacios = longitud - texto.length
102
+ if espacios < 0
103
+ espacios = 0
104
+ end
105
+ texto + (' ' * espacios)
106
+ end
107
+
108
+ def parsear_alimento(nombre, cantidad)
109
+ alimento_parseado = {}
110
+ @alimentos.each do |alimento|
111
+ if alimento.nombre == nombre
112
+ if cantidad[:porcion] && !cantidad[:gramos]
113
+ begin
114
+ multiplicador = cantidad[:porcion].split(' ').first.to_r.to_f
115
+ cantidad[:gramos] = multiplicador * @equivalencias[cantidad[:porcion].split(' ', 2).last]
116
+ rescue
117
+ cantidad[:gramos] = 10
118
+ end
119
+ end
120
+ alimento_parseado = {:alimento => alimento, :gramos => cantidad[:gramos]}
121
+ end
122
+ end
123
+ alimento_parseado
124
+ end
125
+
126
+ private :formatear_texto, :parsear_alimento
127
+
128
+ end
@@ -0,0 +1,2 @@
1
+ class VerduraHortaliza < Alimento
2
+ end
@@ -0,0 +1,3 @@
1
+ module Nutrientes
2
+ VERSION = "0.1.0"
3
+ end
data/lib/nutrientes.rb ADDED
@@ -0,0 +1,18 @@
1
+ require "nutrientes/version"
2
+ require "nutrientes/alimento"
3
+ require "nutrientes/huevo_lacteo_helado"
4
+ require "nutrientes/derivado_carne"
5
+ require "nutrientes/pescado_marisco"
6
+ require "nutrientes/alimento_graso"
7
+ require "nutrientes/alimento_rico_carbohidratos"
8
+ require "nutrientes/verdura_hortaliza"
9
+ require "nutrientes/fruta"
10
+ require "nutrientes/bebida"
11
+ require "nutrientes/nodo"
12
+ require "nutrientes/lista"
13
+ require "nutrientes/array"
14
+ require "nutrientes/plato"
15
+
16
+ module Nutrientes
17
+ # Your code goes here...
18
+ end
@@ -0,0 +1,40 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "nutrientes/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "nutrientes"
8
+ spec.version = Nutrientes::VERSION
9
+ spec.authors = ["Andres Garcia Perez"]
10
+ spec.email = ["alu0101070650@ull.edu.es"]
11
+
12
+ spec.summary = %q{Practica 11}
13
+ spec.description = %q{Gema para la asignatura de LPP}
14
+ spec.homepage = "https://github.com/ULL-ESIT-LPP-1718/tdd-alu0101070650.git"
15
+
16
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
17
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
18
+ if spec.respond_to?(:metadata)
19
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
20
+ else
21
+ raise "RubyGems 2.0 or newer is required to protect against " \
22
+ "public gem pushes."
23
+ end
24
+
25
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
26
+ f.match(%r{^(test|spec|features)/})
27
+ end
28
+ spec.bindir = "exe"
29
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
30
+ spec.require_paths = ["lib"]
31
+
32
+ spec.add_development_dependency "bundler", "~> 1.15"
33
+ spec.add_development_dependency "rake", "~> 10.0"
34
+ spec.add_development_dependency "rspec", "~> 3.0"
35
+ spec.add_development_dependency "guard"
36
+ spec.add_development_dependency "guard-rspec"
37
+ spec.add_development_dependency "guard-bundler"
38
+ spec.add_development_dependency "yard"
39
+ spec.add_development_dependency "coveralls"
40
+ end
metadata ADDED
@@ -0,0 +1,209 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nutrientes
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Andres Garcia Perez
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2017-12-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.15'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.15'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: guard
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: guard-rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: guard-bundler
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: yard
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: coveralls
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ description: Gema para la asignatura de LPP
126
+ email:
127
+ - alu0101070650@ull.edu.es
128
+ executables: []
129
+ extensions: []
130
+ extra_rdoc_files: []
131
+ files:
132
+ - ".coveralls.yml"
133
+ - ".gitignore"
134
+ - ".rspec"
135
+ - ".travis.yml"
136
+ - Gemfile
137
+ - Guardfile
138
+ - README.md
139
+ - Rakefile
140
+ - bin/benchmark.rb
141
+ - bin/console
142
+ - bin/setup
143
+ - docs/Alimento.html
144
+ - docs/AlimentoGraso.html
145
+ - docs/AlimentoRicoCarbohidratos.html
146
+ - docs/Bebida.html
147
+ - docs/DerivadoCarne.html
148
+ - docs/Fruta.html
149
+ - docs/HuevoLacteoHelado.html
150
+ - docs/Lista.html
151
+ - docs/Nodo.html
152
+ - docs/Nutrientes.html
153
+ - docs/PescadoMarisco.html
154
+ - docs/VerduraHortaliza.html
155
+ - docs/_index.html
156
+ - docs/class_list.html
157
+ - docs/css/common.css
158
+ - docs/css/full_list.css
159
+ - docs/css/style.css
160
+ - docs/file.README.html
161
+ - docs/file_list.html
162
+ - docs/frames.html
163
+ - docs/index.html
164
+ - docs/js/app.js
165
+ - docs/js/full_list.js
166
+ - docs/js/jquery.js
167
+ - docs/method_list.html
168
+ - docs/top-level-namespace.html
169
+ - lib/nutrientes.rb
170
+ - lib/nutrientes/alimento.rb
171
+ - lib/nutrientes/alimento_graso.rb
172
+ - lib/nutrientes/alimento_rico_carbohidratos.rb
173
+ - lib/nutrientes/array.rb
174
+ - lib/nutrientes/bebida.rb
175
+ - lib/nutrientes/derivado_carne.rb
176
+ - lib/nutrientes/fruta.rb
177
+ - lib/nutrientes/huevo_lacteo_helado.rb
178
+ - lib/nutrientes/lista.rb
179
+ - lib/nutrientes/nodo.rb
180
+ - lib/nutrientes/pescado_marisco.rb
181
+ - lib/nutrientes/plato.rb
182
+ - lib/nutrientes/verdura_hortaliza.rb
183
+ - lib/nutrientes/version.rb
184
+ - nutrientes.gemspec
185
+ homepage: https://github.com/ULL-ESIT-LPP-1718/tdd-alu0101070650.git
186
+ licenses: []
187
+ metadata:
188
+ allowed_push_host: https://rubygems.org
189
+ post_install_message:
190
+ rdoc_options: []
191
+ require_paths:
192
+ - lib
193
+ required_ruby_version: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - ">="
196
+ - !ruby/object:Gem::Version
197
+ version: '0'
198
+ required_rubygems_version: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - ">="
201
+ - !ruby/object:Gem::Version
202
+ version: '0'
203
+ requirements: []
204
+ rubyforge_project:
205
+ rubygems_version: 2.6.14
206
+ signing_key:
207
+ specification_version: 4
208
+ summary: Practica 11
209
+ test_files: []