Class: Dsl::Platodsl

Inherits:
Object
  • Object
show all
Includes:
Comparable, List
Defined in:
lib/alimentos/dsl.rb

Constant Summary

Constants included from List

List::VERSION

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(nombre, &block) ⇒ Platodsl

Returns a new instance of Platodsl.



9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/alimentos/dsl.rb', line 9

def initialize(nombre,&block)
    @nombre = nombre
    @alimentos = List.new()
    @cantidades = List.new()
    
    if block_given?
        if block.arity == 1
            yield self
        else
            instance_eval(&block)
        end
    end
end

Instance Attribute Details

#alimentosObject

Returns the value of attribute alimentos.



5
6
7
# File 'lib/alimentos/dsl.rb', line 5

def alimentos
  @alimentos
end

#cantidadesObject

Returns the value of attribute cantidades.



5
6
7
# File 'lib/alimentos/dsl.rb', line 5

def cantidades
  @cantidades
end

#kcalObject

Returns the value of attribute kcal.



5
6
7
# File 'lib/alimentos/dsl.rb', line 5

def kcal
  @kcal
end

#nombreObject

Returns the value of attribute nombre.



5
6
7
# File 'lib/alimentos/dsl.rb', line 5

def nombre
  @nombre
end

Instance Method Details

#<=>(other) ⇒ Object

Permite comparar entre distintos platos según las kcal



119
120
121
# File 'lib/alimentos/dsl.rb', line 119

def <=>(other)
    @kcal<=>other.kcal
end

#alimento(aliment, options = {}) ⇒ Object



22
23
24
25
26
# File 'lib/alimentos/dsl.rb', line 22

def alimento(aliment, options={})
    @alimentos.push(aliment)
    @cantidades.push(options[:cantidad]) if options[:cantidad]
    @kcal=calculoCalorico()
end

#calculoCaloricoObject

Realiza el calculo de las calorias totales del plato



30
31
32
33
34
35
36
37
# File 'lib/alimentos/dsl.rb', line 30

def calculoCalorico()
    calorias = @alimentos.collect { |x| x.calorias()}
    cantidades = @cantidades.collect{ |x| x}
    for i in 0...cantidades.size() do
        calorias[i]=calorias[i]*0.01*cantidades[i]
    end
    calorias.sum
end

#emisionesObject



58
59
60
61
62
63
64
65
# File 'lib/alimentos/dsl.rb', line 58

def emisiones()
    emisiones= @alimentos.collect{ |x| x.emisiones }
    cantidades = @cantidades.collect{|x| x}
    for i in 0...emisiones.size() do
        emisiones[i]=emisiones[i]*cantidades[i]*0.01
    end
    (emisiones.sum).round(2)
end

#huellaObject



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/alimentos/dsl.rb', line 86

def huella()
    ienergia=0
    icarbono=0
    if @kcal<670
				ienergia+=1
			elsif @kcal > 830
				ienergia+=3
			else 
				ienergia+=2
			end
			if emisiones()<800
				icarbono+=1
			elsif emisiones()>1200
				icarbono+=3
			else
				icarbono+=2
			end
			huellapropia= (ienergia+icarbono)/2
			huellapropia
end

#m2Object

Calcula los metros cuadrados que gasta cada plato



68
69
70
71
72
73
74
75
# File 'lib/alimentos/dsl.rb', line 68

def m2()
    m2= @alimentos.collect{ |x| x.m2}
    cantidades = @cantidades.collect{|x| x}
    for i in 0...m2.size() do
        m2[i]=m2[i]*cantidades[i]*0.01
    end
    (m2.sum).round(2)
end

#porcarbohidratosObject

Realiza el calculo del porcentaje de carbohidratos que tiene



78
79
80
81
82
83
84
85
# File 'lib/alimentos/dsl.rb', line 78

def porcarbohidratos()
    carbohidratos = @alimentos.collect{ |x| x.carbohidratos }
    cantidades = @cantidades.collect{|x| x}
    for i in 0...carbohidratos.size() do
        carbohidratos[i]=carbohidratos[i]*cantidades[i]*0.01
    end
    ((carbohidratos.sum*4/@kcal)*100).round(2)
end

#porlipidosObject

Realiza el calculo del porcentaje de lipidos que tiene



50
51
52
53
54
55
56
57
# File 'lib/alimentos/dsl.rb', line 50

def porlipidos()
    lipidos = @alimentos.collect { |x| x.lipidos}
    cantidades = @cantidades.collect{|x| x}
    for i in 0...lipidos.size() do
        lipidos[i]=lipidos[i]*cantidades[i]*0.01
    end
    ((lipidos.sum*9/@kcal)*100).round(2)
end

#porproteinasObject

Realiza el calculo del porcentaje de proteinas que tiene



40
41
42
43
44
45
46
47
# File 'lib/alimentos/dsl.rb', line 40

def porproteinas()
    proteinas = @alimentos.collect { |x| x.proteinas}
    cantidades = @cantidades.collect{|x| x}
    for i in 0...proteinas.size() do
        proteinas[i] = proteinas[i]*cantidades[i]*0.01
    end
    ((proteinas.sum*4/@kcal)*100).round(2)
end

#to_sObject

Serializa el plato



108
109
110
111
112
113
114
115
116
# File 'lib/alimentos/dsl.rb', line 108

def to_s()
    output = "#{@nombre}:\n"
    @alimentos.zip(@cantidades).each do |aliment,cantidad|
        output<<"\t\t#{aliment}: #{cantidad}g\n"
    end
    output << "\t\tValor energético: #{@kcal}kcal\n"
    output << "\t\tHuella: #{huella()}"
    output
end