practica_alu0100951844 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,110 @@
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
+ &mdash; 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> &raquo;
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
+
86
+
87
+ <strong class="classes">Classes:</strong> <span class='object_link'><a href="Alimentos.html" title="Alimentos (class)">Alimentos</a></span>, <span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span>, <span class='object_link'><a href="Grupo.html" title="Grupo (class)">Grupo</a></span>, <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>
88
+
89
+
90
+ </p>
91
+
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+ </div>
101
+
102
+ <div id="footer">
103
+ Generated on Tue Nov 28 16:16:51 2017 by
104
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
105
+ 0.9.9 (ruby-2.3.0).
106
+ </div>
107
+
108
+ </div>
109
+ </body>
110
+ </html>
@@ -0,0 +1,138 @@
1
+ # @author Yeray Expósito García
2
+ # La clase Alimentos permite almacenar los datos a nivel nutricional de un alimento, hallar su valor energético y compararlos.
3
+ class Alimentos
4
+
5
+ include Comparable
6
+
7
+ attr_reader :nombre, :proteinas, :glucidos, :lipidos
8
+ attr_accessor :datos_IG
9
+
10
+ # Metodo que permite declarar e inicializar las variables de instancia.
11
+ #
12
+ # @param name nombre del alimento
13
+ # @param protein Contiene la cantidad de proteinas del alimento.
14
+ # @param glucids Contiene la cantidad de glúcidos del alimento.
15
+ # @param lipids Contiene la cantidad de lípidos del alimento.
16
+ def initialize(name,protein,glucids,lipids)
17
+ @nombre = name
18
+ @proteinas = protein
19
+ @glucidos = glucids
20
+ @lipidos = lipids
21
+ end
22
+
23
+ # Método para calcular el Área incremental bajo la curva (AIBC) de un alimento o de la glucosa.
24
+ #
25
+ # @return Devuelve un vector con los resultados del AIBC de cada individuo.
26
+ def aibc
27
+
28
+ almacen=Array.new
29
+ datos_IG.each do |x|
30
+ almacen<<[]
31
+ x.each_cons(2){ |val| almacen.last<<((val[1]-x[0]+val[0]-x[0])/2)*5 }
32
+ end
33
+
34
+ almacen.map{ |x| (x.reduce :+).round(2) }
35
+ end
36
+
37
+
38
+ # El método <=> se encarga de poner en práctica los operadores convencionales de comparación ( <, <=, ==, >=, y >) y el método between?
39
+ #
40
+ # @param other Representa al objeto situado a la derecha del operador en una comparación
41
+ # @return Un valor numérico (-1,0,+1) dependiendo de si el receptor es menor, igual o mayor que el otro objeto.
42
+ def <=>(other)
43
+ valor_energetico <=> other.valor_energetico
44
+ end
45
+
46
+ # El método == ofrece una forma específica de aplicar el operador ==
47
+ #
48
+ # @param other Representa al objeto situado a la derecha del operador en una comparación
49
+ def ==(other)
50
+ @nombre == other.nombre
51
+ end
52
+
53
+ # El método to_s se encarga de formatear la salida cuando intentamos visualizar un objeto
54
+ #
55
+ # @return [string] En el que se representan las variables de instancia del objeto.
56
+ def to_s
57
+ "Nombre del alimento: #{@nombre} Proteínas: #{@proteinas}g Glúcidos: #{@glucidos}g Lípidos: #{@lipidos}g"
58
+ end
59
+
60
+ # El método valor_energetico se encarga de calcular el valor energético de un alimento en función de de @proteinas, @glucidos y @lipidos.
61
+ #
62
+ # @return Un valor numérico que representa el valor energético del alimento.
63
+ def valor_energetico
64
+ @glucidos*4 + @lipidos*9 + @proteinas*4
65
+ end
66
+
67
+ end
68
+
69
+ # @author Yeray Expósito García
70
+ # La clase Grupo < Alimentos permite clasificar cada alimento en un grupo determinado.
71
+ class Grupo < Alimentos
72
+
73
+ # Define los getter y setter de las variables de instancia
74
+ # @return [Numeric] El valor de dichas variables de instancia.
75
+ attr_reader :grupo
76
+
77
+ # Metodo que permite declarar e inicializar las variables de instancia.
78
+ def initialize(group,name,protein,glucids,lipids)
79
+ super(name,protein,glucids,lipids)
80
+ @grupo = group
81
+ end
82
+
83
+ # El método to_s se encarga de formatear la salida cuando intentamos visualizar un objeto
84
+ #
85
+ # @return [string] En el que se representan las variables de instancia del objeto.
86
+ def to_s
87
+ "Grupo: #{@grupo} alimento: #{nombre} Proteínas: #{proteinas}g Glúcidos: #{glucidos}g Lípidos: #{lipidos}g"
88
+ end
89
+
90
+ end
91
+
92
+ # Abrimos la clase Array para añadir los métodos de ordenación.
93
+ class Array
94
+
95
+ # metodo que ordena un array mediante bucles for.
96
+ # @return Un nuevo array con los datos ordenados según el valor energético.
97
+ def ordenar_for
98
+ solucion=Array.new
99
+ solucion << self[0]
100
+
101
+ for i in (1..self.length-1)
102
+ for j in (0..solucion.length-1)
103
+ if self[i]<=solucion[j]
104
+ solucion.insert(j,self[i])
105
+ break
106
+ end
107
+
108
+ if j==solucion.length-1
109
+ solucion << self[i]
110
+ end
111
+ end
112
+ end
113
+ solucion
114
+ end
115
+
116
+ # metodo que ordena un array mediante el método each.
117
+ # @return Un nuevo array con los datos ordenados según el valor energético.
118
+ def ordenar_each
119
+ solucion=Array.new
120
+ solucion << self[0]
121
+
122
+ self.drop(1).each do |val_1|
123
+ solucion.each_with_index do |val_2,i|
124
+ if val_1<=val_2
125
+ solucion.insert(i,val_1)
126
+ break
127
+ end
128
+
129
+ if i==solucion.length-1
130
+ solucion << val_1
131
+ break
132
+ end
133
+ end
134
+ end
135
+ solucion
136
+ end
137
+
138
+ end
@@ -0,0 +1,121 @@
1
+ # @author Yeray Expósito García
2
+ # La clase List proporcionar los métodos necesarios para trabajar con una lista doblemente enlazada.
3
+ class List
4
+
5
+ include Enumerable
6
+ attr_reader :tail, :head, :sz
7
+
8
+ # Metodo que permite declarar e inicializar las variables de instancia.
9
+ def initialize
10
+ @tail=nil
11
+ @head=nil
12
+ @sz=0
13
+ end
14
+
15
+ # El método each genera elementos sucesivos de la lista doblemente enlazada.
16
+ # Es necesario para poder emplear los diferentes métodos de recorrido que ofrece Enumerable.
17
+ def each
18
+ var=@head
19
+ for num in (0..@sz-1)
20
+ yield var.value
21
+ var=var.next
22
+ end
23
+ end
24
+
25
+ # El método insert_string! se encarga de introducir (a través del head) una cadena de elementos en la lista doblemente enlazada.
26
+ #
27
+ # @param val_string Representa el vector que contiene la cadena de elementos a insertar
28
+ def insert_string!(val_string)
29
+ for num in (0..val_string.length-1)
30
+ insert_head!(val_string[num])
31
+ end
32
+ end
33
+
34
+ # El método insert_tail! se encarga de introducir un nodo por la cola de la lista doblemente enlazada.
35
+ #
36
+ # @param val Representa el valor que contendrá el nodo a insertar en la cola de la lista doblemente enlazada.
37
+ # @return @sz Variable de instancia que indica el tamaño actual de la lista tras la inserción.
38
+ def insert_tail!(val)
39
+ if(@sz==0)
40
+ @tail=Node.new(val,nil,nil)
41
+ @head= tail
42
+ @sz= @sz+1
43
+ else
44
+ @tail.next=Node.new(val,nil,tail)
45
+ @tail= tail.next
46
+ @sz= @sz+1
47
+ end
48
+ end
49
+
50
+ # El método insert_head! se encarga de introducir un nodo por el head de la lista doblemente enlazada.
51
+ #
52
+ # @param val Representa el valor que contendrá el nodo a insertar en el head de la lista doblemente enlazada.
53
+ # @return @sz Variable de instancia que indica el tamaño actual de la lista tras la inserción.
54
+ def insert_head!(val)
55
+ if(@sz==0)
56
+ @head=Node.new(val,nil,nil)
57
+ @tail= head
58
+ @sz= @sz+1
59
+ else
60
+ @head.prev=Node.new(val,head,nil)
61
+ @head= head.prev
62
+ @sz= @sz+1
63
+ end
64
+ end
65
+
66
+ # El método extract_head! se encarga de extraer el nodo que actualmente está en el head de la lista doblemente enlazada.
67
+ #
68
+ # @return extraer Variable que contiene el nodo que ha sido extraído del head de la lista.
69
+ def extract_head!
70
+ extraer=@head
71
+
72
+ if(sz>0)
73
+ @head= head.next
74
+
75
+ if head.nil?
76
+ @tail=nil
77
+ else
78
+ @head.prev=nil
79
+ end
80
+
81
+ extraer.next=nil
82
+ extraer.prev=nil
83
+ @sz= @sz-1
84
+ end
85
+ extraer
86
+ end
87
+
88
+ # El método extract_tail! se encarga de extraer el nodo que actualmente está en la cola de la lista doblemente enlazada.
89
+ #
90
+ # @return extraer Variable que contiene el nodo que ha sido extraído de la cola de la lista.
91
+ def extract_tail!
92
+ extraer=@tail
93
+
94
+ if(sz>0)
95
+ @tail= tail.prev
96
+
97
+ if tail.nil?
98
+ @head=nil
99
+ else
100
+ @tail.next=nil
101
+ end
102
+
103
+ extraer.next=nil
104
+ extraer.prev=nil
105
+ @sz= @sz-1
106
+ end
107
+ extraer
108
+ end
109
+
110
+ # El método to_s se encarga de formatear la salida cuando intentamos visualizar un objeto
111
+ #
112
+ # @return [string] En el que se representan las variables de instancia del objeto.
113
+ def to_s
114
+ if(sz>0)
115
+ "(size=#{sz} ==> head=#{head.value} tail=#{tail.value})"
116
+ else
117
+ "La lista está vacía."
118
+ end
119
+ end
120
+
121
+ end
@@ -0,0 +1,130 @@
1
+
2
+ class Recipe
3
+
4
+ attr_reader :name, :ingredients, :v_energetico_total
5
+
6
+
7
+ def initialize(name,&block)
8
+
9
+ @@cantidades={"cucharada"=>15,"cucharon"=>40,"taza"=>100,"pieza"=>150}
10
+ @@lista_alimentos=[Alimentos.new("Huevo frito",14.1,0.0,19.5), Alimentos.new("Leche vaca",3.3,4.8,3.2), Alimentos.new("Yogurt",3.8,4.9,3.8), Alimentos.new("Cerdo",21.5,0.0,6.3), Alimentos.new("Ternera",21.1,0.0,3.1), Alimentos.new("Pollo",20.6,0.0,5.6), Alimentos.new("Bacalao",17.7,0.0,0.4), Alimentos.new("Atun",21.5,0.0,15.5), Alimentos.new("Salmon",19.9,0.0,13.6), Alimentos.new("Aceite de oliva",0.0,0.2,99.6), Alimentos.new("Aceite de girasol",0.0,0.9,83.1), Alimentos.new("Mantequilla",0.7,0.0,83.2), Alimentos.new("Chocolate",5.3,47.0,30.0), Alimentos.new("Azucar",0.0,99.8,0.0), Alimentos.new("Arroz",6.8,77.7,0.6), Alimentos.new("Lentejas",23.5,52.0,1.4), Alimentos.new("Papas",2.0,15.4,0.1), Alimentos.new("Tomate",1.0,3.5,0.2), Alimentos.new("Cebolla",1.3,5.8,0.3), Alimentos.new("Calabaza",1.1,4.8,0.1), Alimentos.new("Manzana",0.3,12.4,0.4), Alimentos.new("Platano",1.2,21.4,0.2), Alimentos.new("Pera",0.5,12.7,0.3)]
11
+
12
+ @name = name
13
+ @ingredients=[]
14
+ @v_energetico_total=0;
15
+
16
+ if block_given? #Comprueba si el bloque existe
17
+ if block.arity == 1 #Devuelve la cantidad de argumentos del bloque
18
+ yield self
19
+ else
20
+ instance_eval(&block)
21
+ end
22
+ end
23
+ end
24
+
25
+
26
+ def to_s
27
+ output = @name
28
+ output << "\n#{'=' * @name.size}\n"
29
+ output << "Composición nutricional:\n"
30
+ output << " Glúcidos Proteínas Lípidos Valor energético Cantidad\n"
31
+ output << "#{@ingredients.join("\n")}\n\n"
32
+ output << "valor energético total ==> #{@v_energetico_total}\n\n"
33
+ output
34
+ end
35
+
36
+
37
+ def vegetal(alimento, options = {})
38
+
39
+ food=@@lista_alimentos.find{|x| x.nombre==alimento}
40
+ ingredient = food.nombre
41
+
42
+ sz=23-food.nombre.size
43
+ ingredient << "#{" "*sz}#{food.glucidos}#{" "*9}#{food.proteinas}#{" "*8}#{food.lipidos}#{" "*8}#{food.valor_energetico.round(2)} "
44
+
45
+ if options[:porcion]
46
+ almacen=options[:porcion].split
47
+ ingredient << "#{" "*11}#{almacen[0].to_f*@@cantidades[almacen[1]]} gr"
48
+ end
49
+
50
+ @v_energetico_total+=food.valor_energetico
51
+ @ingredients << ingredient
52
+ ingredient
53
+ end
54
+
55
+
56
+ def fruta(alimento, options = {})
57
+
58
+ food=@@lista_alimentos.find{|x| x.nombre==alimento}
59
+ ingredient = food.nombre
60
+
61
+ sz=23-food.nombre.size
62
+ ingredient << "#{" "*sz}#{food.glucidos}#{" "*9}#{food.proteinas}#{" "*8}#{food.lipidos}#{" "*8}#{food.valor_energetico.round(2)} "
63
+
64
+ if options[:porcion]
65
+ almacen=options[:porcion].split
66
+ ingredient << "#{" "*11}#{almacen[0].to_f*@@cantidades[almacen[1]]} gr"
67
+ end
68
+
69
+ @v_energetico_total+=food.valor_energetico
70
+ @ingredients << ingredient
71
+ ingredient
72
+ end
73
+
74
+
75
+ def cereal(alimento, options = {})
76
+
77
+ food=@@lista_alimentos.find{|x| x.nombre==alimento}
78
+ ingredient = food.nombre
79
+
80
+ sz=23-food.nombre.size
81
+ ingredient << "#{" "*sz}#{food.glucidos}#{" "*9}#{food.proteinas}#{" "*8}#{food.lipidos}#{" "*8}#{food.valor_energetico.round(2)} "
82
+
83
+ if options[:porcion]
84
+ almacen=options[:porcion].split
85
+ ingredient << "#{" "*11}#{almacen[0].to_f*@@cantidades[almacen[1]]} gr"
86
+ end
87
+
88
+ @v_energetico_total+=food.valor_energetico
89
+ @ingredients << ingredient
90
+ ingredient
91
+ end
92
+
93
+
94
+ def proteina(alimento, options = {})
95
+
96
+ food=@@lista_alimentos.find{|x| x.nombre==alimento}
97
+ ingredient = food.nombre
98
+
99
+ sz=23-food.nombre.size
100
+ ingredient << "#{" "*sz}#{food.glucidos}#{" "*9}#{food.proteinas}#{" "*8}#{food.lipidos}#{" "*8}#{food.valor_energetico.round(2)} "
101
+
102
+ if options[:porcion]
103
+ almacen=options[:porcion].split
104
+ ingredient << "#{" "*11}#{almacen[0].to_f*@@cantidades[almacen[1]]} gr"
105
+ end
106
+
107
+ @v_energetico_total+=food.valor_energetico
108
+ @ingredients << ingredient
109
+ ingredient
110
+ end
111
+
112
+
113
+ def aceite(alimento, options = {})
114
+
115
+ food=@@lista_alimentos.find{|x| x.nombre==alimento}
116
+ ingredient = food.nombre
117
+
118
+ sz=23-food.nombre.size
119
+ ingredient << "#{" "*sz}#{food.glucidos}#{" "*9}#{food.proteinas}#{" "*8}#{food.lipidos}#{" "*8}#{food.valor_energetico.round(2)} "
120
+
121
+ if options[:porcion]
122
+ almacen=options[:porcion].split
123
+ ingredient << "#{" "*11}#{almacen[0].to_f*@@cantidades[almacen[1]]} gr"
124
+ end
125
+
126
+ @v_energetico_total+=food.valor_energetico
127
+ @ingredients << ingredient
128
+ ingredient
129
+ end
130
+ end
@@ -0,0 +1,4 @@
1
+
2
+ # @author Yeray Expósito García
3
+ # La clase mutable Node (generada con Struct) representa la estructura básica para la implementación de la lista doblemente enlazada.
4
+ Node = Struct.new(:value, :next, :prev)
@@ -0,0 +1,3 @@
1
+ module Practica6
2
+ VERSION = "0.1.0"
3
+ end
data/lib/practica_6.rb ADDED
@@ -0,0 +1,10 @@
1
+ require 'practica_6/version'
2
+ require 'practica_6/Recipe'
3
+ require 'practica_6/Alimentos'
4
+ require 'practica_6/Lista'
5
+ require 'practica_6/nodo'
6
+
7
+
8
+ module Practica6
9
+ # Your code goes here...
10
+ end
@@ -0,0 +1,43 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "practica_6/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "practica_alu0100951844"
8
+ spec.version = Practica6::VERSION
9
+ spec.authors = ["Yeray Expósito"]
10
+ spec.email = ["alu0100951844@ull.edu.es"]
11
+
12
+ spec.summary = "Practica 6 TDD"
13
+ spec.description = "Practica 6 TDD"
14
+ spec.homepage = "https://github.com/ULL-ESIT-LPP-1718/tdd-alu0100951844.git"
15
+ spec.license = "MIT"
16
+
17
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
19
+ if spec.respond_to?(:metadata)
20
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
21
+ else
22
+ raise "RubyGems 2.0 or newer is required to protect against " \
23
+ "public gem pushes."
24
+ end
25
+
26
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
27
+ f.match(%r{^(test|spec|features)/})
28
+ end
29
+ spec.bindir = "exe"
30
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
+ spec.require_paths = ["lib"]
32
+
33
+ spec.add_development_dependency "bundler", "~> 1.15"
34
+ spec.add_development_dependency "rake", "~> 10.0"
35
+ spec.add_development_dependency "rspec", "~> 3.0"
36
+ spec.add_development_dependency "guard"
37
+ spec.add_development_dependency "guard-rspec"
38
+ spec.add_development_dependency "guard-bundler"
39
+ spec.add_development_dependency "yard"
40
+ spec.add_development_dependency "yard-rspec"
41
+ spec.add_development_dependency "coveralls"
42
+
43
+ end