gemaalu0100889871 0.1.2
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.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/Gemfile +4 -0
- data/Guardfile +82 -0
- data/README.md +9 -0
- data/Rakefile +32 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/gema.gemspec +38 -0
- data/lib/gema.rb +5 -0
- data/lib/gema/dieta.rb +132 -0
- data/lib/gema/dietadsl.rb +150 -0
- data/lib/gema/lista.rb +70 -0
- data/lib/gema/listadll.rb +130 -0
- data/lib/gema/version.rb +5 -0
- metadata +146 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 6c9cc93785b9d097e2ba38cd29169d6a53be315c
|
4
|
+
data.tar.gz: f36b0efc210b95d03cf7dd43b9a58699c051b756
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1379eb14747f22dc7d4693fb471ec7211bd312c072a51470cd67fa54d931514ab228fd4c19c02cf8d969691ed6cc2042199ffe40a2f287d54a8b25b3942deba5
|
7
|
+
data.tar.gz: '03240228af5ca7028abed222095813739687c0efcd30ae905b5bead6b70215a45e4ae3981f7683c14ecfc9f3a1ec788fa201173676cd10cb4446330cb862307c'
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
@@ -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.exists?(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
|
data/README.md
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
#TDD DSL para menús dietéticos
|
2
|
+
================
|
3
|
+
|
4
|
+
Desarrollo Dirigido por Pruebas para representar Menús dietéticos.
|
5
|
+
* Ejemplos con distintas decripciones y expectativas
|
6
|
+
* Ejemplo de organización de distintos directorios
|
7
|
+
* Ejemplo de Rakefile
|
8
|
+
|
9
|
+
Victoria Quintana Martí
|
data/Rakefile
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require "rspec/core/rake_task"
|
3
|
+
|
4
|
+
|
5
|
+
task :default => :spec
|
6
|
+
|
7
|
+
desc "Ejecutar las espectativas de la clase Dieta"
|
8
|
+
task :spec do
|
9
|
+
sh "rspec -I. spec/dieta_spec.rb"
|
10
|
+
end
|
11
|
+
desc "Ejecutar las espectativas de la clase Lista"
|
12
|
+
task :spec do
|
13
|
+
sh "rspec -I. spec/lista_spec.rb"
|
14
|
+
end
|
15
|
+
desc "Ejecutar las espectativas de la clase Lista doblemente enlazada"
|
16
|
+
task :spec do
|
17
|
+
sh "rspec -I. spec/listadll_spec.rb"
|
18
|
+
end
|
19
|
+
desc "Ejecutar las espectativas para que los menús sean comparables y enumerables"
|
20
|
+
task :spec do
|
21
|
+
sh "rspec -I. spec/comp_y_enum_spec.rb"
|
22
|
+
end
|
23
|
+
desc "Ejecutar las espectativas de la clase Dietadsl"
|
24
|
+
task :spec do
|
25
|
+
sh "rspec -I. spec/dietadsl_spec.rb"
|
26
|
+
end
|
27
|
+
|
28
|
+
desc "Ejecutar con documentacion"
|
29
|
+
task :doc do
|
30
|
+
sh "rspec -I. spec/dieta_spec.rb --format documentation"
|
31
|
+
end
|
32
|
+
|
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "gema"
|
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
|
data/bin/setup
ADDED
data/gema.gemspec
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'gema/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "gemaalu0100889871"
|
8
|
+
spec.version = Gema::VERSION
|
9
|
+
spec.authors = ["Victoria Quintana Martí"]
|
10
|
+
spec.email = ["alu0100889871@ull.edu.es"]
|
11
|
+
|
12
|
+
spec.summary = %q{Practica 11 LPP}
|
13
|
+
spec.description = %q{Diseñar e implementar un DSL, siguiendo la filosofía de Ruby, que permita la definición de listas de menús dietéticos diarios y semanales. Todo ello dirigido por pruebas TDD a través de RSpec(expectativa). Para crear la estructura utilizamos Bundler.}
|
14
|
+
spec.homepage = "https://github.com/ULL-ESIT-LPP-1617/menu-dietetico-alu0100889871"
|
15
|
+
|
16
|
+
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
17
|
+
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
18
|
+
#if spec.respond_to?(:metadata)
|
19
|
+
# spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
|
20
|
+
#else
|
21
|
+
# raise "RubyGems 2.0 or newer is required to protect against " \
|
22
|
+
# "public gem pushes."
|
23
|
+
#end
|
24
|
+
|
25
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
26
|
+
f.match(%r{^(test|spec|features)/})
|
27
|
+
end
|
28
|
+
spec.bindir = "exe"
|
29
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
30
|
+
spec.require_paths = ["lib"]
|
31
|
+
|
32
|
+
spec.add_development_dependency "bundler", "~> 1.13"
|
33
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
34
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
35
|
+
spec.add_development_dependency "guard"
|
36
|
+
spec.add_development_dependency "guard-rspec"
|
37
|
+
spec.add_development_dependency "guard-bundler"
|
38
|
+
end
|
data/lib/gema.rb
ADDED
data/lib/gema/dieta.rb
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
#Clase Dieta
|
2
|
+
class Dieta
|
3
|
+
#Include Comparable
|
4
|
+
include Comparable
|
5
|
+
#Titulo de la Dieta
|
6
|
+
attr_reader :titulo
|
7
|
+
#Porcentaje de la ingesta diaria de la Dieta
|
8
|
+
attr_reader :porcentaje_ingesta
|
9
|
+
#PLatos de la Dieta
|
10
|
+
attr_reader :platos
|
11
|
+
#Valor calórico de la Dieta
|
12
|
+
attr_reader :vct
|
13
|
+
#Porcentaje de proteinas, grasas e hidratos de carbono de la Dieta
|
14
|
+
attr_reader :porcentajes
|
15
|
+
#Constructor de Dieta
|
16
|
+
def initialize(titulo, porcentaje_ingesta, platos, vct, porcentajes)
|
17
|
+
@titulo = titulo
|
18
|
+
@porcentaje_ingesta = porcentaje_ingesta
|
19
|
+
@platos = platos
|
20
|
+
@vct = vct
|
21
|
+
@porcentajes = porcentajes
|
22
|
+
|
23
|
+
end
|
24
|
+
#Método necesario para poder utilizar el módulo comparable
|
25
|
+
def <=>(another)
|
26
|
+
vct <=> another.vct
|
27
|
+
end
|
28
|
+
#Método para imprimir Dieta
|
29
|
+
def to_s
|
30
|
+
title = "#{@titulo} ( #{@porcentaje_ingesta} )\n "
|
31
|
+
for i in 0..@platos.size-1
|
32
|
+
title +="- #{@platos[i][0]}, #{@platos[i][1]}, #{@platos[i][2]} \n"
|
33
|
+
end
|
34
|
+
title += "V.C.T. |% #{@vct} kcal | #{@porcentajes[0]}% - #{@porcentajes[1]}% - #{@porcentajes[2]}%"
|
35
|
+
end
|
36
|
+
#Método que devuelve el título de la Dieta
|
37
|
+
def get_titulo
|
38
|
+
@titulo
|
39
|
+
end
|
40
|
+
#Método que devuelve las descripciones de los platos de la Dieta
|
41
|
+
def get_desc_plato(i)
|
42
|
+
"#{@platos[i][0]}, #{@platos[i][1]}, #{@platos[i][2]} "
|
43
|
+
end
|
44
|
+
#Método que devuelve la ingesta diaria de la Dieta
|
45
|
+
def get_ingesta_diaria
|
46
|
+
@porcentaje_ingesta
|
47
|
+
end
|
48
|
+
#Método que devuelve la descripcion de un plato de la Dieta
|
49
|
+
def get_plato(i)
|
50
|
+
@platos[i][0]
|
51
|
+
end
|
52
|
+
#Método que devuelve los platos de la Dieta
|
53
|
+
def get_platos
|
54
|
+
@platos
|
55
|
+
end
|
56
|
+
#Método que el valor calórico de la Dieta
|
57
|
+
def get_vct
|
58
|
+
@vct
|
59
|
+
end
|
60
|
+
#Método que el porcentaje de proteinas de la Dieta
|
61
|
+
def get_proteinas
|
62
|
+
@porcentajes[0]
|
63
|
+
end
|
64
|
+
#Método que el porcentaje de grasas de la Dieta
|
65
|
+
def get_grasas
|
66
|
+
@porcentajes[1]
|
67
|
+
end
|
68
|
+
#Método que el porcentaje de hidratos de carbono de la Dieta
|
69
|
+
def get_hidratos
|
70
|
+
@porcentajes[2]
|
71
|
+
end
|
72
|
+
end
|
73
|
+
#Clase Menu_Edad que recibe herencia de la clase Dieta
|
74
|
+
class Menu_Edad < Dieta
|
75
|
+
#Edad del Menu_Edad
|
76
|
+
attr_reader :edad
|
77
|
+
#Constructor de Menu_Edad
|
78
|
+
def initialize(dieta,edad)
|
79
|
+
@edad=edad
|
80
|
+
super(dieta.titulo,dieta.porcentaje_ingesta,dieta.platos,dieta.vct,dieta.porcentajes)
|
81
|
+
|
82
|
+
end
|
83
|
+
#Método para imprimir Menu_Edad
|
84
|
+
def to_s
|
85
|
+
title = super.to_s + "\nEdad:#{@edad}"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
#Clase Menu_Alimentos que recibe herencia de la clase Dieta
|
89
|
+
class Menu_Alimentos < Dieta
|
90
|
+
#Alimentos de Menu_ALimentos
|
91
|
+
attr_reader :alimentos
|
92
|
+
#Constructor
|
93
|
+
def initialize(dieta,alimentos)
|
94
|
+
@alimentos=alimentos
|
95
|
+
super(dieta.titulo,dieta.porcentaje_ingesta,dieta.platos,dieta.vct,dieta.porcentajes)
|
96
|
+
|
97
|
+
end
|
98
|
+
#Método para imprimir Menu_Alimentos
|
99
|
+
def to_s
|
100
|
+
title = super.to_s + "\nGrupo de alimentos:#{@alimentos}"
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
|
116
|
+
|
117
|
+
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
|
122
|
+
|
123
|
+
|
124
|
+
|
125
|
+
|
126
|
+
|
127
|
+
|
128
|
+
|
129
|
+
|
130
|
+
|
131
|
+
|
132
|
+
|
@@ -0,0 +1,150 @@
|
|
1
|
+
#Clase Dieta
|
2
|
+
class DietaDSL
|
3
|
+
#Include Comparable
|
4
|
+
include Comparable
|
5
|
+
#Titulo de la Dieta
|
6
|
+
attr_reader :titulo
|
7
|
+
#Porcentaje de la ingesta diaria de la Dieta
|
8
|
+
attr_reader :porcentaje_ingesta
|
9
|
+
#PLatos de la Dieta
|
10
|
+
attr_reader :platos
|
11
|
+
#Valor calórico de la Dieta
|
12
|
+
attr_reader :vct
|
13
|
+
#Porcentaje de proteinas, grasas e hidratos de carbono de la Dieta
|
14
|
+
attr_reader :porcentajes
|
15
|
+
#Nombre
|
16
|
+
attr_reader :nombre
|
17
|
+
#Constructor de la clase Dieta
|
18
|
+
def initialize(nombre,&block)
|
19
|
+
@nombre = nombre
|
20
|
+
@titulo = ""
|
21
|
+
@porcentaje_ingesta = ""
|
22
|
+
@platos = []
|
23
|
+
@vct = 0
|
24
|
+
@porcentajes = []
|
25
|
+
if block_given?
|
26
|
+
if block.arity == 1
|
27
|
+
yield self
|
28
|
+
else
|
29
|
+
instance_eval(&block)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
#Método necesario para poder utilizar el módulo comparable
|
36
|
+
def <=>(another)
|
37
|
+
vct <=> another.vct
|
38
|
+
end
|
39
|
+
#Método para imprimir Dieta
|
40
|
+
def to_s
|
41
|
+
title = "#{@titulo} ( #{@porcentaje_ingesta} )\n "
|
42
|
+
for i in 0..@platos.size-1
|
43
|
+
title +="- #{@platos[i][0]}, #{@platos[i][1]}, #{@platos[i][2]} \n"
|
44
|
+
end
|
45
|
+
title += "V.C.T. |% #{@vct} kcal | #{@porcentajes[0]}% - #{@porcentajes[1]}% - #{@porcentajes[2]}%"
|
46
|
+
end
|
47
|
+
#Método que devuelve el título de la Dieta
|
48
|
+
def get_titulo
|
49
|
+
@titulo
|
50
|
+
end
|
51
|
+
#Método que devuelve las descripciones de los platos de la Dieta
|
52
|
+
def get_desc_plato(i)
|
53
|
+
"#{@platos[i][0]}, #{@platos[i][1]}, #{@platos[i][2]} "
|
54
|
+
end
|
55
|
+
#Método que devuelve la ingesta diaria de la Dieta
|
56
|
+
def get_ingesta_diaria
|
57
|
+
@porcentaje_ingesta
|
58
|
+
end
|
59
|
+
#Método que devuelve la descripcion de un plato de la Dieta
|
60
|
+
def get_plato(i)
|
61
|
+
@platos[i][0]
|
62
|
+
end
|
63
|
+
#Método que devuelve los platos de la Dieta
|
64
|
+
def get_platos
|
65
|
+
@platos
|
66
|
+
end
|
67
|
+
#Método que el valor calórico de la Dieta
|
68
|
+
def get_vct
|
69
|
+
@vct
|
70
|
+
end
|
71
|
+
#Método que el porcentaje de proteinas de la Dieta
|
72
|
+
def get_proteinas
|
73
|
+
@porcentajes[0]
|
74
|
+
end
|
75
|
+
#Método que el porcentaje de grasas de la Dieta
|
76
|
+
def get_grasas
|
77
|
+
@porcentajes[1]
|
78
|
+
end
|
79
|
+
#Método que el porcentaje de hidratos de carbono de la Dieta
|
80
|
+
def get_hidratos
|
81
|
+
@porcentajes[2]
|
82
|
+
end
|
83
|
+
def titulo_(name)
|
84
|
+
@titulo = name
|
85
|
+
end
|
86
|
+
|
87
|
+
def ingesta_(opciones={})
|
88
|
+
ingest = ""
|
89
|
+
ingest << "#{opciones[:min]}" if opciones[:min]
|
90
|
+
ingest<<"-#{opciones[:max]} %" if opciones[:max]
|
91
|
+
@porcentaje_ingesta = ingest
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
def plato_(opciones={})
|
96
|
+
grams= ""
|
97
|
+
descripcion=""
|
98
|
+
porcion=""
|
99
|
+
grams= "#{opciones[:gramos]} g" if opciones[:gramos]
|
100
|
+
descripcion = opciones[:descripcion] if opciones[:descripcion]
|
101
|
+
porcion = opciones[:porcion] if opciones[:porcion]
|
102
|
+
@platos.push([descripcion,porcion,grams])
|
103
|
+
|
104
|
+
end
|
105
|
+
|
106
|
+
def porcentajes_(opciones={})
|
107
|
+
@vct = opciones[:vct] if opciones[:vct]
|
108
|
+
proteinas = ""
|
109
|
+
grasas = ""
|
110
|
+
hidratos=""
|
111
|
+
proteinas = opciones[:proteinas] if opciones[:proteinas]
|
112
|
+
grasas = opciones[:grasas] if opciones[:grasas]
|
113
|
+
hidratos = opciones[:hidratos] if opciones[:hidratos]
|
114
|
+
@porcentajes.push(proteinas)
|
115
|
+
@porcentajes.push(grasas)
|
116
|
+
@porcentajes.push(hidratos)
|
117
|
+
|
118
|
+
|
119
|
+
end
|
120
|
+
end
|
121
|
+
#Clase Menu_Edad que recibe herencia de la clase Dieta
|
122
|
+
class Menu_EdadDSL < DietaDSL
|
123
|
+
#Edad del Menu_Edad
|
124
|
+
attr_reader :edad
|
125
|
+
#Constructor de Menu_Edad
|
126
|
+
def initialize(dieta,edad)
|
127
|
+
@edad=edad
|
128
|
+
super(dieta.titulo,dieta.porcentaje_ingesta,dieta.platos,dieta.vct,dieta.porcentajes)
|
129
|
+
|
130
|
+
end
|
131
|
+
#Método para imprimir Menu_Edad
|
132
|
+
def to_s
|
133
|
+
title = super.to_s + "\nEdad:#{@edad}"
|
134
|
+
end
|
135
|
+
end
|
136
|
+
#Clase Menu_Alimentos que recibe herencia de la clase Dieta
|
137
|
+
class Menu_AlimentosDSL < DietaDSL
|
138
|
+
#Alimentos de Menu_ALimentos
|
139
|
+
attr_reader :alimentos
|
140
|
+
#Constructor
|
141
|
+
def initialize(dieta,alimentos)
|
142
|
+
@alimentos=alimentos
|
143
|
+
super(dieta.titulo,dieta.porcentaje_ingesta,dieta.platos,dieta.vct,dieta.porcentajes)
|
144
|
+
|
145
|
+
end
|
146
|
+
#Método para imprimir Menu_Alimentos
|
147
|
+
def to_s
|
148
|
+
title = super.to_s + "\nGrupo de alimentos:#{@alimentos}"
|
149
|
+
end
|
150
|
+
end
|
data/lib/gema/lista.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
#Estructura del nodo (Nodo genérico de la Lista)
|
2
|
+
Node = Struct.new(:value, :next)
|
3
|
+
#Clase Lista
|
4
|
+
class Lista
|
5
|
+
#Include Enumerable
|
6
|
+
include Enumerable
|
7
|
+
#La cabecera de la Lista
|
8
|
+
attr_reader :head
|
9
|
+
#Constructor
|
10
|
+
def initialize
|
11
|
+
@head = nil
|
12
|
+
end
|
13
|
+
#Método necesario para que el módulo Enumerable se pueda utilizar(el módulo Enumerable define iteradores útiles que se implementan en base a un iterador each)
|
14
|
+
def each
|
15
|
+
node=@head
|
16
|
+
while node != nil
|
17
|
+
yield node.value
|
18
|
+
node=node.next
|
19
|
+
end
|
20
|
+
end
|
21
|
+
#Método que inserta un valor o un array de valores en la Lista
|
22
|
+
def push (valor)
|
23
|
+
if(valor.instance_of? Array )
|
24
|
+
for i in valor
|
25
|
+
@head = Node.new(i,@head)
|
26
|
+
|
27
|
+
end
|
28
|
+
else
|
29
|
+
@head = Node.new(valor,@head)
|
30
|
+
end
|
31
|
+
@head.value
|
32
|
+
|
33
|
+
end
|
34
|
+
#Método que saca un valor de la Lista
|
35
|
+
def pop
|
36
|
+
if(@head!=nil)
|
37
|
+
other = @head
|
38
|
+
@head = @head.next
|
39
|
+
return other.value
|
40
|
+
end
|
41
|
+
end
|
42
|
+
#Método que imprime la Lista
|
43
|
+
def to_s
|
44
|
+
other = @head
|
45
|
+
total=""
|
46
|
+
while(other!=nil)
|
47
|
+
total+= "#{other.value}\t"
|
48
|
+
other = other.next
|
49
|
+
end
|
50
|
+
total += "\n"
|
51
|
+
|
52
|
+
|
53
|
+
end
|
54
|
+
#Método que comprueba si la Lista está vacía
|
55
|
+
def is_empty?
|
56
|
+
|
57
|
+
if(@head==nil)
|
58
|
+
return true
|
59
|
+
else return false
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
63
|
+
#Método que te devuelve la cabecera de la Lista vacía
|
64
|
+
def empty
|
65
|
+
@head = nil
|
66
|
+
return @head
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
@@ -0,0 +1,130 @@
|
|
1
|
+
#Estructura del nodo (Nodo genérico de la Listadll)
|
2
|
+
Nodedll = Struct.new(:value, :prev, :next)
|
3
|
+
#Clase Lista doblemente enlazada
|
4
|
+
class Listadll
|
5
|
+
#Include Enumerable
|
6
|
+
include Enumerable
|
7
|
+
#La cabecera de la Listadll
|
8
|
+
attr_reader :head
|
9
|
+
#La cola de la Listadll
|
10
|
+
attr_reader :tail
|
11
|
+
#Constructor
|
12
|
+
def initialize
|
13
|
+
@head = nil
|
14
|
+
@tail = nil
|
15
|
+
end
|
16
|
+
#Método que inserta por delante un valor o un array de valores en la Listadll
|
17
|
+
def pushfront (valor)
|
18
|
+
if(valor.instance_of? Array )
|
19
|
+
if(@tail==nil)
|
20
|
+
@tail=Nodedll.new(valor[0],nil,nil)
|
21
|
+
@head = @tail
|
22
|
+
valor.shift()
|
23
|
+
end
|
24
|
+
for i in valor
|
25
|
+
aux=@head
|
26
|
+
@head=Nodedll.new(i,aux,nil)
|
27
|
+
aux.next =@head
|
28
|
+
|
29
|
+
end
|
30
|
+
else
|
31
|
+
if(@tail==nil)
|
32
|
+
@tail=Nodedll.new(valor,nil,nil)
|
33
|
+
@head = @tail
|
34
|
+
else
|
35
|
+
aux = @head
|
36
|
+
@head = Nodo.new(valor,aux,nil)
|
37
|
+
aux.next = @head
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
@head.value
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
#Método que inserta por detrás un valor o un array de valores en la Listadll
|
46
|
+
def pushback (valor)
|
47
|
+
if(@tail==nil)
|
48
|
+
@tail=Nodedll.new(valor[0],nil,nil)
|
49
|
+
@tail=@head
|
50
|
+
end
|
51
|
+
if(valor.instance_of? Array )
|
52
|
+
for i in valor
|
53
|
+
aux=@tail
|
54
|
+
@tail=Nodedll.new(i,aux,@head)
|
55
|
+
aux.prev=@tail
|
56
|
+
|
57
|
+
end
|
58
|
+
else
|
59
|
+
if(@tail==nil)
|
60
|
+
@tail=Nodedll.new(valor,nil,nil)
|
61
|
+
@tail=@head
|
62
|
+
end
|
63
|
+
@tail=Nodedll.new(valor,nil,@head)
|
64
|
+
end
|
65
|
+
@tail.value
|
66
|
+
|
67
|
+
end
|
68
|
+
#Método que saca por delante un valor de la Listadll
|
69
|
+
def popfront
|
70
|
+
if(@head!=nil)
|
71
|
+
other = @head
|
72
|
+
@head = @head.prev
|
73
|
+
if(@head!=nil)
|
74
|
+
@head.next=nil
|
75
|
+
other.prev=nil
|
76
|
+
else @tail = nil
|
77
|
+
|
78
|
+
end
|
79
|
+
end
|
80
|
+
return other.value
|
81
|
+
end
|
82
|
+
#Método que saca por detrás un valor de la Listadll
|
83
|
+
def popback
|
84
|
+
if(@tail!=nil)
|
85
|
+
other = @tail
|
86
|
+
@tail = @tail.next
|
87
|
+
if(@tail!=nil)
|
88
|
+
@tail.prev=nil
|
89
|
+
other.prev=nil
|
90
|
+
else @head = nil
|
91
|
+
|
92
|
+
end
|
93
|
+
end
|
94
|
+
return other.value
|
95
|
+
end
|
96
|
+
#Método que imprime la Listadll
|
97
|
+
def to_s
|
98
|
+
other = @tail
|
99
|
+
total=""
|
100
|
+
while(other!=nil)
|
101
|
+
total+= "#{other.value}\t"
|
102
|
+
other = other.next
|
103
|
+
end
|
104
|
+
total += "\n"
|
105
|
+
end
|
106
|
+
#Método que comprueba si la Listadll está vacía
|
107
|
+
def is_empty?
|
108
|
+
if(@head==nil)
|
109
|
+
return true
|
110
|
+
else return false
|
111
|
+
|
112
|
+
end
|
113
|
+
end
|
114
|
+
#Método necesario para que el módulo Enumerable se pueda utilizar(el módulo Enumerable define iteradores útiles que se implementan en base a un iterador each)
|
115
|
+
def each
|
116
|
+
node=@tail
|
117
|
+
while node != nil
|
118
|
+
yield node.value
|
119
|
+
node=node.next
|
120
|
+
end
|
121
|
+
end
|
122
|
+
#Método que te devuelve la cabecera de la Listadll vacía
|
123
|
+
def empty
|
124
|
+
@head = nil
|
125
|
+
return @head
|
126
|
+
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
|
data/lib/gema/version.rb
ADDED
metadata
ADDED
@@ -0,0 +1,146 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gemaalu0100889871
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Victoria Quintana Martí
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-12-15 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.13'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.13'
|
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: Diseñar e implementar un DSL, siguiendo la filosofía de Ruby, que permita
|
98
|
+
la definición de listas de menús dietéticos diarios y semanales. Todo ello dirigido
|
99
|
+
por pruebas TDD a través de RSpec(expectativa). Para crear la estructura utilizamos
|
100
|
+
Bundler.
|
101
|
+
email:
|
102
|
+
- alu0100889871@ull.edu.es
|
103
|
+
executables: []
|
104
|
+
extensions: []
|
105
|
+
extra_rdoc_files: []
|
106
|
+
files:
|
107
|
+
- ".gitignore"
|
108
|
+
- ".rspec"
|
109
|
+
- ".travis.yml"
|
110
|
+
- Gemfile
|
111
|
+
- Guardfile
|
112
|
+
- README.md
|
113
|
+
- Rakefile
|
114
|
+
- bin/console
|
115
|
+
- bin/setup
|
116
|
+
- gema.gemspec
|
117
|
+
- lib/gema.rb
|
118
|
+
- lib/gema/dieta.rb
|
119
|
+
- lib/gema/dietadsl.rb
|
120
|
+
- lib/gema/lista.rb
|
121
|
+
- lib/gema/listadll.rb
|
122
|
+
- lib/gema/version.rb
|
123
|
+
homepage: https://github.com/ULL-ESIT-LPP-1617/menu-dietetico-alu0100889871
|
124
|
+
licenses: []
|
125
|
+
metadata: {}
|
126
|
+
post_install_message:
|
127
|
+
rdoc_options: []
|
128
|
+
require_paths:
|
129
|
+
- lib
|
130
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '0'
|
135
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0'
|
140
|
+
requirements: []
|
141
|
+
rubyforge_project:
|
142
|
+
rubygems_version: 2.6.8
|
143
|
+
signing_key:
|
144
|
+
specification_version: 4
|
145
|
+
summary: Practica 11 LPP
|
146
|
+
test_files: []
|