Sha256: b8174a90f2b7d8da1829247a708ae0cc675dea92659240b45d488b06f832d281

Contents?: true

Size: 2 KB

Versions: 1

Compression:

Stored size: 2 KB

Contents

module Alimento
	# Clase para representar un alimento
	class Comida
		attr_reader :nombre, :nutrientes, :impacto
		
		include Comparable
		
		# Variable de clase con los nombres de los nutrientes
		@@nombresNutrientes = ["Proteinas", "Carbohidratos", "Lipidos"]
		# Variable de clase con los nombres de impacto
		@@nombresImpacto = ["GEI", "Terreno"]
		
		# Permite acceder a la variable de clase
		# @return [Array] Devuelve el array con los nombres de nutrientes
		def self.nombres_nutrientes
			@@nombresNutrientes
		end
		
		# Permite acceder a la variable de clase
		# @return [Array] Devuelve el array con los nombres
		def self.nombres_impacto
			@@nombresImpacto
		end
		
		# Inicializa una comida
		# @param nombre [String] Nombre del alimento
		# @param nutrientes [Array] Contiene la información nutricional
		# @param impacto [Array] Contiene la informaci
		def initialize(nombre, nutrientes, impacto)
			@nombre = nombre
			@nutrientes = [@@nombresNutrientes, nutrientes].transpose.to_h
			@impacto = [@@nombresImpacto, impacto].transpose.to_h
		end
		
		# Obtiene el alimento concatenado
		# @return [String] Con formato: "Nombre: [Nutrientes..., Impacto...]"
		def to_s
			"#{@nombre}: ".concat(nutrientes.to_s, impacto.to_s) 
		end
		
		# Permite comparar alimentos
		def <=>(other)
			valor_energetico <=> other.valor_energetico
		end
		
		# Obtiene el valor del impacto diario para una mujer
		# @return [Float] Impacto diario suponiendo cdr de 2300
		def impacto_diario_mujer
			impacto_diario(2300)
		end
		
		# Obtiene el valor del impacto diario para una hombre
		# @return [Float] Impacto diario suponiendo cdr de 3000
		def impacto_diario_hombre
			impacto_diario(3000)
		end
		
		# Obtiene el valor energético del alimento
		# @return [Float] Valor energetico
		def valor_energetico
			(@nutrientes["Carbohidratos"]*4 + @nutrientes["Lipidos"]*9 + @nutrientes["Proteinas"]*4).round(2)
		end
		
		private
		
		def impacto_diario(cdr)
			impacto.values.collect { |n| (n*(cdr/valor_energetico)).round(2) }
		end		
	end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
alimento-alu0101132907-0.1.0 lib/alimento/alimento.rb