From e7a33c684f91a1599795bc0280db72fa8c2799ef Mon Sep 17 00:00:00 2001 From: cryptogopher Date: Wed, 25 Mar 2020 23:07:59 +0100 Subject: [PATCH] Dispplaying units of computed values Fixed formula error messages display when filter formula not given --- app/helpers/body_trackers_helper.rb | 4 ++-- app/models/formula.rb | 2 +- app/views/ingredients/_index.html.erb | 2 +- app/views/ingredients/_nutrients.html.erb | 4 +++- app/views/measurements/_index.html.erb | 2 +- app/views/measurements/_readouts.html.erb | 4 +++- lib/body_tracking/items_with_quantities.rb | 12 +++++------- 7 files changed, 16 insertions(+), 14 deletions(-) diff --git a/app/helpers/body_trackers_helper.rb b/app/helpers/body_trackers_helper.rb index 6a6b047..6ce9359 100644 --- a/app/helpers/body_trackers_helper.rb +++ b/app/helpers/body_trackers_helper.rb @@ -1,13 +1,13 @@ module BodyTrackersHelper def format_value(value) - amount, unitname = value + amount, unit = value case when amount.nil? '-' when amount.nan? '?' else - "#{amount} [#{unitname || '-'}]" + "#{amount} [#{unit.shortname || '-'}]" end end diff --git a/app/models/formula.rb b/app/models/formula.rb index ce8122e..a2b8d03 100644 --- a/app/models/formula.rb +++ b/app/models/formula.rb @@ -33,7 +33,7 @@ class Formula < ActiveRecord::Base "length.times.map { |index| #{p[:content]} }" : p[:content] args << get_binding(quantities, args, length).eval(code) end - args.last.map { |v| [v, nil] } + args.last.map { |v| [v, self.unit] } end private diff --git a/app/views/ingredients/_index.html.erb b/app/views/ingredients/_index.html.erb index c05ac9c..926323c 100644 --- a/app/views/ingredients/_index.html.erb +++ b/app/views/ingredients/_index.html.erb @@ -2,7 +2,7 @@ locals: {url: filter_project_ingredients_path(@project)} %> <% if @ingredients.any? { |i| i.persisted? } %> - <%= error_messages_for @formula_q.formula %> + <%= error_messages_for @formula_q.formula if @formula_q %> diff --git a/app/views/ingredients/_nutrients.html.erb b/app/views/ingredients/_nutrients.html.erb index 0a40d71..a779627 100644 --- a/app/views/ingredients/_nutrients.html.erb +++ b/app/views/ingredients/_nutrients.html.erb @@ -4,7 +4,9 @@ <% if @ingredients.any? %> <%= render partial: 'ingredients/options' %> - <%= error_messages_for @formula_q.formula, *@quantities.map { |q| q.formula } %> + <% formulas = @quantities.map { |q| q.formula } %> + <% formulas.unshift(@formula_q.formula) if @formula_q %> + <%= error_messages_for *formulas %>
diff --git a/app/views/measurements/_index.html.erb b/app/views/measurements/_index.html.erb index 292177d..a59cdd3 100644 --- a/app/views/measurements/_index.html.erb +++ b/app/views/measurements/_index.html.erb @@ -2,7 +2,7 @@ locals: {url: filter_project_measurements_path(@project)} %> <% if @measurements.any? { |m| m.persisted? } %> - <%= error_messages_for @formula_q.formula %> + <%= error_messages_for @formula_q.formula if @formula_q %>
diff --git a/app/views/measurements/_readouts.html.erb b/app/views/measurements/_readouts.html.erb index d94ddb6..c9be482 100644 --- a/app/views/measurements/_readouts.html.erb +++ b/app/views/measurements/_readouts.html.erb @@ -4,7 +4,9 @@ <% if @measurements.any? %> <%= render partial: 'measurements/options' %> - <%= error_messages_for @formula_q.formula, *@quantities.map { |q| q.formula } %> + <% formulas = @quantities.map { |q| q.formula } %> + <% formulas.unshift(@formula_q.formula) if @formula_q %> + <%= error_messages_for *formulas %>
diff --git a/lib/body_tracking/items_with_quantities.rb b/lib/body_tracking/items_with_quantities.rb index cadf558..17c5a9e 100644 --- a/lib/body_tracking/items_with_quantities.rb +++ b/lib/body_tracking/items_with_quantities.rb @@ -50,14 +50,12 @@ module BodyTracking subitem_reflection = item_class.reflections[subitem_type] subitem_class = subitem_reflection.klass subitems_scope = subitem_class.where(subitem_reflection.options[:inverse_of] => items) - item_foreign_key = subitem_reflection.foreign_key subitems = Hash.new { |h,k| h[k] = {} } - subitems_scope.includes(:quantity, :unit) - .order('quantities.lft') - .pluck('quantities.id', item_foreign_key, VALUE_COLUMNS[item_class], - 'units.shortname') - .each { |q_id, item_id, a, u_id| subitems[q_id][item_id] = [a, u_id] } - Quantity.find(subitems.keys).each { |q| subitems[q] = subitems.delete(q.id) } + subitems_scope.includes(:quantity, :unit).order('quantities.lft').each do |s| + item_id = s.send(subitem_reflection.foreign_key) + subitem_value = s.send(VALUE_COLUMNS[item_class]) + subitems[s.quantity][item_id] = [subitem_value, s.unit] + end extra_q = subitems.keys - requested_q