class NutritionalCalculator::Food
Esta clase representa a un alimento de manera abstracta. Contiene su nombre y su información nutricional. Se ha incluido el módulo Comparable.
Constants
- CARBOHYDRATE_VALUE
Valor nutricional de los glúcidos: 4.0
- LIPIDS_VALUE
Valor nutricional de los lípidos: 9.0
- PROTEINS_VALUE
valor nutricional de las proteinas: 4.0
Attributes
Public Class Methods
Constructor. @param name [String] Nombre del alimento que queremos representar. @param proteins [float] Gramos de proteína que contiene el alimanto. @param carbohydrates [float] Gramos de glúcidos que contiene el alimanto. @param lipids [float] Gramos de lípidos que contiene el alimanto. @param glucose_concentration[Array[Array]] listas de concentraciones de glucosa tras la ingesta del alimento para varios individuos. @param glucose objeto glucosa de la clase Food
, necesario para hacer los cálculos. Si el valor es nulo entonces es el objeto glucosa.
# File lib/nutritional_calculator/food.rb, line 30 def initialize(name, proteins, carbohydrates, lipids, glucose_concentration = nil, glucose = nil) @name = name @proteins = proteins @carbohydrates = carbohydrates @lipids = lipids @glucose_concentration = glucose_concentration @glucose = glucose end
Public Instance Methods
Método que permite hacer al alimento Comparable. En mi caso el criterio de comparación ha sido el valor nutricional del alimento. @param other [NutritionalCalculator::Food] alimento con el cual queremos comparar el alimento.
# File lib/nutritional_calculator/food.rb, line 62 def <=> (other) get_nutritional_value <=> other.get_nutritional_value end
Método que permite calcular el área incremental bajo la curva de las mediciones de glucosa de un alimento. Se ha realizado mediante programación funcional. @param individual [int] Individuo para el cual queremos calcular el AIBC del alimento.
# File lib/nutritional_calculator/food.rb, line 70 def aibc(individual) (1..24).lazy.map { |i| s_value(individual, i) }.map { |j| (5.0 / 2.0) * j }.reduce('+') end
Método que devuelve el valor nutricional del alimento. El valor nutricional se calcula como la suma del producto de los valores nutricionales de los macronutrientes por los gramos de dicho macronutriente presente en el alimento. @return [float] Valor nutricional del alimento
# File lib/nutritional_calculator/food.rb, line 53 def get_nutritional_value @proteins * PROTEINS_VALUE + @carbohydrates * CARBOHYDRATE_VALUE + @lipids * LIPIDS_VALUE end
Método que calcula el índice glucémico del alimento, haciendo la media del índice glucémico para los individuos.
# File lib/nutritional_calculator/food.rb, line 84 def glycemic_index (0...@glucose_concentration.size).map { |i| individual_glycemic_index(i) }.instance_eval { reduce('+') / size.to_f} end
Método que calcula el índice glucémico del alimento para un individuo concreto. Se ha realizado mediante programación funcional. @param individual [int] Individuo para el cual queremos calcular el índice glucémico del alimento.
# File lib/nutritional_calculator/food.rb, line 78 def individual_glycemic_index(individual) 100.0 * (aibc(individual) / @glucose.aibc(individual)) end
Método que transforma el objeto en un String. De esta forma será formateado por pantalla. @return [String] String con el objeto formateado.
# File lib/nutritional_calculator/food.rb, line 43 def to_s "#{@name} -> proteínas(#{@proteins}) glúcidos(#{@carbohydrates}) lípidos(#{@lipids})" end
# File lib/nutritional_calculator/food.rb, line 88 def weight @proteins + @carbohydrates + @lipids end
Private Instance Methods
# File lib/nutritional_calculator/food.rb, line 93 def s_value(individual, i) @glucose_concentration[individual][i] + @glucose_concentration[individual][i - 1] - 2 * @glucose_concentration[individual][0] end