p6-alu0101121529 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/p6/list.rb ADDED
@@ -0,0 +1,85 @@
1
+ require_relative "p6"
2
+
3
+ #Clase Node, contiene el valor, el nodo siguiente y el nodo previo
4
+ #@attr value Valor contenido en el nodo
5
+ #@attr next Nodo siguiente al actual
6
+ #@attr prev nodo previo al actual
7
+
8
+ Node = Struct.new(:value,:next,:prev)
9
+
10
+ #Es una clase que representa una lista doblemente enlazada usando la clase Node
11
+ #@author Guillermo Hernández González
12
+ #@attr_reader head Devuelve el nodo cabeza de la Lista
13
+ #@attr_reader tail Devuelve el nodo cola de la Lista
14
+
15
+ class List
16
+ include Enumerable
17
+ attr_reader :head,:tail
18
+
19
+ # Construye una lista doblemente enlazada tras pasarle dos parámetros, head y tail
20
+
21
+ def initialize(head_,tail_)
22
+ @head = head_
23
+ @tail = tail_
24
+ end
25
+
26
+ # Inserta un nuevo nodo por la cabeza y la cabeza antigua pasa a ser el next
27
+
28
+ def insert_head(value)
29
+ if (head==nil) then
30
+ @head=Node.new(value,nil,nil)
31
+ @tail=@head
32
+ else
33
+ temp=Node.new(value,@head,nil)
34
+ @head.prev=temp
35
+ @head=temp
36
+ end
37
+ end
38
+
39
+ # Extrae el nodo de la cabeza, el nodo siguiente pasa a ser la siguiente cabeza y devuelve el valor de la antigua cabeza.
40
+
41
+ def extract_head
42
+ temp = @head
43
+ @head = @head.next
44
+ @head.prev = nil
45
+ return temp
46
+ end
47
+
48
+ # Devuelve el valor de la cabeza sin extraerla
49
+
50
+ def value_head
51
+ temp = @head
52
+ return temp
53
+ end
54
+
55
+ # Extrae el nodo de la cola, el anterior pasa a ser la nueva cola y luego devuelve el valor de la cola antigua
56
+
57
+ def extract_tail
58
+ if @tail!=nil then
59
+ temp = @tail
60
+ @tail = @tail.prev
61
+ if @tail!=nil then
62
+ @tail.next = nil
63
+ end
64
+ return temp
65
+ end
66
+ end
67
+
68
+ # Devuelve el valor de la cola sin extraerla
69
+
70
+ def value_tail
71
+ temp = @tail
72
+ return temp
73
+ end
74
+
75
+ # Definición del método each necesario para que la clase sea enumerable
76
+
77
+ def each
78
+ node=@head
79
+ while(node!=nil) do
80
+ yield node.value
81
+ node = node.next
82
+ end
83
+ end
84
+
85
+ end
data/lib/p6/menu.rb ADDED
@@ -0,0 +1,105 @@
1
+ require "p6/p6"
2
+ require "p6/list"
3
+ require "p6/basicplato"
4
+
5
+ class PlatoDSL
6
+ attr_accessor :nombre, :ingredientes, :peso
7
+
8
+ def initialize(&block)
9
+ @nombre
10
+ @ingredientes = []
11
+ @peso = []
12
+ if block_given?
13
+ if block.arity == 1
14
+ yield self
15
+ else
16
+ instance_eval(&block)
17
+ end
18
+ end
19
+ end
20
+
21
+ def to_s
22
+ output = @nombre
23
+ output << "\nIngredients:\n\n"
24
+ @ingredientes.zip(@peso).each do |alimento, peso1|
25
+ output << "\n " << alimento
26
+ output << "\n Peso: " << peso1.to_s
27
+ end
28
+ output
29
+ end
30
+
31
+ def alimento(options = {})
32
+ @ingredientes << options[:nombre] if options[:nombre]
33
+ @pesos << options[:peso] if options[:peso]
34
+ end
35
+
36
+ def nombre(name)
37
+ @name=name
38
+ end
39
+ end
40
+
41
+
42
+ class Menu
43
+ attr_reader :nombre,:descripcion,:platos,:precio
44
+ def initialize(nombre,&block)
45
+ @nombre = nombre
46
+ @platos = []
47
+ @precios = []
48
+ @descripcion
49
+ @lipidos
50
+ @proteinas
51
+ @carbohidratos
52
+ @gases
53
+ @terrenos
54
+
55
+ if block_given?
56
+ if block.arity == 1
57
+ yield self
58
+ else
59
+ instance_eval(&block)
60
+ end
61
+ end
62
+ end
63
+
64
+ def descripcion(desc)
65
+ @descripcion = desc
66
+ end
67
+
68
+ def partes(options = {})
69
+ @platos << options[:nombre] if options[:nombre]
70
+ @precios << options[:precio] if options[:precio]
71
+ end
72
+
73
+ def valores_nutricion(options = {})
74
+ @lipidos = options[:lips] if options[:lips]
75
+ @proteinas = options[:prot] if options[:prot]
76
+ @carbohidratos = options[:carbs] if options[:carbs]
77
+ end
78
+
79
+ def valores_ambientales(options = {})
80
+ @gases = options[:gei] if options[:gei]
81
+ @terrenos = options[:terreno] if options[:terreno]
82
+ end
83
+
84
+
85
+ def sum_precio
86
+ sum=0
87
+ @precios.each do |i|
88
+ sum+=i
89
+ end
90
+ return sum
91
+ end
92
+
93
+ def to_s
94
+ resultado = ""
95
+ resultado +="Nombre: #{@nombre} \n"
96
+ resultado +="Descripción: #{@descripcion} \n"
97
+ resultado +="Precio total: #{sum_precio()}€"
98
+ @platos.zip(@precios).each do |plato,precio|
99
+ resultado << "\n" << plato.nombre << " " << precio.to_s() << "€"
100
+ resultado << "\n\nValores sobre la nutrición\n\nProteinas: " << plato.proteinas.to_s() << "\nLipidos: " << plato.lipidos.to_s() << "\nCarbo Hidratos: " << plato.hidratos_carbono.to_s()
101
+ resultado << "\n\nValores sobre la contaminación\n\nGases: " << plato.gei.to_s() << "\nTerrenos " << plato.terrenos.to_s() << "\n"
102
+ end
103
+ return resultado
104
+ end
105
+ end
data/lib/p6/p6.rb ADDED
@@ -0,0 +1,53 @@
1
+ # Clase alimento, contiene toda la información para describir un alimento
2
+ # @author Guillermo Hernández González
3
+ # @attr_reader nombre devuelve el nombre del alimento
4
+ # @attr_reader gases devuelve las emisiones de gases diarias de un alimento
5
+ # @attr_reader terreno devuelve el terreno necesario para cultivar el alimento
6
+ # @attr_reader carbohidratos devuelve la cantidad de carbohidratos del alimento
7
+ # @attr_reader proteinas devuelve la cantidad de proteinas contenidos del alimento
8
+ # @attr_reader lipidos devuelve la cantidad de lipidos contenidos del alimento
9
+ class Alimento
10
+ include Comparable
11
+ attr_reader :nombre,:proteinas,:carbohidratos,:lipidos,:gases,:terreno
12
+ # Crea un alimento tras pasarle una serie de parámetros
13
+ def initialize(n , pro , ch , l , g , te)
14
+ @nombre= n
15
+ @proteinas= pro
16
+ @carbohidratos= ch
17
+ @lipidos= l
18
+ @gases= g
19
+ @terreno = te
20
+ end
21
+
22
+
23
+ # Devuelve cada uno de los parámetros de Alimento como una string
24
+
25
+ def to_string()
26
+ "Nombre: #{@nombre} \n Proteínas: #{@proteinas} \n Carbohidratos: #{@carbohidratos} \n Lípidos: #{@lipidos} \n Gases de efecto invernadero: #{@gases} \n Terreno: #{@terreno} \n"
27
+ end
28
+
29
+ # Calcula el valor energético del alimento
30
+
31
+ def val_ener
32
+ kcal_ch = @carbohidratos*4
33
+ kcal_lip = @lipidos*9
34
+ kcal_pro = @proteinas*4
35
+
36
+ return (kcal_ch + kcal_lip + kcal_pro)
37
+ end
38
+
39
+
40
+ def impac_ambien array
41
+ total = 0
42
+ total = array.sum { |array| array.gases + array.terreno }
43
+ return total
44
+ end
45
+
46
+ def <=>(other)
47
+ val_ener <=> other.val_ener
48
+ end
49
+
50
+
51
+
52
+
53
+ end
data/lib/p6/version.rb ADDED
@@ -0,0 +1,5 @@
1
+ # Módulo generado por defecto
2
+
3
+ module P6
4
+ VERSION = "0.1.0"
5
+ end
data/lib/p6.rb ADDED
@@ -0,0 +1,10 @@
1
+ require "p6/version"
2
+ require "p6/p6"
3
+ require "p6/list"
4
+ require "p6/basicplato"
5
+ require "p6/menu"
6
+ #Módulo p6 generado por defecto en la gema
7
+ module P6
8
+ class Error < StandardError; end
9
+ # Your code goes here...
10
+ end
data/p6.gemspec ADDED
@@ -0,0 +1,34 @@
1
+ lib = File.expand_path("lib", __dir__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require "p6/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "p6-alu0101121529"
7
+ spec.version = P6::VERSION
8
+ spec.authors = ["alu0101121529"]
9
+ spec.email = ["alu0101121529@ull.edu.es"]
10
+
11
+ spec.summary = %q{Práctica 6 Desarrollo dirigido por pruebas (TDD) }
12
+ spec.description = %q{ahora relleno esto}
13
+ spec.homepage = "https://github.com/ULL-ESIT-LPP-1920/tdd-alu0101121529"
14
+ spec.license = "MIT"
15
+
16
+
17
+
18
+ # Specify which files should be added to the gem when it is released.
19
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
20
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
21
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
22
+ end
23
+ spec.bindir = "exe"
24
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
+ spec.require_paths = ["lib/p6/p6.rb"]
26
+
27
+ spec.add_development_dependency "bundler", "~> 2.0"
28
+ spec.add_development_dependency "rake", "~> 10.0"
29
+ spec.add_development_dependency "rspec", "~> 3.0"
30
+
31
+ spec.add_development_dependency "guard"
32
+ spec.add_development_dependency "guard-rspec"
33
+ spec.add_development_dependency "guard-bundler"
34
+ end
metadata ADDED
@@ -0,0 +1,169 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: p6-alu0101121529
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - alu0101121529
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2020-01-09 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: '2.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
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
+ description: ahora relleno esto
98
+ email:
99
+ - alu0101121529@ull.edu.es
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - ".coveralls.yml"
105
+ - ".gitignore"
106
+ - ".rspec"
107
+ - ".travis.yml"
108
+ - CODE_OF_CONDUCT.md
109
+ - Gemfile
110
+ - Gemfile.lock
111
+ - Guardfile
112
+ - LICENSE.txt
113
+ - README.md
114
+ - Rakefile
115
+ - bin/console
116
+ - bin/setup
117
+ - doc/Alimento.html
118
+ - doc/BasicPlato.html
119
+ - doc/List.html
120
+ - doc/Node.html
121
+ - doc/P6.html
122
+ - doc/P6/Error.html
123
+ - doc/Plato.html
124
+ - doc/_index.html
125
+ - doc/class_list.html
126
+ - doc/css/common.css
127
+ - doc/css/full_list.css
128
+ - doc/css/style.css
129
+ - doc/file.README.html
130
+ - doc/file_list.html
131
+ - doc/frames.html
132
+ - doc/index.html
133
+ - doc/js/app.js
134
+ - doc/js/full_list.js
135
+ - doc/js/jquery.js
136
+ - doc/method_list.html
137
+ - doc/top-level-namespace.html
138
+ - lib/p6.rb
139
+ - lib/p6/basicplato.rb
140
+ - lib/p6/list.rb
141
+ - lib/p6/menu.rb
142
+ - lib/p6/p6.rb
143
+ - lib/p6/version.rb
144
+ - p6.gemspec
145
+ homepage: https://github.com/ULL-ESIT-LPP-1920/tdd-alu0101121529
146
+ licenses:
147
+ - MIT
148
+ metadata: {}
149
+ post_install_message:
150
+ rdoc_options: []
151
+ require_paths:
152
+ - lib/p6/p6.rb
153
+ required_ruby_version: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ required_rubygems_version: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ version: '0'
163
+ requirements: []
164
+ rubyforge_project:
165
+ rubygems_version: 2.7.6
166
+ signing_key:
167
+ specification_version: 4
168
+ summary: Práctica 6 Desarrollo dirigido por pruebas (TDD)
169
+ test_files: []