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

carbohydrates[R]
glucose_concentration[R]
lipids[R]
name[R]
proteins[R]

Public Class Methods

new(name, proteins, carbohydrates, lipids, glucose_concentration = nil, glucose = nil) click to toggle source

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

<=>(other) click to toggle source

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
aibc(individual) click to toggle source

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
get_nutritional_value() click to toggle source

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
glycemic_index() click to toggle source

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
individual_glycemic_index(individual) click to toggle source

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
to_s() click to toggle source

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
weight() click to toggle source
# File lib/nutritional_calculator/food.rb, line 88
def weight
  @proteins + @carbohydrates + @lipids
end

Private Instance Methods

s_value(individual, i) click to toggle source
# 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