alimentos_diego_algomas 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +2 -0
  3. data/.gitignore +12 -0
  4. data/.rspec +3 -0
  5. data/.travis.yml +7 -0
  6. data/Gemfile +4 -0
  7. data/Gemfile.lock +97 -0
  8. data/Guardfile +83 -0
  9. data/README.md +57 -0
  10. data/Rakefile +6 -0
  11. data/alimentos.gemspec +38 -0
  12. data/bin/console +14 -0
  13. data/bin/setup +8 -0
  14. data/docs/Alimentos.html +115 -0
  15. data/docs/Alimentos/Alimentos.html +376 -0
  16. data/docs/Alimentos/Error.html +106 -0
  17. data/docs/Gemfile.html +99 -0
  18. data/docs/Gemfile_lock.html +180 -0
  19. data/docs/Guardfile.html +166 -0
  20. data/docs/List.html +120 -0
  21. data/docs/List/Error.html +106 -0
  22. data/docs/List/List.html +495 -0
  23. data/docs/Menu.html +115 -0
  24. data/docs/Menu/Error.html +106 -0
  25. data/docs/Menu/Menu.html +512 -0
  26. data/docs/Object.html +199 -0
  27. data/docs/Plato.html +115 -0
  28. data/docs/Plato/Error.html +106 -0
  29. data/docs/Plato/Plato.html +478 -0
  30. data/docs/Plato/PlatoAmbiental.html +374 -0
  31. data/docs/README_md.html +155 -0
  32. data/docs/Rakefile.html +101 -0
  33. data/docs/bin/setup.html +101 -0
  34. data/docs/created.rid +17 -0
  35. data/docs/css/fonts.css +167 -0
  36. data/docs/css/rdoc.css +619 -0
  37. data/docs/fonts/Lato-Light.ttf +0 -0
  38. data/docs/fonts/Lato-LightItalic.ttf +0 -0
  39. data/docs/fonts/Lato-Regular.ttf +0 -0
  40. data/docs/fonts/Lato-RegularItalic.ttf +0 -0
  41. data/docs/fonts/SourceCodePro-Bold.ttf +0 -0
  42. data/docs/fonts/SourceCodePro-Regular.ttf +0 -0
  43. data/docs/images/add.png +0 -0
  44. data/docs/images/arrow_up.png +0 -0
  45. data/docs/images/brick.png +0 -0
  46. data/docs/images/brick_link.png +0 -0
  47. data/docs/images/bug.png +0 -0
  48. data/docs/images/bullet_black.png +0 -0
  49. data/docs/images/bullet_toggle_minus.png +0 -0
  50. data/docs/images/bullet_toggle_plus.png +0 -0
  51. data/docs/images/date.png +0 -0
  52. data/docs/images/delete.png +0 -0
  53. data/docs/images/find.png +0 -0
  54. data/docs/images/loadingAnimation.gif +0 -0
  55. data/docs/images/macFFBgHack.png +0 -0
  56. data/docs/images/package.png +0 -0
  57. data/docs/images/page_green.png +0 -0
  58. data/docs/images/page_white_text.png +0 -0
  59. data/docs/images/page_white_width.png +0 -0
  60. data/docs/images/plugin.png +0 -0
  61. data/docs/images/ruby.png +0 -0
  62. data/docs/images/tag_blue.png +0 -0
  63. data/docs/images/tag_green.png +0 -0
  64. data/docs/images/transparent.png +0 -0
  65. data/docs/images/wrench.png +0 -0
  66. data/docs/images/wrench_orange.png +0 -0
  67. data/docs/images/zoom.png +0 -0
  68. data/docs/index.html +132 -0
  69. data/docs/js/darkfish.js +84 -0
  70. data/docs/js/navigation.js +105 -0
  71. data/docs/js/navigation.js.gz +0 -0
  72. data/docs/js/search.js +110 -0
  73. data/docs/js/search_index.js +1 -0
  74. data/docs/js/search_index.js.gz +0 -0
  75. data/docs/js/searcher.js +229 -0
  76. data/docs/js/searcher.js.gz +0 -0
  77. data/docs/table_of_contents.html +345 -0
  78. data/lib/alimentos.rb +29 -0
  79. data/lib/alimentos/alimentos.rb +36 -0
  80. data/lib/alimentos/dsl.rb +123 -0
  81. data/lib/alimentos/dslmenu.rb +60 -0
  82. data/lib/alimentos/list.rb +104 -0
  83. data/lib/alimentos/menu.rb +62 -0
  84. data/lib/alimentos/plato.rb +93 -0
  85. data/lib/alimentos/platoAmbiental.rb +64 -0
  86. data/lib/alimentos/version.rb +15 -0
  87. metadata +243 -0
@@ -0,0 +1,29 @@
1
+
2
+ require "alimentos/version"
3
+ require "alimentos/alimentos.rb"
4
+ require "alimentos/list.rb"
5
+ require "alimentos/plato.rb"
6
+ require "alimentos/platoAmbiental.rb"
7
+ require "alimentos/menu.rb"
8
+ require "alimentos/dsl.rb"
9
+ require "alimentos/dslmenu.rb"
10
+
11
+ module Alimentos
12
+ class Error < StandardError; end
13
+ # Your code goes here...
14
+ end
15
+ module List
16
+ class Error < StandardError; end
17
+ end
18
+ module Plato
19
+ class Error < StandardError;end
20
+ end
21
+ module Menu
22
+ class Error < StandardError;end
23
+ end
24
+ module Dsl
25
+ class Error < StandardError;end
26
+ end
27
+
28
+
29
+
@@ -0,0 +1,36 @@
1
+ ##
2
+ # Modulo donde se encuentra la clase de alimentos
3
+
4
+ module Alimentos
5
+ ##
6
+ # Clase alimentos donde se guardan las propiedades del mismo
7
+ class Alimentos
8
+ include Comparable
9
+ attr_reader :nombre,:proteinas,:carbohidratos,:lipidos,:emisiones,:m2
10
+ def initialize (nombre,proteinas,carbohidratos,lipidos,emisiones,m2)
11
+ @nombre = nombre
12
+ @proteinas = proteinas
13
+ @carbohidratos = carbohidratos
14
+ @lipidos = lipidos
15
+ @emisiones = emisiones
16
+ @m2 = m2
17
+
18
+ end
19
+ ##
20
+ # Metodo que calcula las kcal de un alimento
21
+ def calorias()
22
+ kcal = (@proteinas*4)+(@lipidos*9)+(@carbohidratos*4)
23
+ kcal.round(2)
24
+ end
25
+ ##
26
+ # Serializador de un alimento
27
+ def to_s()
28
+ "#{@nombre}"
29
+ end
30
+ ##
31
+ # Permite comparar entre alimentos
32
+ def <=>(other)
33
+ calorias()<=> other.calorias()
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,123 @@
1
+ require "alimentos/list.rb"
2
+ module Dsl
3
+ class Platodsl
4
+ include List
5
+ attr_accessor :nombre,:alimentos,:cantidades,:kcal
6
+ ##
7
+ # Esta clase es comparable entre ellas
8
+ include Comparable
9
+ def initialize(nombre,&block)
10
+ @nombre = nombre
11
+ @alimentos = List.new()
12
+ @cantidades = List.new()
13
+
14
+ if block_given?
15
+ if block.arity == 1
16
+ yield self
17
+ else
18
+ instance_eval(&block)
19
+ end
20
+ end
21
+ end
22
+ def alimento(aliment, options={})
23
+ @alimentos.push(aliment)
24
+ @cantidades.push(options[:cantidad]) if options[:cantidad]
25
+ @kcal=calculoCalorico()
26
+ end
27
+
28
+ ##
29
+ # Realiza el calculo de las calorias totales del plato
30
+ def calculoCalorico()
31
+ calorias = @alimentos.collect { |x| x.calorias()}
32
+ cantidades = @cantidades.collect{ |x| x}
33
+ for i in 0...cantidades.size() do
34
+ calorias[i]=calorias[i]*0.01*cantidades[i]
35
+ end
36
+ calorias.sum
37
+ end
38
+ ##
39
+ # Realiza el calculo del porcentaje de proteinas que tiene
40
+ def porproteinas()
41
+ proteinas = @alimentos.collect { |x| x.proteinas}
42
+ cantidades = @cantidades.collect{|x| x}
43
+ for i in 0...proteinas.size() do
44
+ proteinas[i] = proteinas[i]*cantidades[i]*0.01
45
+ end
46
+ ((proteinas.sum*4/@kcal)*100).round(2)
47
+ end
48
+ ##
49
+ # Realiza el calculo del porcentaje de lipidos que tiene
50
+ def porlipidos()
51
+ lipidos = @alimentos.collect { |x| x.lipidos}
52
+ cantidades = @cantidades.collect{|x| x}
53
+ for i in 0...lipidos.size() do
54
+ lipidos[i]=lipidos[i]*cantidades[i]*0.01
55
+ end
56
+ ((lipidos.sum*9/@kcal)*100).round(2)
57
+ end
58
+ def emisiones()
59
+ emisiones= @alimentos.collect{ |x| x.emisiones }
60
+ cantidades = @cantidades.collect{|x| x}
61
+ for i in 0...emisiones.size() do
62
+ emisiones[i]=emisiones[i]*cantidades[i]*0.01
63
+ end
64
+ (emisiones.sum).round(2)
65
+ end
66
+ ##
67
+ # Calcula los metros cuadrados que gasta cada plato
68
+ def m2()
69
+ m2= @alimentos.collect{ |x| x.m2}
70
+ cantidades = @cantidades.collect{|x| x}
71
+ for i in 0...m2.size() do
72
+ m2[i]=m2[i]*cantidades[i]*0.01
73
+ end
74
+ (m2.sum).round(2)
75
+ end
76
+ ##
77
+ # Realiza el calculo del porcentaje de carbohidratos que tiene
78
+ def porcarbohidratos()
79
+ carbohidratos = @alimentos.collect{ |x| x.carbohidratos }
80
+ cantidades = @cantidades.collect{|x| x}
81
+ for i in 0...carbohidratos.size() do
82
+ carbohidratos[i]=carbohidratos[i]*cantidades[i]*0.01
83
+ end
84
+ ((carbohidratos.sum*4/@kcal)*100).round(2)
85
+ end
86
+ def huella()
87
+ ienergia=0
88
+ icarbono=0
89
+ if @kcal<670
90
+ ienergia+=1
91
+ elsif @kcal > 830
92
+ ienergia+=3
93
+ else
94
+ ienergia+=2
95
+ end
96
+ if emisiones()<800
97
+ icarbono+=1
98
+ elsif emisiones()>1200
99
+ icarbono+=3
100
+ else
101
+ icarbono+=2
102
+ end
103
+ huellapropia= (ienergia+icarbono)/2
104
+ huellapropia
105
+ end
106
+ ##
107
+ # Serializa el plato
108
+ def to_s()
109
+ output = "#{@nombre}:\n"
110
+ @alimentos.zip(@cantidades).each do |aliment,cantidad|
111
+ output<<"\t\t#{aliment}: #{cantidad}g\n"
112
+ end
113
+ output << "\t\tValor energético: #{@kcal}kcal\n"
114
+ output << "\t\tHuella: #{huella()}"
115
+ output
116
+ end
117
+ ##
118
+ # Permite comparar entre distintos platos según las kcal
119
+ def <=>(other)
120
+ @kcal<=>other.kcal
121
+ end
122
+ end
123
+ end
@@ -0,0 +1,60 @@
1
+ module Dsl
2
+ class MenuDsl
3
+ attr_accessor :nombre,:platos,:precios
4
+ include List
5
+ def initialize(nombre, &block)
6
+ @nombre = nombre
7
+ @precios = List.new()
8
+ @platos = List.new()
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 plato(plate,options={})
19
+ @platos.push(plate)
20
+ @precios.push(options[:price]) if options[:price]
21
+ end
22
+ def precio()
23
+ @precios.collect{|x| x}.sum
24
+ end
25
+ def energetico()
26
+ @platos.collect{|x| x.kcal}.sum
27
+ end
28
+ def porproteinas()
29
+ @platos.collect{|x| x.porproteinas()}.sum
30
+ end
31
+ def porlipidos()
32
+ @platos.collect{|x| x.porlipidos()}.sum
33
+ end
34
+ def porcarbohidratos()
35
+ @platos.collect{|x| x.porcarbohidratos()}.sum
36
+ end
37
+ def m2()
38
+ @platos.collect{|x| x.m2()}.sum
39
+ end
40
+ def emisiones()
41
+ @platos.collect{|x| x.emisiones()}.sum
42
+ end
43
+ def to_s()
44
+ output = "#{@nombre}"
45
+ output << ":\n"
46
+ @platos.zip(@precios).each do |plato,precio|
47
+ output << "\t#{plato}\n"
48
+ end
49
+ output<< "Precio: #{precio()}\n"
50
+ output<< "Proteinas: #{porproteinas()}g\n"
51
+ output<< "Lipidos: #{porlipidos()}g\n"
52
+ output<< "Carbohidratos: #{porcarbohidratos()}g\n"
53
+ output<< "Kcal: #{energetico()}\n"
54
+ output<< "M2: #{m2()}\n"
55
+ output<< "Emisiones: #{emisiones()}\n"
56
+ output
57
+ end
58
+
59
+ end
60
+ end
@@ -0,0 +1,104 @@
1
+ ##
2
+ # Modulo lista donde se encuentra la clase lista y el diseño de un nodo
3
+ module List
4
+ Node = Struct.new(:value,:next,:prev)
5
+ ##
6
+ # Clase lista donde se implementa una clase constituida por una lista doblemente enlazada de elementos
7
+ class List
8
+ ##
9
+ # Incluye el modulo enumerable para permitir la iteración sobre la clase
10
+ include Enumerable
11
+ attr_reader :head,:tail,:lenght
12
+ def initialize ()
13
+ @head = nil
14
+ @tail = nil
15
+ @lenght = 0
16
+ end
17
+ ##
18
+ # Permite insertar un valor en la cola
19
+ def push (valor)
20
+ toinsert = Node.new(valor,nil,nil)
21
+ if @lenght == 0
22
+ @lenght= @lenght+1
23
+ toinsert.next = nil
24
+ toinsert.prev = nil
25
+ @head = toinsert
26
+ @tail = toinsert
27
+ else
28
+ @lenght = @lenght+1
29
+ @tail.next = toinsert
30
+ toinsert.prev = @tail
31
+ toinsert.next = nil
32
+ @tail = toinsert
33
+ end
34
+ end
35
+ ##
36
+ # Permite insertar un array de elementos en la cola
37
+ def push_array(values)
38
+ values.each do |item|
39
+ toinsert = Node.new(item,nil,nil)
40
+ if @lenght == 0
41
+ @lenght= @lenght+1
42
+ toinsert.next = nil
43
+ toinsert.prev = nil
44
+ @head = toinsert
45
+ @tail = toinsert
46
+ else
47
+ @lenght = @lenght+1
48
+ @tail.next = toinsert
49
+ toinsert.prev = @tail
50
+ toinsert.next = nil
51
+ @tail = toinsert
52
+ end
53
+ end
54
+ end
55
+ ##
56
+ # Permite extraer la cabeza y la devuelve
57
+ def pop_head()
58
+ if @lenght == 1
59
+ aux = @head
60
+ @lenght = 0
61
+ @head = nil
62
+ @tail = nil
63
+ return aux
64
+ elsif @lenght > 1
65
+ aux = @head
66
+ @lenght = @lenght-1
67
+ @head = aux.next
68
+ return aux
69
+ else
70
+ return nil
71
+ end
72
+ end
73
+ ##
74
+ # Permite extraer la cola y la devuelve ese elemento
75
+ def pop_tail()
76
+ if @lenght == 1
77
+ aux = @head
78
+ @lenght = 0
79
+ @head = nil
80
+ @tail = nil
81
+ return aux
82
+ elsif @lenght > 1
83
+ aux = @tail
84
+ @lenght = @lenght-1
85
+ @tail = aux.prev
86
+ return aux
87
+ else
88
+ return nil
89
+ end
90
+ end
91
+ def each
92
+ aux = @head
93
+ while(!aux.nil?)
94
+ yield aux.value
95
+ aux = aux.next
96
+ end
97
+ end
98
+ ##
99
+ # Devuelve el tamaño de la lista
100
+ def size()
101
+ @lenght-1
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,62 @@
1
+ ##
2
+ # Modulo donde se encuentra la clase menú (practica 8)
3
+ # Actualemente en desuso
4
+ module Menu
5
+ ##
6
+ # Clase Menu donde se almacenaban una lista con los platos y la suma calórica de os mismos
7
+ class Menu
8
+ attr_reader :nombre,:platos,:kcal,:proteinas,:lipidos,:carbohidratos
9
+ include Comparable,Enumerable
10
+ def initialize(nombre,platos)
11
+ @platos = List::List.new()
12
+ @platos.push_array(platos)
13
+ @nombre = nombre
14
+ @proteinas = getProteinas()
15
+ @lipidos = getLipidos()
16
+ @carbohidratos = getCarbohidratos()
17
+ @kcal = getKcal()
18
+ end
19
+ ##
20
+ # calcula las Kcal del menú
21
+ def getKcal()
22
+ kalorias = @platos.collect{|x| x.kcal}
23
+ (kalorias.sum).round(2)
24
+ end
25
+ ##
26
+ # Calcula la cantidad de lípidos
27
+ def getLipidos()
28
+ lipids = @platos.collect{|x| x.porlipidos()}
29
+ (lipids.sum/lipids.size()).round(2)
30
+ end
31
+ ##
32
+ # calcula la cantidad de proteinas
33
+ def getProteinas()
34
+ proteins = @platos.collect{|x| x.porproteinas()}
35
+ (proteins.sum/proteins.size()).round(2)
36
+ end
37
+ ##
38
+ # calcula la cantidad de carbohidratos
39
+ def getCarbohidratos()
40
+ carbs = @platos.collect{|x| x.porcarbohidratos()}
41
+ (carbs.sum/carbs.size()).round(2)
42
+ end
43
+ ##
44
+ # Compara entre distintos menus por las kcal
45
+ def <=>(other)
46
+ kcal<=>other.kcal
47
+ end
48
+ ## Transforma en un strig el menú
49
+ def to_s
50
+ "Menu: #{@nombre}\n Proteinas: #{@proteinas}%\nCarbohidratos:#{@carbohidratos}%\nLipidos:#{@lipidos}%\nKcal:#{@kcal}"
51
+ end
52
+ ##
53
+ #Implementa el enumerable del menu
54
+ def each
55
+ aux = @platos.head
56
+ while(!aux.nil?)
57
+ yield aux.value
58
+ aux = aux.next
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,93 @@
1
+ require "alimentos/list.rb"
2
+ require "alimentos/alimentos.rb"
3
+ ##
4
+ # Modulo donde se encuentran la clase plato y plato ambiental
5
+ module Plato
6
+ ##
7
+ # Clase plato donde se encuentran los platos dormados por sus alimentos y sus cantidades
8
+ class Plato
9
+ include List
10
+ attr_reader :nombre,:alimentos,:cantidades,:kcal
11
+ ##
12
+ # Esta clase es comparable entre ellas
13
+ include Comparable
14
+ def initialize(nombre,alimentos,cantidades)
15
+ @nombre = nombre
16
+ @alimentos = List.new()
17
+ @cantidades = List.new()
18
+ @alimentos.push_array(alimentos)
19
+ @cantidades.push_array(cantidades)
20
+ @kcal = calculoCalorico()
21
+
22
+ end
23
+ ##
24
+ # Realiza el calculo de las calorias totales del plato
25
+ def calculoCalorico()
26
+ calorias = @alimentos.collect { |x| x.calorias()}
27
+ cantidades = @cantidades.collect{ |x| x}
28
+ for i in 0...cantidades.size() do
29
+ calorias[i]=calorias[i]*0.01*cantidades[i]
30
+ end
31
+ calorias.sum
32
+ end
33
+ ##
34
+ # Realiza el calculo del porcentaje de proteinas que tiene
35
+ def porproteinas()def huella()
36
+ ienergia=0
37
+ icarbono=0
38
+ if @kcal<670
39
+ ienergia+=1
40
+ elsif @kcal > 830
41
+ ienergia+=3
42
+ else
43
+ ienergia+=2
44
+ end
45
+ if emisiones()<800
46
+ icarbono+=1
47
+ elsif emisiones()>1200
48
+ icarbono+=3
49
+ else
50
+ icarbono+=2
51
+ end
52
+ huellapropia= (ienergia+icarbono)/2
53
+ huellapropia
54
+ end
55
+ proteinas = @alimentos.collect { |x| x.proteinas}
56
+ cantidades = @cantidades.collect{|x| x}
57
+ for i in 0...proteinas.size() do
58
+ proteinas[i] = proteinas[i]*cantidades[i]*0.01
59
+ end
60
+ ((proteinas.sum*4/@kcal)*100).round(2)
61
+ end
62
+ ##
63
+ # Realiza el calculo del porcentaje de lipidos que tiene
64
+ def porlipidos()
65
+ lipidos = @alimentos.collect { |x| x.lipidos}
66
+ cantidades = @cantidades.collect{|x| x}
67
+ for i in 0...lipidos.size() do
68
+ lipidos[i]=lipidos[i]*cantidades[i]*0.01
69
+ end
70
+ ((lipidos.sum*9/@kcal)*100).round(2)
71
+ end
72
+ ##
73
+ # Realiza el calculo del porcentaje de carbohidratos que tiene
74
+ def porcarbohidratos()
75
+ carbohidratos = @alimentos.collect{ |x| x.carbohidratos }
76
+ cantidades = @cantidades.collect{|x| x}
77
+ for i in 0...carbohidratos.size() do
78
+ carbohidratos[i]=carbohidratos[i]*cantidades[i]*0.01
79
+ end
80
+ ((carbohidratos.sum*4/@kcal)*100).round(2)
81
+ end
82
+ ##
83
+ # Serializa el plato
84
+ def to_s()
85
+ "#{nombre}: #{alimentos.collect{|x| x.nombre}.join(",")} #{@kcal}kcal"
86
+ end
87
+ ##
88
+ # Permite comparar entre distintos platos según las kcal
89
+ def <=>(other)
90
+ @kcal<=>other.kcal
91
+ end
92
+ end
93
+ end