pr11.2 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,166 @@
1
+ #Clase alimento que engloba a todas las otras pequeñas clases.
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+ class Grupo
11
+
12
+ include Comparable
13
+ attr_accessor :tipo
14
+ def initialize(tipo)
15
+
16
+ @tipo = tipo
17
+
18
+ end
19
+
20
+
21
+
22
+ def to_s
23
+
24
+ if @tipo=='carnes'
25
+ "grupo de carnes y derivado:"
26
+ elsif @tipo == 'pescado'
27
+ "grupo de pescado y mariscos:"
28
+ elsif @tipo == 'lacteos'
29
+ "grupo de huevos, lacteos y helados:"
30
+ elsif @tipo == 'al_graso'
31
+ "(grupo de alimentos grasos )"
32
+ elsif @tipo == 'al_carbohidratos'
33
+ "grupo de alimentos ricos en carbohidratos:"
34
+ elsif @tipo == 'frutas'
35
+ "grupo de frutas:"
36
+ elsif @tipo == 'verduras'
37
+ "grupo de verduras y hortalizas:"
38
+ else
39
+ "grupo de bebidas:"
40
+ end
41
+ end
42
+ end
43
+
44
+
45
+
46
+
47
+ #Clase alimento que engloba a todas las otras pequeñas clases.
48
+ class Alimento < Grupo
49
+
50
+
51
+
52
+ attr_accessor :nombre,:prt,:gli,:lp,:ind_gluc,:valor_energ
53
+
54
+
55
+ def initialize(nombre,proteina,glucido,lipido,tipo)
56
+
57
+
58
+ super(tipo)
59
+
60
+ class Alimento
61
+
62
+
63
+
64
+ attr_accessor :nombre,:prt,:gli,:lp
65
+
66
+ def initialize(nombre,proteina,glucido,lipido)
67
+
68
+
69
+
70
+ super(tipo)
71
+
72
+
73
+
74
+
75
+ @ind_gluc = nil #variable para la glucosa
76
+ @nombre = nombre
77
+ @prt =proteina
78
+ @gl = glucido
79
+ @lp = lipido
80
+
81
+ end
82
+
83
+ def to_s
84
+
85
+
86
+
87
+ s = "( "
88
+
89
+ s << super.to_s #encadenamiento (chaining)
90
+
91
+ s << " #{@nombre}: #{@prt} g de proteina,#{@gl} g de glúcido,#{@lp} g de lipidos )"
92
+
93
+ s
94
+
95
+ end
96
+
97
+
98
+
99
+ "(#{@nombre}: #{@prt} g de proteina,#{@gl} g de glúcido,#{@lp} g de lipidos )"
100
+
101
+ end
102
+
103
+
104
+ def get_prt
105
+ @prt
106
+ end
107
+
108
+ def get_nombre
109
+ @nombre
110
+ end
111
+
112
+ def get_lp
113
+ @lp
114
+ end
115
+
116
+ def get_gl
117
+ @gl
118
+ end
119
+
120
+
121
+ def valor_energetico
122
+
123
+ @valor_energ= ( @prt * 4) + (@gl * 4) +(@lp * 9)
124
+
125
+ end
126
+
127
+
128
+ def <=>(other)
129
+
130
+
131
+ @valor_energ=other.valor_energ
132
+
133
+ end
134
+
135
+ def calculate_index(data, gluc)
136
+ aibc = [[],[]]
137
+ data.each do |x|
138
+ aux = 0
139
+ x.each_index do |a|
140
+ if (a != 0)
141
+ aux += (((x[a] - x[0]) + (x[a - 1] - x[0])) /2)*5
142
+ end
143
+ end
144
+ aibc[0] << aux
145
+ end
146
+ gluc.each do |x|
147
+ aux = 0
148
+ x.each_index do |a|
149
+ if (a != 0)
150
+ aux += (((x[a] - x[0]) + (x[a - 1] - x[0])) /2)*5
151
+ end
152
+ end
153
+ aibc[1] << aux
154
+ end
155
+ ig_index = []
156
+ aibc[0].each_index { |x| ig_index << ((aibc[0][x] / aibc[1][x]) * 100)}
157
+ suma = 0
158
+ ig_index.each{ |x| suma += x}
159
+ @ind_gluc = (suma / ig_index.length)
160
+
161
+ end
162
+ end
163
+
164
+
165
+
166
+
@@ -0,0 +1,101 @@
1
+ # Representación de un nodo en una lista
2
+
3
+ Node = Struct.new(:value, :next, :prev)
4
+
5
+ # Representación de una lista doblemente enlazada de nodos
6
+
7
+ class Lista
8
+ include Enumerable
9
+ attr_reader :head, :tail
10
+
11
+ # Inserción por la cabeza de la lista
12
+ # @param [any] x valor del nuevo nodo
13
+ #
14
+ # @return [Node] Devuelve el head
15
+ def push_head(x)
16
+ if(@head == nil)
17
+ @head = Node.new(x, nil, nil)
18
+ @tail = @head
19
+ else
20
+ nuevo = Node.new(x, nil, nil)
21
+ nuevo.next= @head
22
+ @head.prev = nuevo
23
+ @head = nuevo
24
+ end
25
+ end
26
+
27
+ # Inserción por la cola de la lista
28
+ # @param [any] x valor del nuevo nodo
29
+ #
30
+ # @return [Node] Devuelve el tail
31
+ def push_tail(x)
32
+ if(@tail == nil)
33
+ @tail = Node.new(x, nil, nil)
34
+ @head = @tail
35
+ else
36
+ nuevo = Node.new(x, nil, nil)
37
+ nuevo.prev = @tail
38
+ @tail.next = nuevo
39
+ @tail = nuevo
40
+ end
41
+ end
42
+
43
+ # Inserción por la cola de la lista de varios nodos
44
+ # @param [Array<any>] x valores de los nuevos nodos
45
+ #
46
+ # @return [Node] Devuelve el tail
47
+ def push(x)
48
+ x.each{
49
+ |i| push_tail(i)
50
+ }
51
+ end
52
+
53
+ # Extracción del primer nodo de la lista
54
+ #
55
+ # @return [any, nil] devuelve el valor guardado en el primer nodo o nil si no hay nodos en la lista
56
+ def pop_head()
57
+ if(@head == nil)
58
+ return nil
59
+ end
60
+
61
+ x = @head
62
+ @head = @head.next
63
+ if(@head == nil)
64
+ @tail = nil
65
+ else
66
+ @head.prev = nil
67
+ x.next = nil
68
+ end
69
+ x.value
70
+ end
71
+
72
+ # Extracción del último nodo de la lista
73
+ #
74
+ # @return [any, nil] devuelve el valor guardado en el último nodo o nil si no hay nodos en la lista
75
+ def pop_tail()
76
+ if(@tail == nil)
77
+ return nil
78
+ end
79
+
80
+ x = @tail
81
+ @tail = @tail.prev
82
+ if(@tail == nil)
83
+ @head = nil
84
+ else
85
+ @tail.next = nil
86
+ x.prev = nil
87
+ end
88
+ x.value
89
+ end
90
+
91
+ # Método para la enumeración de los nodos de la lista
92
+ #
93
+ # @return [Node] devuelve los nodos que conforman la lista
94
+ def each
95
+ x = @head
96
+ while(x != nil)
97
+ yield x.value
98
+ x = x.next
99
+ end
100
+ end
101
+ end
data/lib/pr06/plato.rb ADDED
@@ -0,0 +1,158 @@
1
+ #representación de un plato, es decir de un conjunto de alimentos definido en lenguaje natural
2
+
3
+
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
+
19
+ @nombre = nombre
20
+ @@tabla = [ Alimento.new('Huevo Frito',14.1,0.0,19.5,'lacteos'),
21
+ Alimento.new('Leche',3.3,4.8,3.2,'lacteos'),
22
+ Alimento.new('Cerdo',21.5,0.0,6.3,'carnes'),
23
+ Alimento.new('Yogurt', 3.8, 4.9, 3.8,'lacteos'),
24
+ Alimento.new("Ternera", 21.1, 0.0, 3.1,'carnes'),
25
+ Alimento.new("Pollo", 20.6, 0.0, 5.6,'carnes'),
26
+ Alimento.new("Bacalao", 17.7, 0.0, 0.4,'pescado'),
27
+ Alimento.new("Atun", 21.5, 0.0, 15.5,'pescado'),
28
+ Alimento.new("Salmon", 19.9, 0.0, 13.6,'pescado'),
29
+ Alimento.new("Aceite de oliva", 0.0, 0.2, 99.6,'al_graso'),
30
+ Alimento.new("Mantequilla", 0.7, 0.0, 83.2,'al_graso'),
31
+ Alimento.new("Chocolate", 5.3, 47.0, 30.0,'al_graso'),
32
+ Alimento.new("Azucar", 0.0, 99.8, 0.0,'al_carbohidratos'),
33
+ Alimento.new("Arroz", 6.8, 77.7, 0.6,'al_carbohidratos'),
34
+ Alimento.new("Lentejas", 23.5, 52.0, 1.4,'al_carbohidratos'),
35
+ Alimento.new("Papas", 2.0, 15.4, 0.1,'al_carbohidratoso'),
36
+ Alimento.new("Tomate", 1.0, 3.5, 0.2,'verduras'),
37
+ Alimento.new("Cebolla", 1.3, 5.8, 0.3,'verduras'),
38
+ Alimentoe.new("Calabaza", 1.1, 4.8, 0.1,'verduras'),
39
+ Alimento.new("Manzana", 0.3, 12.4, 0.4,'fruta'),
40
+ Alimento.new("Platanos", 1.2, 21.4, 0.2,'fruta'),
41
+ Alimento.new("Pera", 0.5 ,12.7, 0.3,'fruta')]
42
+ @porciones =[]
43
+ @ingredientes = []
44
+ if block_given?
45
+ if bloque.arity == 1
46
+ yield self
47
+ else
48
+ instance_eval(&bloque)
49
+ end
50
+ end
51
+ end
52
+
53
+ # Convierte el objeto en un String
54
+ # @return [String] descripción del plato en una cadena de caracteres
55
+ def to_s
56
+ texto = @nombre
57
+ texto << "\n#{'=' * @nombre.size}\n"
58
+ texto << "Composicion nutricional: \n"
59
+ @ingredientes.each_with_index do |i , p|
60
+ texto << i.to_s
61
+ texto << "#{i.kcal * @porciones[p]}"
62
+ texto << "\n"
63
+ end
64
+ return texto
65
+ end
66
+
67
+ #Añade una fruta al plato
68
+ #@param [String] nombre nombre de la fruta
69
+ #@param options cantidad de un alimento
70
+ def fruta(nombre, options = {})
71
+ tabla.each_with_index do |s , i|
72
+ if (s.nombre == nombre)
73
+ @ingredientes << tabla[i]
74
+ break
75
+ end
76
+ end
77
+ if (options[:gramos])
78
+ @porciones << options[:gramos]
79
+ else if (options[:porciones])
80
+ dummyString = options[:porciones]
81
+ @porciones << dummyString.scan(/\d+\.\d+/).first.to_f
82
+ end
83
+ end
84
+ end
85
+ #Añade un vegetal al plato
86
+ #@param [String] nombre nombre de la fruta
87
+ #@param options cantidad de un alimento
88
+ def vegetal(nombre, options = {})
89
+ tabla.each_with_index do |s , i|
90
+ if (s.nombre == nombre)
91
+ @ingredientes << tabla[i]
92
+ break
93
+ end
94
+ end
95
+ if (options[:gramos])
96
+ @porciones << options[:gramos]
97
+ else if (options[:porciones])
98
+ dummyString = options[:porciones]
99
+ @porciones << dummyString.scan(/\d+\.\d+/).first.to_f
100
+ end
101
+ end
102
+ end
103
+ #Añade una proteina al plato
104
+ #@param [String] nombre nombre de la fruta
105
+ #@param options cantidad de un alimento
106
+ def proteinas(nombre, options = {})
107
+ tabla.each_with_index do |s , i|
108
+ if (s.nombre == nombre)
109
+ @ingredientes << tabla[i]
110
+ break
111
+ end
112
+ end
113
+ if (options[:gramos])
114
+ @porciones << options[:gramos]
115
+ else if (options[:porciones])
116
+ dummyString = options[:porciones]
117
+ @porciones << dummyString.scan(/\d+\.\d+/).first.to_f
118
+ end
119
+ end
120
+ end
121
+ #Añade un grano al plato al plato
122
+ #@param [String] nombre nombre de la fruta
123
+ #@param options cantidad de un alimento
124
+ def granos_integrales(nombre, options = {})
125
+ tabla.each_with_index do |s , i|
126
+ if (s.nombre == nombre)
127
+ @ingredientes << tabla[i]
128
+ break
129
+ end
130
+ end
131
+ if (options[:gramos])
132
+ @porciones << options[:gramos]
133
+ else if (options[:porciones])
134
+ dummyString = " (#{options[:porciones]})"
135
+ @porciones << dummyString.scan(/\d+\.\d+/).first.to_f
136
+ end
137
+ end
138
+ end
139
+ #Añade una aceite al plato
140
+ #@param [String] nombre nombre de la fruta
141
+ #@param options cantidad de un alimento
142
+ def aceite(nombre, options = {})
143
+ tabla.each_with_index do |s , i|
144
+ if (s.nombre == nombre)
145
+ @ingredientes << tabla[i]
146
+ break
147
+ end
148
+ end
149
+ if (options[:gramos])
150
+ @porciones << options[:gramos]
151
+ else if (options[:porciones])
152
+ dummyString = options[:porciones]
153
+ @porciones << dummyString.scan(/\d+\.\d+/).first.to_f
154
+ end
155
+ end
156
+ end
157
+
158
+ end
@@ -0,0 +1,3 @@
1
+ module Pr06
2
+ VERSION = "0.1.0"
3
+ end
data/lib/pr06.rb ADDED
@@ -0,0 +1,6 @@
1
+ require "pr06/version"
2
+ require "pr06/alimento.rb"
3
+ require "pr06/lista_d.rb"
4
+ module Pr06
5
+ # Your code goes here...
6
+ end
metadata ADDED
@@ -0,0 +1,177 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pr11.2
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Marco Antonio Maestre Mirabal
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2017-12-13 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: coveralls
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
+ description: Practica sobre el Desarrollo Dirigido por Pruebas para la clase Alimento.
112
+ email:
113
+ - alu0100890709@ull.edu.es
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - ".coveralls.yml"
119
+ - ".gitignore"
120
+ - ".rspec"
121
+ - ".travis.yml"
122
+ - Gemfile
123
+ - Guardfile
124
+ - LICENSE.txt
125
+ - README.md
126
+ - Rakefile
127
+ - alimento.gemspec
128
+ - bin/console
129
+ - bin/setup
130
+ - docs/Lista.html
131
+ - docs/Node.html
132
+ - docs/Pr06.html
133
+ - docs/_index.html
134
+ - docs/class_list.html
135
+ - docs/css/common.css
136
+ - docs/css/full_list.css
137
+ - docs/css/style.css
138
+ - docs/file.README.html
139
+ - docs/file_list.html
140
+ - docs/frames.html
141
+ - docs/index.html
142
+ - docs/js/app.js
143
+ - docs/js/full_list.js
144
+ - docs/js/jquery.js
145
+ - docs/method_list.html
146
+ - docs/top-level-namespace.html
147
+ - lib/pr06.rb
148
+ - lib/pr06/alimento.rb
149
+ - lib/pr06/lista_d.rb
150
+ - lib/pr06/plato.rb
151
+ - lib/pr06/version.rb
152
+ homepage: https://github.com/ULL-ESIT-LPP-1718/tdd-alu0100890709
153
+ licenses:
154
+ - MIT
155
+ metadata:
156
+ allowed_push_host: https://rubygems.org
157
+ post_install_message:
158
+ rdoc_options: []
159
+ require_paths:
160
+ - lib
161
+ required_ruby_version: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ required_rubygems_version: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
171
+ requirements: []
172
+ rubyforge_project:
173
+ rubygems_version: 2.5.1
174
+ signing_key:
175
+ specification_version: 4
176
+ summary: 'Práctica de Laboratorio #6. Desarrollo Dirigido por Pruebas (TDD)..'
177
+ test_files: []