pr11.2 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.
@@ -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: []