nutrition data cleanup

This commit is contained in:
Dan Elbert 2017-04-14 17:06:43 -05:00
parent 2a5301f5d5
commit fcb827cc77
3 changed files with 42 additions and 36 deletions

View File

@ -1,11 +1,11 @@
class NutritionDataDecorator < BaseDecorator class NutritionDataDecorator < BaseDecorator
NutritionData::NUTRIENTS.each do |m|
def format_number(n) def format_number(n)
'%.1f' % n '%.1f' % n
end end
NutritionData::NUTRIENTS.keys.each do |m|
define_method m do define_method m do
format_number(super()) format_number(super())
end end

View File

@ -1,38 +1,38 @@
class NutritionData class NutritionData
NUTRIENTS = [ NUTRIENTS = {
:protein, protein: 'g Protein',
:lipids, lipids: 'g Fat',
:kcal, kcal: 'Calories',
:fiber, fiber: 'g Fiber',
:sugar, sugar: 'g Sugar',
:carbohydrates, carbohydrates: 'g Carbohydrates',
:calcium, calcium: nil,
:iron, iron: nil,
:magnesium, magnesium: nil,
:phosphorus, phosphorus: nil,
:potassium, potassium: nil,
:sodium, sodium: 'mg Sodium',
:zinc, zinc: nil,
:copper, copper: nil,
:manganese, manganese: nil,
:vit_c, vit_c: nil,
:vit_b6, vit_b6: nil,
:vit_b12, vit_b12: nil,
:vit_a, vit_a: nil,
:vit_e, vit_e: nil,
:vit_d, vit_d: nil,
:vit_k, vit_k: 'µg Vitamin K',
:cholesterol cholesterol: nil
] }
attr_reader :errors attr_reader :errors
attr_reader *NUTRIENTS attr_reader *NUTRIENTS.keys
def initialize(recipe_ingredients) def initialize(recipe_ingredients)
@errors = [] @errors = []
NUTRIENTS.each do |n| NUTRIENTS.keys.each do |n|
self.instance_variable_set("@#{n}".to_sym, 0.0) self.instance_variable_set("@#{n}".to_sym, 0.0)
end end
@ -50,8 +50,9 @@ class NutritionData
valid_ingredients.each do |i| valid_ingredients.each do |i|
grams = i.to_grams grams = i.to_grams
missing = []
NUTRIENTS.each do |k| NUTRIENTS.each do |k, n|
value = i.ingredient.send(k) value = i.ingredient.send(k)
if value.present? if value.present?
value = value.to_f value = value.to_f
@ -59,12 +60,17 @@ class NutritionData
delta = (grams / 100.0) * value delta = (grams / 100.0) * value
self.instance_variable_set("@#{k}".to_sym, running_total + delta) self.instance_variable_set("@#{k}".to_sym, running_total + delta)
else else
@errors << "#{i.name} missing #{k} data" missing << k
end
end end
end end
NUTRIENTS.each do |k| missing = missing.map { |k| NUTRIENTS[k] }.compact
unless missing.empty?
@errors << "#{i.name} missing the following nutrients: #{missing.join(', ')}"
end
end
NUTRIENTS.each do |k, n|
v = self.instance_variable_get("@#{k}".to_sym) v = self.instance_variable_get("@#{k}".to_sym)
self.instance_variable_set("@#{k}".to_sym, v.round(2)) self.instance_variable_set("@#{k}".to_sym, v.round(2))
end end

View File

@ -83,9 +83,9 @@
<div class="col-xs-12"> <div class="col-xs-12">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
<h3 class="panel-title">Nutrition Data</h3> <h3 class="panel-title"><a href="#nutrition_panel" data-toggle="collapse">Nutrition Data</a></h3>
</div> </div>
<div class="panel-body"> <div id="nutrition_panel" class="panel-body collapse">
<% decorate(@recipe.nutrition_data, NutritionDataDecorator) do |nutrition_data| %> <% decorate(@recipe.nutrition_data, NutritionDataDecorator) do |nutrition_data| %>
<table class="table"> <table class="table">
<thead> <thead>