parsley/app/models/nutrition_data.rb

74 lines
1.5 KiB
Ruby
Raw Normal View History

2016-02-14 19:29:34 -06:00
class NutritionData
2016-06-22 13:49:03 -05:00
NUTRIENTS = [
:protein,
:lipids,
:kcal,
:fiber,
:sugar,
:carbohydrates,
:calcium,
:iron,
:magnesium,
:phosphorus,
:potassium,
:sodium,
:zinc,
:copper,
:manganese,
:vit_c,
:vit_b6,
:vit_b12,
:vit_a,
:vit_e,
:vit_d,
:vit_k,
:cholesterol
]
attr_reader :errors
attr_reader *NUTRIENTS
2016-02-14 19:29:34 -06:00
def initialize(recipe_ingredients)
@errors = []
2016-06-22 13:49:03 -05:00
NUTRIENTS.each do |n|
self.instance_variable_set("@#{n}".to_sym, 0.0)
end
2016-02-14 19:29:34 -06:00
valid_ingredients = []
recipe_ingredients.each do |i|
if i.ingredient_id.nil?
@errors << "#{i.name} has no nutrition data"
elsif !i.can_convert_to_grams?
@errors << "#{i.name} can't be converted to grams"
else
valid_ingredients << i
end
end
valid_ingredients.each do |i|
grams = i.to_grams
2016-06-22 13:49:03 -05:00
NUTRIENTS.each do |k|
2016-02-14 19:29:34 -06:00
value = i.ingredient.send(k)
if value.present?
value = value.to_f
running_total = self.instance_variable_get("@#{k}".to_sym)
delta = (grams / 100.0) * value
self.instance_variable_set("@#{k}".to_sym, running_total + delta)
else
@errors << "#{i.name} missing #{k} data"
end
end
end
2016-06-22 13:49:03 -05:00
NUTRIENTS.each do |k|
2016-02-14 19:29:34 -06:00
v = self.instance_variable_get("@#{k}".to_sym)
self.instance_variable_set("@#{k}".to_sym, v.round(2))
end
end
end