Class: NutritionalCalculator::Food

Inherits:
Object
  • Object
show all
Includes:
Comparable
Defined in:
lib/nutritional_calculator/food.rb

Overview

Esta clase representa a un alimento de manera abstracta. Contiene su nombre y su información nutricional. Se ha incluido el módulo Comparable.

Direct Known Subclasses

FoodGroup

Constant Summary collapse

PROTEINS_VALUE =

valor nutricional de las proteinas: 4.0

4.0
CARBOHYDRATE_VALUE =

Valor nutricional de los glúcidos: 4.0

4.0
LIPIDS_VALUE =

Valor nutricional de los lípidos: 9.0

9.0

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, proteins, carbohydrates, lipids, glucose_concentration = nil, glucose = nil) ⇒ Food

Constructor.

Parameters:

  • name (String)

    Nombre del alimento que queremos representar.

  • proteins (float)

    Gramos de proteína que contiene el alimanto.

  • carbohydrates (float)

    Gramos de glúcidos que contiene el alimanto.

  • lipids (float)

    Gramos de lípidos que contiene el alimanto.

  • glucose_concentration (Array[Array[float]]) (defaults to: nil)

    listas de concentraciones de glucosa tras la ingesta del alimento para varios individuos.

  • glucose (Food) (defaults to: nil)

    objeto glucosa de la clase Food, necesario para hacer los cálculos. Si el valor es nulo entonces es el objeto glucosa.



30
31
32
33
34
35
36
37
# 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

Instance Attribute Details

#carbohydratesObject (readonly)

Returns the value of attribute carbohydrates.



19
20
21
# File 'lib/nutritional_calculator/food.rb', line 19

def carbohydrates
  @carbohydrates
end

#glucose_concentrationObject (readonly)

Returns the value of attribute glucose_concentration.



19
20
21
# File 'lib/nutritional_calculator/food.rb', line 19

def glucose_concentration
  @glucose_concentration
end

#lipidsObject (readonly)

Returns the value of attribute lipids.



19
20
21
# File 'lib/nutritional_calculator/food.rb', line 19

def lipids
  @lipids
end

#nameObject (readonly)

Returns the value of attribute name.



19
20
21
# File 'lib/nutritional_calculator/food.rb', line 19

def name
  @name
end

#proteinsObject (readonly)

Returns the value of attribute proteins.



19
20
21
# File 'lib/nutritional_calculator/food.rb', line 19

def proteins
  @proteins
end

Instance Method Details

#<=>(other) ⇒ Object

Método que permite hacer al alimento Comparable. En mi caso el criterio de comparación ha sido el valor nutricional del alimento.

Parameters:



62
63
64
# File 'lib/nutritional_calculator/food.rb', line 62

def <=> (other)
  get_nutritional_value <=> other.get_nutritional_value
end

#aibc(individual) ⇒ Object

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.

Parameters:

  • individual (int)

    Individuo para el cual queremos calcular el AIBC del alimento.



70
71
72
# 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_valuefloat

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.

Returns:

  • (float)

    Valor nutricional del alimento



53
54
55
# File 'lib/nutritional_calculator/food.rb', line 53

def get_nutritional_value
  @proteins * PROTEINS_VALUE + @carbohydrates * CARBOHYDRATE_VALUE + @lipids * LIPIDS_VALUE
end

#glycemic_indexObject

Método que calcula el índice glucémico del alimento, haciendo la media del índice glucémico para los individuos.



84
85
86
# 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) ⇒ Object

Método que calcula el índice glucémico del alimento para un individuo concreto. Se ha realizado mediante programación funcional.

Parameters:

  • individual (int)

    Individuo para el cual queremos calcular el índice glucémico del alimento.



78
79
80
# File 'lib/nutritional_calculator/food.rb', line 78

def individual_glycemic_index(individual)
  100.0 * (aibc(individual) / @glucose.aibc(individual))
end

#to_sString

Método que transforma el objeto en un String. De esta forma será formateado por pantalla.

Returns:

  • (String)

    String con el objeto formateado.



43
44
45
# File 'lib/nutritional_calculator/food.rb', line 43

def to_s
  "#{@name} -> proteínas(#{@proteins}) glúcidos(#{@carbohydrates}) lípidos(#{@lipids})"
end

#weightObject



88
89
90
# File 'lib/nutritional_calculator/food.rb', line 88

def weight
  @proteins + @carbohydrates + @lipids
end