class Food::Food

Clase Food. Esta clase representa alimentos y sus propiedades.

Attributes

carbohydrates[R]

Definición de los métodos de lectura para name, proteins, carbohydrates, lipids, gei y ground.

gei[R]

Definición de los métodos de lectura para name, proteins, carbohydrates, lipids, gei y ground.

ground[R]

Definición de los métodos de lectura para name, proteins, carbohydrates, lipids, gei y ground.

lipids[R]

Definición de los métodos de lectura para name, proteins, carbohydrates, lipids, gei y ground.

name[R]

Definición de los métodos de lectura para name, proteins, carbohydrates, lipids, gei y ground.

proteins[R]

Definición de los métodos de lectura para name, proteins, carbohydrates, lipids, gei y ground.

Public Class Methods

new(name, proteins, carbohydrates, lipids, gei, ground) click to toggle source

Método para la creación de un alimento. @param name [String] Nombre del alimento. @param proteins [Numeric] Número de proteinas del alimento. @param carbohydrates [Numeric] Número de carbohidratos del alimento. @param lipids [Numeric] Número de lípidos del alimento. @param gei [Numeric] Valor de las emisiones de efecto invernadero del alimento. @param ground [Numeric] Valor de uso del terreno del alimento. @return [Food] Objeto de la clase Food.

# File lib/food/food.rb, line 17
def initialize(name, proteins, carbohydrates, lipids, gei, ground)
        
        @name, @proteins, @carbohydrates, @lipids, @gei, @ground = name, proteins, carbohydrates, lipids, gei, ground
        
end

Public Instance Methods

<=>(other) click to toggle source

Método para el correcto funcionamiento de Comparable. @param other [Food] Segundo alimento a comparar.

# File lib/food/food.rb, line 25
def <=> (other)
        energetic_value_complex(proteins, carbohydrates, lipids) <=> other.energetic_value_complex(other.proteins, other.carbohydrates, other.lipids)
end
energetic_value_complex(proteins_g, carbohydrates_g, lipids_g) click to toggle source

Método para el cálculo complejo del valor energético de un alimento. @param proteins_g [Numeric] Gramos de proteinas del alimento. @param carbohydrates_g [Numeric] Gramos de carbohidratos del alimento. @param lipids_g [Numeric] Gramos de lípidos del alimento. @return [Numeric] Valor energético del alimento.

# File lib/food/food.rb, line 70
def energetic_value_complex(proteins_g, carbohydrates_g, lipids_g)
        return energetic_value_simple(kcal_proteins(proteins_g), kcal_carbohydrates(carbohydrates_g), kcal_lipids(lipids_g)).round(1)
end
energetic_value_simple(proteins_kcal, carbohydrates_kcal, lipids_kcal) click to toggle source

Método para el cálculo simple del valor energético de un alimento. @param proteins_kcal [Numeric] Número de kcals producidas por las proteinas. @param carbohydrates_kcal [Numeric] Número de kcals producidas por los carbohidratos. @param lipids_kcal [Numeric] Número de kcals producidas por los lípidos. @return [Numeric] Valor energético del alimento.

# File lib/food/food.rb, line 61
def energetic_value_simple(proteins_kcal, carbohydrates_kcal, lipids_kcal)
        return (proteins_kcal + carbohydrates_kcal + lipids_kcal).round(1)
end
environmental_impact(impact_values) click to toggle source

Método para el cálculo del impacto ambiental simple de un array de alimentos. @param impact_values [Array] Array con los gei de los alimentos ya calculados en función de la cantidad. @return impact_sum [Numeric] Impacto ambiental del conjunto de alimentos.

# File lib/food/food.rb, line 77
def environmental_impact(impact_values)
        impact_sum = 0
        impact_values.each do |impact_val|
                impact_sum += impact_val
        end
        return impact_sum.round(2)
end
environmental_impact_complex(food, amount) click to toggle source

Método para el cálculo del impacto ambiental complejo de un array de alimentos. @param food [Array] Array con los gei de los alimentos. @param amount [Array] Array con la cantidad de cada alimento. @return [impact_sum, ground_sum] [Array] Array con el impacto ambiental y el uso del terreno del conjunto de alimentos.

# File lib/food/food.rb, line 100
def environmental_impact_complex(food, amount)
        impact_sum = 0
        ground_sum = 0
        if food.length == amount.length
                for i in (0..food.length - 1) do 
                        impact_sum += ((food[i].gei).to_f * amount[i].to_f)
                        ground_sum += ((food[i].ground).to_f * amount[i].to_f)
                end
        else
                raise 'Se ha producido un error. El tamaño del array de alimentos es distinto al tamaño del array de cantidades'
        end
        return [impact_sum.round(2), ground_sum.round(2)] 
end
ground_use(ground) click to toggle source

Método para el cálculo del uso del terreno simple de un array de alimentos. @param ground [Array] Array con los valores de uso del terreno de los alimentos ya calculados en función de la cantidad. @return ground_use [Numeric] Uso del terreno del conjunto de alimentos.

# File lib/food/food.rb, line 88
def ground_use(ground)
        ground_use_sum = 0
        ground.each do |ground_val|  
                ground_use_sum += ground_val
        end
        return ground_use_sum.round(2)       
end
kcal_carbohydrates(carbohydrates_g) click to toggle source

Método para calcular las kcals producidas por los carbohidratos. @param carbohydrates_g [Numeric] Gramos de carbohidratos del alimento. @return [Numeric] Kcals producidas por los carbohidratos.

# File lib/food/food.rb, line 45
def kcal_carbohydrates(carbohydrates_g)
        return (carbohydrates_g * 4).round(1)
end
kcal_lipids(lipids_g) click to toggle source

Método para calcular las kcals producidas por los lípidos. @param lipids_g [Numeric] Gramos de lípidos del alimento. @return [Numeric] Kcals producidas por los lípidos.

# File lib/food/food.rb, line 52
def kcal_lipids(lipids_g)
        return (lipids_g * 9).round(1)
end
kcal_proteins(proteins_g) click to toggle source

Método para calcular las kcals producidas por las proteinas. @param proteins_g [Numeric] Gramos de proteinas del alimento. @return [Numeric] Kcals producidas por las proteinas.

# File lib/food/food.rb, line 38
def kcal_proteins(proteins_g)
        return (proteins_g * 4).round(1)
end
list_amount_environmental_impact(values, amount) click to toggle source

Método para el cálculo del impacto ambiental complejo de una lista de alimentos con cantidades. @param values [List] Lista con los alimentos. @param amount [Array] Array con las cantidades de cada alimento. @return impact_sum [Numeric] Impacto ambiental del conjunto de alimentos.

# File lib/food/food.rb, line 134
def list_amount_environmental_impact(values, amount)
        impact_sum = 0
        current_node = values.tail
        i = 0
        if values.length == amount.length
                while current_node != values.head
                        impact_sum += (current_node.value.gei * amount[i]).to_f
                        current_node = current_node.next
                        i += 1
                end
                if current_node == values.head
                        impact_sum += (current_node.value.gei * amount[i]).to_f
                end
        else
                raise "Error. Los alimentos pasados y sus cantidades no son iguales."
        end
        return impact_sum.round(2)
end
list_amount_environmental_impact_annual(values, amount) click to toggle source

Método para el cálculo del impacto ambiental complejo de una lista de alimentos con cantidades en un año. @param values [List] Lista con los alimentos. @param amount [Array] Array con las cantidades de los alimentos. @return impact_sum [Numeric] Impacto ambiental del conjunto de alimentos.

# File lib/food/food.rb, line 173
def list_amount_environmental_impact_annual(values, amount)
        impact_sum = 0
        current_node = values.tail
        i = 0
        if values.length == amount.length
                while current_node != values.head
                        impact_sum += (current_node.value.gei * amount[i]).to_f
                        current_node = current_node.next
                        i += 1
                end
                if current_node == values.head
                        impact_sum += (current_node.value.gei * amount[i]).to_f
                end
        else
                raise "Error. Los alimentos pasados y sus cantidades no son iguales."
        end
        return (impact_sum * 365).round(2)
end
list_amount_ground_use(values, amount) click to toggle source

Método para el cálculo del uso del terreno complejo de una lista de alimentos con cantidades. @param values [List] Lista con los alimentos. @param amount [Array] Array con las cantidades de los alimentos. @return ground_sum [Numeric] Uso del terreno del conjunto de alimentos.

# File lib/food/food.rb, line 212
def list_amount_ground_use(values, amount)
        ground_sum = 0
        current_node = values.tail
        i = 0
        if values.length == amount.length
                while current_node != values.head
                        ground_sum += (current_node.value.ground * amount[i]).to_f
                        current_node = current_node.next
                        i += 1
                end
                if current_node == values.head
                        ground_sum += (current_node.value.ground * amount[i]).to_f
                end
        else
                raise "Erorr. Los alimentos pasados y sus cantidades no son iguales."
        end
        return ground_sum.round(2)
end
list_amount_ground_use_annual(values, amount) click to toggle source

Método para el cálculo del uso del terreno complejo de una lista de alimentos en un año. @param values [List] Lista con los alimentos. @param amount [Array] Array con las cantidades de los alimentos. @return ground_sum [Numeric] Uso del terreno del conjunto de alimentos.

# File lib/food/food.rb, line 235
def list_amount_ground_use_annual(values, amount)
        ground_sum = 0
        current_node = values.tail
        i = 0
        if values.length == amount.length
                while current_node != values.head
                        ground_sum += (current_node.value.ground * amount[i]).to_f
                        current_node = current_node.next
                        i += 1
                end
                if current_node == values.head
                        ground_sum += (current_node.value.ground * amount[i]).to_f
                end
        else
                raise "Erorr. Los alimentos pasados y sus cantidades no son iguales."
        end
        return (ground_sum * 365).round(2)
end
list_environmental_impact(values) click to toggle source

Método para el cálculo del impacto ambiental simple de una lista de alimentos. @param values [List] Lista con los alimentos. @return impact_sum [Numeric] Impacto ambiental del conjunto de alimentos.

# File lib/food/food.rb, line 117
def list_environmental_impact(values)
        impact_sum = 0
        current_node = values.head
        while current_node != values.tail    
                impact_sum += (current_node.value.gei).to_f
                current_node = current_node.prev
        end
        if current_node == values.tail
                impact_sum += (current_node.value.gei).to_f
        end
        return impact_sum.round(2)
end
list_environmental_impact_annual(values) click to toggle source

Método para el cálculo del impacto ambiental simple de una lista de alimentos en un año. @param values [List] Lista con los alimentos. @return impact_sum [Numeric] Impacto ambiental del conjunto de alimentos.

# File lib/food/food.rb, line 156
def list_environmental_impact_annual(values)
        impact_sum = 0
        current_node = values.head
        while current_node != values.tail    
                impact_sum += (current_node.value.gei).to_f
                current_node = current_node.prev
        end
        if current_node == values.tail
                impact_sum += (current_node.value.gei).to_f
        end
        return (impact_sum * 365).round(2)
end
list_ground_use(values) click to toggle source

Método para el cálculo del uso del terreno simple de una lista de alimentos. @param values [List] Lista con los alimentos. @return ground_sum [Numeric] Uso del terreno del conjunto de alimentos.

# File lib/food/food.rb, line 195
def list_ground_use(values)
        ground_sum = 0
        current_node = values.head
        while current_node != values.tail
                ground_sum += (current_node.value.ground).to_f
                current_node = current_node.prev
        end
        if current_node == values.tail
                ground_sum += (current_node.value.ground).to_f
        end
        return ground_sum.round(2)
end
list_ground_use_annual(values) click to toggle source

Método para el cálculo del uso del terreno simple de una lista de alimentos en un año. @param values [List] Lista con los alimentos. @return ground_sum [Numeric] Uso del terreno del conjunto de alimentos.

# File lib/food/food.rb, line 257
def list_ground_use_annual(values)
        ground_sum = 0
        current_node = values.head
        while current_node != values.tail
                ground_sum += (current_node.value.ground).to_f
                current_node = current_node.prev
        end
        if current_node == values.tail
                ground_sum += (current_node.value.ground).to_f
        end
        return (ground_sum * 365).round(2)
end
to_s() click to toggle source

Método para formatear un alimento. @return [String] Cadena con la descripción del alimento.

# File lib/food/food.rb, line 31
def to_s
        "#{@name}: #{@proteins} g Proteins | #{@carbohydrates} g Carbohydrates | #{@lipids} g Lipids | #{@gei} kgCO2eq GEI | #{@ground} m2año Ground"   
end