From 304c8c788d4ac1e6dc6992b052f9537b654c5db3 Mon Sep 17 00:00:00 2001 From: cryptogopher Date: Wed, 6 Nov 2019 22:58:07 +0100 Subject: [PATCH] Aggregated quantity calculation for all ingredients --- app/models/ingredient.rb | 17 +++++++++-------- app/models/quantity.rb | 2 +- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/app/models/ingredient.rb b/app/models/ingredient.rb index 51cbb57..5547f90 100644 --- a/app/models/ingredient.rb +++ b/app/models/ingredient.rb @@ -66,15 +66,16 @@ class Ingredient < ActiveRecord::Base if deps.empty? input_q = q.formula_quantities - ingredients.each do |i| - next if !nutrients[q.name][i.id].nil? - inputs = input_q.map do |i_q| - default_input = [nil, nil] - nutrient_data = (completed_q[i_q.name] || nutrients[i_q.name])[i.id] - [i_q.name, (nutrient_data || [nil, nil])[0]] - end - nutrients[q.name][i.id] = q.calculate(inputs) + inputs = ingredients.select { |i| nutrients[q.name][i.id].nil? }.map do |i| + [ + i, + input_q.map do |i_q| + nutrient_data = (completed_q[i_q.name] || nutrients[i_q.name])[i.id] + [i_q.name, (nutrient_data || [nil, nil])[0]] + end.to_h + ] end + q.calculate(inputs).each { |i, result| nutrients[q.name][i.id] = result } unchecked_q.unshift([q, deps]) else unchecked_q << [q, deps] diff --git a/app/models/quantity.rb b/app/models/quantity.rb index 40fee40..7ed3757 100644 --- a/app/models/quantity.rb +++ b/app/models/quantity.rb @@ -70,6 +70,6 @@ class Quantity < ActiveRecord::Base end def calculate(inputs) - [1.0, nil] + inputs.map { |i, values| [i, 1.0] } end end