Class: Menu

Inherits:
Object
  • Object
show all
Includes:
Comparable
Defined in:
lib/Dieta/menu.rb

Overview

Menú dietético compuesto por varios platos

Author:

Direct Known Subclasses

MenuPorAlimentos, MenuPorEdad

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(&block) ⇒ Menu

Constructor

Parameters:

  • &block (Block)

    Bloque



22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/Dieta/menu.rb', line 22

def initialize (&block)
	@platos = []

	if block_given?
		# Recibimos un bloque
           if block.arity == 1
               yield self
           else
               instance_eval &block 
           end
       end
end

Instance Attribute Details

#platosArray<Plato> (readonly)

Platos que componen el menu

Returns:

  • (Array<Plato>)

    the current value of platos



16
17
18
# File 'lib/Dieta/menu.rb', line 16

def platos
  @platos
end

#porcentaje_diarioString (readonly)

Porcentaje diario

Returns:

  • (String)

    the current value of porcentaje_diario



16
17
18
# File 'lib/Dieta/menu.rb', line 16

def porcentaje_diario
  @porcentaje_diario
end

#porcentaje_grasasFixnum (readonly)

Procentaje de grasas que contiene

Returns:

  • (Fixnum)

    the current value of porcentaje_grasas



16
17
18
# File 'lib/Dieta/menu.rb', line 16

def porcentaje_grasas
  @porcentaje_grasas
end

#porcentaje_hidratosFixnum (readonly)

Porcentaje de hidratos que contiene

Returns:

  • (Fixnum)

    the current value of porcentaje_hidratos



16
17
18
# File 'lib/Dieta/menu.rb', line 16

def porcentaje_hidratos
  @porcentaje_hidratos
end

#porcentaje_proteinasFixnum (readonly)

Porcentaje de proteinas que contiene

Returns:

  • (Fixnum)

    the current value of porcentaje_proteinas



16
17
18
# File 'lib/Dieta/menu.rb', line 16

def porcentaje_proteinas
  @porcentaje_proteinas
end

#tituloString (readonly)

Título del menú

Returns:

  • (String)

    the current value of titulo



16
17
18
# File 'lib/Dieta/menu.rb', line 16

def titulo
  @titulo
end

#vctFloat (readonly)

Valor calórico total

Returns:

  • (Float)

    the current value of vct



16
17
18
# File 'lib/Dieta/menu.rb', line 16

def vct
  @vct
end

Instance Method Details

#<=>(other) ⇒ Object

Función de comparación para Mixin Comparable



90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/Dieta/menu.rb', line 90

def <=> (other)
	# devolvemos nil si no son del tipo Menu
       return nil unless other.is_a? Menu
       # realizamos las comparaciones necesarias
	return @titulo <=> other.titulo unless @titulo == other.titulo
	return @porcentaje_diario <=> other.porcentaje_diario unless @porcentaje_diario == other.porcentaje_diario
       return @platos <=> other.platos unless @platos & other.platos == @platos
	return @titulo <=> other.titulo unless @titulo == other.titulo
	return @porcentaje_proteinas <=> other.porcentaje_proteinas unless @porcentaje_proteinas == other.porcentaje_proteinas
	return @porcentaje_grasas <=> other.porcentaje_grasas unless @porcentaje_grasas == other.porcentaje_grasas
       return @porcentaje_hidratos <=> other.porcentaje_hidratos
end

#get_plato(posicion) ⇒ Plato?

Returns el plato o nil si no existe plato en la posición indicada.

Returns:

  • (Plato, nil)

    el plato o nil si no existe plato en la posición indicada



74
75
76
77
78
# File 'lib/Dieta/menu.rb', line 74

def get_plato (posicion)
	if @platos.length > 0 && posicion.instance_of?(Fixnum) && posicion > -1
		@platos[posicion]
	end
end

#ingesta(cantidad) ⇒ Object

Asigna el porcentaje diario

Parameters:

  • cantidad (String)

    porcentaje diario

Raises:

  • (ArgumentError)


67
68
69
70
# File 'lib/Dieta/menu.rb', line 67

def ingesta(cantidad)
	raise ArgumentError.new("Porcentaje diario no es un String") if !cantidad.instance_of?(String)
	@porcentaje_diario = cantidad
end

#plato(options = {}) ⇒ Object

Inserta un plato



43
44
45
46
47
48
49
50
51
# File 'lib/Dieta/menu.rb', line 43

def plato(options = {})
	pl = Plato.new do
		description options[:descripcion] if options[:descripcion]
		porcion options[:porcion] if options[:porcion]
		cantidad options[:cantidad] if options[:cantidad]
	end

	@platos << pl
end

#porcentajes(options = {}) ⇒ Object

Inserta los porcentajes

Raises:

  • (ArgumentError)


54
55
56
57
58
59
60
61
62
63
# File 'lib/Dieta/menu.rb', line 54

def porcentajes(options = {})
	raise ArgumentError.new("Valor de V.C.T. no válido") if options[:vct] && !options[:vct].instance_of?(Float)
	raise ArgumentError.new("Valor de porcentaje de proteinas no válido") if options[:proteinas] && !options[:proteinas].instance_of?(Fixnum)
	raise ArgumentError.new("Valor de porcentaje de hidratos no válido") if options[:hidratos] && !options[:hidratos].instance_of?(Fixnum)
	raise ArgumentError.new("Valor de porcentaje de grasas no válido") if options[:grasas] && !options[:grasas].instance_of?(Fixnum)
	@vct = options[:vct] if options[:vct]
	@porcentaje_proteinas = options[:proteinas] if options[:proteinas]
	@porcentaje_hidratos = options[:hidratos] if options[:hidratos]
	@porcentaje_grasas = options[:grasas] if options[:grasas]
end

#title(valor) ⇒ Object

Asigna el título del menú

Parameters:

  • valor (String)

    titulo

Raises:

  • (ArgumentError)


37
38
39
40
# File 'lib/Dieta/menu.rb', line 37

def title(valor)
	raise ArgumentError.new("PEl titulo no es un String") if !valor.instance_of?(String)
	@titulo = valor
end

#to_sObject

Devuelve cadena de texto que representa al menú



81
82
83
84
85
86
87
# File 'lib/Dieta/menu.rb', line 81

def to_s
	s = "#{@titulo.upcase} (#{@porcentaje_diario}%)\n"
	@platos.each do |plato|
		s << "- #{plato.to_s}"
	end
	s << "V.C.T | %\t#{@vct.round(1)} kcal | #{@porcentaje_proteinas}% - #{@porcentaje_grasas}% - #{@porcentaje_hidratos}%\n"
end