alimento-alu0100889635 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 3552792038ebd7fc10faf2439ffbaa01f6ab9046621dfc21e4455fd92f0c892d
4
+ data.tar.gz: 461303bda42bb8c10f8b50d3c0b1eb558e603d9964b00416ef11457032d539f3
5
+ SHA512:
6
+ metadata.gz: 9a8745f6f4fe34f241094d42d67716aa446796f7d9ede6b0fe98d5b58d31ab5fe647fc95651de075d392d17bb951893042078382ddfd6d853df9e3059cdb6981
7
+ data.tar.gz: 14c45b47d07f11004a0837306db2f53d5d7c1f3fe31dc3b5010520111a9b71915d30d00f908e97006de7a22dfc9d738ada4bfdaa54a435bfb84b4d0ffbd06675
@@ -0,0 +1 @@
1
+ repo_token: R6zcVxZJrPqLODKNxk9Hmf4kn7kJG29CI
@@ -0,0 +1,13 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ # rspec failure tracking
11
+ .rspec_status
12
+ *.*~
13
+ *.lock
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
@@ -0,0 +1,7 @@
1
+ ---
2
+ sudo: false
3
+ language: ruby
4
+ cache: bundler
5
+ rvm:
6
+ - 2.5.1
7
+ before_install: gem install bundler -v 2.0.2
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in alimento.gemspec
4
+ gemspec
5
+ gem 'coveralls', require: false
@@ -0,0 +1,82 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ ## Uncomment and set this to only include directories you want to watch
5
+ # directories %w(app lib config test spec features) \
6
+ # .select{|d| Dir.exist?(d) ? d : UI.warning("Directory #{d} does not exist")}
7
+
8
+ ## Note: if you are using the `directories` clause above and you are not
9
+ ## watching the project directory ('.'), then you will want to move
10
+ ## the Guardfile to a watched dir and symlink it back, e.g.
11
+ #
12
+ # $ mkdir config
13
+ # $ mv Guardfile config/
14
+ # $ ln -s config/Guardfile .
15
+ #
16
+ # and, you'll have to watch "config/Guardfile" instead of "Guardfile"
17
+
18
+ guard :bundler do
19
+ require 'guard/bundler'
20
+ require 'guard/bundler/verify'
21
+ helper = Guard::Bundler::Verify.new
22
+
23
+ files = ['Gemfile']
24
+ files += Dir['*.gemspec'] if files.any? { |f| helper.uses_gemspec?(f) }
25
+
26
+ # Assume files are symlinked from somewhere
27
+ files.each { |file| watch(helper.real_path(file)) }
28
+ end
29
+
30
+ # Note: The cmd option is now required due to the increasing number of ways
31
+ # rspec may be run, below are examples of the most common uses.
32
+ # * bundler: 'bundle exec rspec'
33
+ # * bundler binstubs: 'bin/rspec'
34
+ # * spring: 'bin/rspec' (This will use spring if running and you have
35
+ # installed the spring binstubs per the docs)
36
+ # * zeus: 'zeus rspec' (requires the server to be started separately)
37
+ # * 'just' rspec: 'rspec'
38
+
39
+ guard :rspec, cmd: "bundle exec rspec" do
40
+ require "guard/rspec/dsl"
41
+ dsl = Guard::RSpec::Dsl.new(self)
42
+
43
+ # Feel free to open issues for suggestions and improvements
44
+
45
+ # RSpec files
46
+ rspec = dsl.rspec
47
+ watch(rspec.spec_helper) { rspec.spec_dir }
48
+ watch(rspec.spec_support) { rspec.spec_dir }
49
+ watch(rspec.spec_files)
50
+
51
+ # Ruby files
52
+ ruby = dsl.ruby
53
+ dsl.watch_spec_files_for(ruby.lib_files)
54
+
55
+ # Rails files
56
+ rails = dsl.rails(view_extensions: %w(erb haml slim))
57
+ dsl.watch_spec_files_for(rails.app_files)
58
+ dsl.watch_spec_files_for(rails.views)
59
+
60
+ watch(rails.controllers) do |m|
61
+ [
62
+ rspec.spec.call("routing/#{m[1]}_routing"),
63
+ rspec.spec.call("controllers/#{m[1]}_controller"),
64
+ rspec.spec.call("acceptance/#{m[1]}")
65
+ ]
66
+ end
67
+
68
+ # Rails config changes
69
+ watch(rails.spec_helper) { rspec.spec_dir }
70
+ watch(rails.routes) { "#{rspec.spec_dir}/routing" }
71
+ watch(rails.app_controller) { "#{rspec.spec_dir}/controllers" }
72
+
73
+ # Capybara features specs
74
+ watch(rails.view_dirs) { |m| rspec.spec.call("features/#{m[1]}") }
75
+ watch(rails.layouts) { |m| rspec.spec.call("features/#{m[1]}") }
76
+
77
+ # Turnip features and steps
78
+ watch(%r{^spec/acceptance/(.+)\.feature$})
79
+ watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) do |m|
80
+ Dir[File.join("**/#{m[1]}.feature")][0] || "spec/acceptance"
81
+ end
82
+ end
@@ -0,0 +1,33 @@
1
+ # Alimento
2
+
3
+ Esta gema contiene los archivos con la implementación de la práctica 6 de la asignatura de Lenguajes y Paradigmas de Programación.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'alimento'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install alimento
20
+
21
+ ## Usage
22
+
23
+ TODO: Write usage instructions here
24
+
25
+ ## Development
26
+
27
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
28
+
29
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
30
+
31
+ ## Contributing
32
+
33
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/alimento.
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,37 @@
1
+ lib = File.expand_path("lib", __dir__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require "alimento/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "alimento-alu0100889635"
7
+ spec.version = Alimento::VERSION
8
+ spec.authors = ["Alba Cruz Torres"]
9
+ spec.email = ["alu0100889635@ull.edu.es"]
10
+
11
+ spec.summary = %q{Clase Alimento.}
12
+ spec.description = %q{Esta gema contiene los archivos con la implementación de las prácticas de la asignatura de Lenguajes y Paradigmas de Programación.}
13
+ spec.homepage = "https://github.com/ULL-ESIT-LPP-1920/tdd-alu0100889635"
14
+
15
+ spec.metadata["allowed_push_host"] = "http://mygemserver.com"
16
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
17
+
18
+ spec.metadata["homepage_uri"] = spec.homepage
19
+ spec.metadata["source_code_uri"] = "https://github.com/ULL-ESIT-LPP-1920/tdd-alu0100889635"
20
+ spec.metadata["changelog_uri"] = "https://github.com/ULL-ESIT-LPP-1920/tdd-alu0100889635"
21
+
22
+ # Specify which files should be added to the gem when it is released.
23
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
24
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
25
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
26
+ end
27
+ spec.bindir = "exe"
28
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
29
+ spec.require_paths = ["lib"]
30
+
31
+ spec.add_development_dependency "bundler", "~> 2.0"
32
+ spec.add_development_dependency "rake", "~> 10.0"
33
+ spec.add_development_dependency "rspec", "~> 3.0"
34
+ spec.add_development_dependency "guard"
35
+ spec.add_development_dependency "guard-rspec"
36
+ spec.add_development_dependency "guard-bundler"
37
+ end
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "alimento"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,163 @@
1
+ class Food
2
+
3
+ include Comparable
4
+ attr :eficiencia_energetica
5
+
6
+ # Devuelve el valor del atributo
7
+ #
8
+ attr_accessor :name, :proteins, :carbohydrates, :lipids, :gei, :ground, :amount
9
+
10
+ # Se redefine la comparación para que se realice en base a la eficiencia energética
11
+ #
12
+ # @param other [Food] tipo del parámetro
13
+ # @return [Boolean] verdadero o falso si se cumple la condición o no.
14
+ def <=>(other)
15
+ @eficiencia_energetica <=> other.eficiencia_energetica
16
+ end
17
+
18
+ # Inicializa el objeto de la clase Food
19
+ #
20
+ # @param name [String] nombre del alimento
21
+ # @param proteins [Float] cantidad de proteínas
22
+ # @param carbohydrates [Float] cantidad de carbohidratos
23
+ # @param lipids [Float] cantidad de lípidos
24
+ # @param gei [Float] cantidad de gases de efecto invernadero
25
+ # @param ground [Float] cantidad de uso del terreno
26
+ # @param amount [Float] cantidad de alimento
27
+ def initialize(name, proteins, carbohydrates, lipids, gei, ground, amount)
28
+ @name = name
29
+ @proteins = ((amount * proteins)/100).ceil(2)
30
+ @carbohydrates = ((amount * carbohydrates)/100).ceil(2)
31
+ @lipids = ((amount * lipids)/100).ceil(2)
32
+ @gei = ((amount * gei)/1000).ceil(2)
33
+ @ground = ((amount * ground)/1000).ceil(2)
34
+ @amount = amount
35
+ @eficiencia_energetica = get_eficiencia_energetica
36
+ end
37
+
38
+ # Devuelve el nombre del alimento
39
+ #
40
+ # @return [String] nombre del alimento
41
+ def get_name
42
+ @name
43
+ end
44
+
45
+ # Devuelve la cantidad de proteínas del alimento
46
+ #
47
+ # @return [Float] cantidad de proteínas
48
+ def get_proteins
49
+ @proteins
50
+ end
51
+
52
+ # Devuelve la cantidad de carbohidratos del alimento
53
+ #
54
+ # @return [Float] cantidad de carbohidratos
55
+ def get_carbohydrates
56
+ @carbohydrates
57
+ end
58
+
59
+ # Devuelve la cantidad de lípidos del alimento
60
+ #
61
+ # @return [Float] cantidad de lípidos
62
+ def get_lipids
63
+ @lipids
64
+ end
65
+
66
+ # Devuelve la cantidad de gases de efecto invernadero que genera el alimento. Se toman como si fuera la emisión de carbono que se genera, es decir, en kgCO2eq
67
+ #
68
+ # @return [Float] cantidad de gases de efecto invernadero
69
+ def get_gei
70
+ @gei
71
+ end
72
+
73
+ # Devuelve la cantidad de uso del terreno para generar el alimento.
74
+ #
75
+ # @return [Float] cantidad de uso del terreno
76
+ def get_ground
77
+ @ground
78
+ end
79
+
80
+ # Devuelve la cantidad de alimento
81
+ #
82
+ # @return [Float] cantidad de alimento
83
+ def get_amount
84
+ @amount
85
+ end
86
+
87
+ # Devuelve la cantidad de kcal que aporta el alimento
88
+ #
89
+ # @return [Float] cantidad de kcal
90
+ def get_kcal
91
+ kcal = calculate_kcal
92
+ end
93
+
94
+ # Calcula la cantidad de kcal que produce el alimento
95
+ #
96
+ # @return [Float] cantidad de kcal
97
+ def calculate_kcal
98
+ kcal = 0.0
99
+ kcal += (@lipids * 9) + (@carbohydrates * 4) + (@proteins * 4)
100
+ kcal.ceil(2)
101
+ end
102
+
103
+ # Devuelve la cantidad de kcal generadas por m² del alimento
104
+ #
105
+ # @return [Float] cantidad de kcal
106
+ def get_kcal_ground
107
+ #Se calculan las kcal generadas por m²
108
+ kcal = calculate_kcal_ground
109
+ end
110
+
111
+ # Calcula las kcal que produce el alimento por m² utilizado (kcal/m²) mediante la siguiente regla de tres:
112
+ # uso de terreno m² -----> kcal que produce el alimento
113
+ # 1m² -----> ?kcal/m²
114
+ #
115
+ # @return [Float] cantidad de kcal/m²
116
+ def calculate_kcal_ground
117
+ kcal = 0.0
118
+ kcal += (@lipids * 9) + (@carbohydrates * 4) + (@proteins * 4)
119
+ kcal = kcal/@ground
120
+ kcal.ceil(2)
121
+ end
122
+
123
+ #Se calculan los gases de efecto invernadero generados por kcal. Se utilizan las siguientes reglas de tres:
124
+ # 1 kgCO2eq ---> 3.353 kWh
125
+ # 1 kWh ---> 3600 kJ
126
+ # 1 kJ ---> 0,239006 kcal
127
+ #
128
+ #@return [Float] cantidad de gases de efecto invernadero por kcal
129
+ def get_gei_kcal
130
+ geikcal = @gei * 3.353
131
+ geikcal = geikcal * 3600
132
+ geikcal = geikcal * 0.239006
133
+ geikcal.ceil(2)
134
+ end
135
+
136
+ #Se calculan los gases de efecto invernadero generados por kcal por m². Se utiliza la equivalencia siguiente:
137
+ #kJ/m² ---> kcal/m²
138
+ #
139
+ #@return [Float] cantidad de gases de efecto invernadero por kcal
140
+ def get_gei_ground
141
+ geikcal = get_gei_kcal
142
+ geikcalground = geikcal / @ground #(kcal/m²)
143
+ geikcalground.ceil(2)
144
+ end
145
+
146
+ #Se calcula la eficiencia energética del alimento mediante las kcal generadas y los gases de efecto invernadero por metro² necesarios para generar dichas kcal
147
+ #
148
+ #@return [Float] ceficiencia energética
149
+ def get_eficiencia_energetica
150
+ eficiencia = 0.0
151
+ kcal = calculate_kcal_ground #devuelve las calorias producidas por m² (kcal/m)²
152
+ geikcalground = get_gei_ground #devuelve la energia necesaria para producir esas calorias por m² ( kcal/m)²
153
+ eficiencia = kcal/geikcalground #Se calcula la energia necesaria para producir la cantidad de alimento indicada habiendo calculado sus kcal
154
+ eficiencia.ceil(2)
155
+ end
156
+
157
+ #Devuelve el alimento formateado con toda su información alimentaria
158
+ #
159
+ #@return [String] alimento formateado
160
+ def to_s
161
+ "\n#{@amount}g de #{@name} -> Proteínas #{@proteins}g, Carbohidratos #{@carbohydrates}g, Lípidos #{@lipids}g, Gases de efecto invernadero #{@gei} kgCO2eq, Uso del terreno #{@ground} m²"
162
+ end
163
+ end
@@ -0,0 +1,3 @@
1
+ module Alimento
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,157 @@
1
+ require 'alimento'
2
+ Node = Struct.new(:value, :next, :prev)
3
+
4
+ class Lista
5
+
6
+ include Enumerable
7
+
8
+ # Recorre los elementos de una lista y ejecuta acciones sobre el valor del elemento evaluado en ese momento
9
+ #
10
+ def each
11
+ aux = @head
12
+ while (aux != nil) do
13
+ yield aux["value"]
14
+ aux = aux["next"]
15
+ end
16
+ end
17
+
18
+ $eficiencia_diaria, $eficiencia_anual = 0.0, 0.0
19
+
20
+ # Devuelve el valor del atributo
21
+ #
22
+ attr_accessor :head, :tail, :size
23
+
24
+ # Inicializa el objeto de la clase Lista
25
+ #
26
+ #
27
+ def initialize
28
+ @head = nil
29
+ @tail = nil
30
+ @size = 0
31
+ end
32
+
33
+ # Inserta un nodo en la lista
34
+ #
35
+ # @param aliment [Node] nodo que contiene el alimento
36
+ def insert_one(aliment)
37
+ node = Node.new(aliment, nil, nil)
38
+ if(empty)
39
+ @head = node
40
+ @tail = node
41
+ else
42
+ node["prev"] = @tail
43
+ @tail["next"] = node
44
+ @tail = node
45
+ end
46
+ @size += 1
47
+ end
48
+
49
+ # Inserta más de un nodo en la lista
50
+ #
51
+ # @param arrayaliment [Array] array que contiene los alimentos a insertar
52
+ def insert_many(arrayaliments)
53
+
54
+ arrayaliments.each do | aliment |
55
+ insert_one(aliment)
56
+ end
57
+ end
58
+
59
+ # Devuelve el nodo head de la lista
60
+ #
61
+ # @return [Node] nodo head
62
+ def extract_head
63
+ if(!empty)
64
+ aux = @head
65
+ @head = @head["next"]
66
+
67
+ if(@head != nil)
68
+ @head["prev"] = nil
69
+ else
70
+ @tail = nil
71
+ end
72
+
73
+ @size -= 1
74
+ aux["next"] = nil
75
+ aux["value"]
76
+
77
+ else
78
+ empty_to_s
79
+ end
80
+
81
+ end
82
+
83
+ # Devuelve el nodo tail de la lista
84
+ #
85
+ # @return [Node] nodo tail
86
+ def extract_tail
87
+ if(!empty)
88
+ aux = @tail
89
+ @tail = @tail["prev"]
90
+
91
+ if(@tail != nil)
92
+ @tail["next"] = nil
93
+ else
94
+ @head = nil
95
+ end
96
+
97
+ @size -= 1
98
+ aux["prev"] = nil
99
+ aux["value"]
100
+ else
101
+ empty_to_s
102
+
103
+ end
104
+
105
+ end
106
+
107
+ # Comprueba si la lista está vacía y devuelve verdadero o falso
108
+ #
109
+ # @return [Boolean] estado de la lista
110
+ def empty
111
+ if((@head == nil) && (@tail == nil) && (@size == 0))
112
+ true
113
+ else
114
+ false
115
+ end
116
+ end
117
+
118
+ # Devuelve un mensaje cuando la lista está vacía
119
+ #
120
+ # @return [String] mensaje lista vacía
121
+ def empty_to_s
122
+ "La lista está vacía y, por tanto, no es posible extraer más nodos"
123
+ end
124
+
125
+ # Calcula la eficiencia diaria de los alimentos de la lista
126
+ #
127
+ # @return [Float] valor eficiencia diaria
128
+ def calculate_eficiencia_diaria
129
+ aux = @head
130
+ while (aux != nil) do
131
+ $eficiencia_diaria += aux["value"].get_eficiencia_energetica
132
+ aux = aux["next"]
133
+ end
134
+ $eficiencia_diaria = $eficiencia_diaria.ceil(2)
135
+
136
+ end
137
+
138
+ # Devuelve la eficiencia diaria de los alimentos de la lista
139
+ #
140
+ # @return [Float] valor eficiencia diaria
141
+ def get_eficiencia_diaria
142
+ calculate_eficiencia_diaria
143
+ end
144
+
145
+ # Calcula y devuelve la eficiencia anual de los alimentos de la lista
146
+ #
147
+ # @return [Float] valor eficiencia anual
148
+ def get_eficiencia_anual
149
+ if $eficiencia_diaria == 0.0
150
+ $eficiencia_anual = get_eficiencia_diaria * 365
151
+ else
152
+ $eficiencia_anual = $eficiencia_diaria * 365
153
+ end
154
+ $eficiencia_anual = $eficiencia_anual.ceil(2)
155
+ end
156
+
157
+ end
@@ -0,0 +1,44 @@
1
+ require 'platodsl'
2
+ class Menudsl
3
+
4
+ attr_accessor :nombre, :platos, :desc, :precios
5
+
6
+ def initialize(nombre, &block)
7
+ @nombre = nombre
8
+ @desc = ""
9
+ @platos = []
10
+ @precios = []
11
+
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 descripcion(nombre)
22
+ @desc = nombre
23
+ end
24
+
25
+ def plato(plate)
26
+ @platos << plate
27
+ end
28
+
29
+ def precio(price)
30
+ @precios << price
31
+ end
32
+
33
+ def to_s
34
+ output = "\n\n#{@nombre}"
35
+ output << "\n#{'=' * @nombre.size}\n\n"
36
+ output << "#{@desc}\n\n"
37
+ output << "Platos: \n"
38
+ @platos.each_with_index do |plato, index|
39
+ output << "#{plato}Precio: #{@precios.at(index)} €\n\n"
40
+ end
41
+ output
42
+ end
43
+
44
+ end
@@ -0,0 +1,74 @@
1
+ require 'lista'
2
+ class Plato
3
+
4
+ include Comparable
5
+
6
+ # Se redefine la comparación para que se realice en base al valor calórico total
7
+ #
8
+ # @param other [Plato] tipo del parámetro
9
+ # @return [Boolean] verdadero o falso si se cumple la condición o no.
10
+ def <=>(other)
11
+ @vct <=> other.vct
12
+ end
13
+
14
+ # Devuelve el valor del atributo
15
+ #
16
+ attr_accessor :contenido, :nombre, :proteinas, :carbohidratos, :lipidos, :vct
17
+
18
+ # Inicializa el objeto de la clase Plato
19
+ #
20
+ # @param arraycontent [Array] array con los alimentos del plato
21
+ # @param nombre [String] nombre del plato
22
+ def initialize(arraycontent, nombre)
23
+ @contenido = Lista.new()
24
+ @nombre = nombre
25
+ @proteinas = 0.0
26
+ @carbohidratos = 0.0
27
+ @lipidos = 0.0
28
+ @cantidadtotal = 0.0
29
+ @vct = 0.0
30
+ arraycontent.each do | alimento |
31
+ @contenido.insert_one(alimento)
32
+ @proteinas += alimento.proteins
33
+ @carbohidratos += alimento.carbohydrates
34
+ @lipidos += alimento.lipids
35
+ @cantidadtotal += alimento.amount
36
+ @vct += alimento.get_kcal
37
+ end
38
+ end
39
+
40
+ # Calcula y devuelve la cantidad de proteínas del plato
41
+ #
42
+ # @return [Float] cantidad de proteínas
43
+ def get_proteinas
44
+ porcentaje = (@proteinas * 100)/@cantidadtotal
45
+ porcentaje.ceil(2)
46
+ end
47
+
48
+ # Calcula y devuelve la cantidad de carbohidratos del plato
49
+ #
50
+ # @return [Float] cantidad de carbohidratos
51
+ def get_carbohidratos
52
+ porcentaje = (@carbohidratos * 100)/@cantidadtotal
53
+ porcentaje.ceil(2)
54
+ end
55
+
56
+ # Calcula y devuelve la cantidad de lípidos del plato
57
+ #
58
+ # @return [Float] cantidad de lípidos
59
+ def get_lipidos
60
+ porcentaje = (@lipidos * 100)/@cantidadtotal
61
+ porcentaje.ceil(2)
62
+ end
63
+
64
+ # Devuelve el plato formateado con su información
65
+ #
66
+ # @return [String] plato formateado
67
+ def to_s
68
+ aux = "#{@nombre}: "
69
+ @contenido.each do |alimento|
70
+ aux.concat("#{alimento.name} #{alimento.amount}g ")
71
+ end
72
+ aux.concat(".")
73
+ end
74
+ end
@@ -0,0 +1,28 @@
1
+ class Platodsl
2
+
3
+ attr_accessor :nombre, :alimentos
4
+
5
+ def initialize(nombre, &block)
6
+ @nombre = nombre
7
+ @alimentos = []
8
+
9
+ if block_given?
10
+ if block.arity == 1
11
+ yield self
12
+ else
13
+ instance_eval(&block)
14
+ end
15
+ end
16
+ end
17
+
18
+ def alimento(aliment)
19
+ @alimentos << aliment
20
+ end
21
+
22
+ def to_s
23
+ output = "\n\n#{@nombre}"
24
+ output << "\n#{'=' * @nombre.size}\n\n"
25
+ output << "Alimentos: \n#{@alimentos.join(', ')}\n\n"
26
+ output
27
+ end
28
+ end
@@ -0,0 +1,109 @@
1
+ require 'plato'
2
+
3
+ class Platoefi < Plato
4
+
5
+ # def <=>(other)
6
+ # @eficiencia <=> other.eficiencia
7
+ # end
8
+
9
+ # Se redefine la comparación para que se realice en base a la huella nutricional
10
+ #
11
+ # @param other [Plato] tipo del parámetro
12
+ # @return [Boolean] verdadero o falso si se cumple la condición o no.
13
+ def <=>(other)
14
+ huella_nutricional <=> other.huella_nutricional
15
+ end
16
+
17
+ # Devuelve el valor del atributo
18
+ #
19
+ attr_accessor :gei, :usoterreno, :eficiencia
20
+
21
+ # Inicializa el objeto de la clase Platoefi
22
+ #
23
+ # @param arraycontent [Array] array con los alimentos del plato
24
+ # @param nombre [String] nombre del plato
25
+ def initialize(arraycontent, nombre)
26
+ super
27
+ @gei = get_gei
28
+ @usoterreno = get_usoterreno
29
+ @eficiencia = get_eficiencia_energetica
30
+ end
31
+
32
+ def to_s
33
+ output = @nombre
34
+ output << "\n#{'=' * @name.size}\n\n"
35
+ output << "Alimento: #{@alimentos.join(', ')}\n\n"
36
+ output
37
+ end
38
+ # Calcula y devuelve la cantidad de gases de efecto invernadero del plato
39
+ #
40
+ # @return [Float] gases de efecto invernadero
41
+ def get_gei
42
+ aux = 0.0
43
+ @contenido.each do |alimento|
44
+ aux += alimento.gei
45
+ end
46
+ @gei = aux
47
+ end
48
+
49
+ # Calcula y devuelve la cantidad de uso del terreno del plato
50
+ #
51
+ # @return [Float] uso del terreno
52
+ def get_usoterreno
53
+ aux = 0.0
54
+ @contenido.each do |alimento|
55
+ aux += alimento.ground
56
+ end
57
+ @usoterreno = aux
58
+ end
59
+
60
+ # Calcula y devuelve la eficiencia energética del plato
61
+ #
62
+ # @return [Float] eficiencia energética
63
+ def get_eficiencia_energetica
64
+ aux = 0.0
65
+ @contenido.each do |alimento|
66
+ aux += alimento.eficiencia_energetica
67
+ end
68
+ @eficiencia = aux
69
+ end
70
+
71
+ # Calcula y devuelve la huella nutricional del plato
72
+ #
73
+ # @return [Float] huella nutricional
74
+ def huella_nutricional
75
+ ((get_impacto_energia + get_impacto_gei)/2).ceil(2)
76
+ end
77
+
78
+ # Calcula y devuelve el índice de impacto de la energía
79
+ #
80
+ # @return [Float] índice de impacto de energía
81
+ def get_impacto_energia
82
+ ip_energia = 0.0
83
+ case
84
+ when @vct < 670
85
+ ip_energia = 1.0
86
+ when @vct <= 830
87
+ ip_energia = 2.0
88
+ else
89
+ ip_energia = 3.0
90
+ end
91
+ ip_energia
92
+ end
93
+
94
+ # Calcula y devuelve el índice de impacto de huella de carbono
95
+ #
96
+ # @return [Float] índice de impacto carbono
97
+ def get_impacto_gei
98
+ ip_carbono = 0.0
99
+ case
100
+ when @gei < 800
101
+ ip_carbono = 1.0
102
+ when @gei <= 1200
103
+ ip_carbono = 2.0
104
+ else
105
+ ip_carbono = 3.0
106
+ end
107
+ ip_carbono
108
+ end
109
+ end
metadata ADDED
@@ -0,0 +1,150 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: alimento-alu0100889635
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Alba Cruz Torres
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2020-01-10 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: Esta gema contiene los archivos con la implementación de las prácticas
98
+ de la asignatura de Lenguajes y Paradigmas de Programación.
99
+ email:
100
+ - alu0100889635@ull.edu.es
101
+ executables: []
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - ".coveralls.yml"
106
+ - ".gitignore"
107
+ - ".rspec"
108
+ - ".travis.yml"
109
+ - Gemfile
110
+ - Gemfile.lock
111
+ - Guardfile
112
+ - README.md
113
+ - Rakefile
114
+ - alimento.gemspec
115
+ - bin/console
116
+ - bin/setup
117
+ - lib/alimento.rb
118
+ - lib/alimento/version.rb
119
+ - lib/lista.rb
120
+ - lib/menudsl.rb
121
+ - lib/plato.rb
122
+ - lib/platodsl.rb
123
+ - lib/platoefi.rb
124
+ homepage: https://github.com/ULL-ESIT-LPP-1920/tdd-alu0100889635
125
+ licenses: []
126
+ metadata:
127
+ allowed_push_host: https://rubygems.org
128
+ homepage_uri: https://github.com/ULL-ESIT-LPP-1920/tdd-alu0100889635
129
+ source_code_uri: https://github.com/ULL-ESIT-LPP-1920/tdd-alu0100889635
130
+ changelog_uri: https://github.com/ULL-ESIT-LPP-1920/tdd-alu0100889635
131
+ post_install_message:
132
+ rdoc_options: []
133
+ require_paths:
134
+ - lib
135
+ required_ruby_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ required_rubygems_version: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ requirements: []
146
+ rubygems_version: 3.1.2
147
+ signing_key:
148
+ specification_version: 4
149
+ summary: Clase Alimento.
150
+ test_files: []