1
0

Added reference to Unit in Formula

Updated defaults identifiers and units in default formulas
This commit is contained in:
cryptogopher 2020-03-25 17:57:49 +01:00
parent c262e82c7b
commit 031b857925
3 changed files with 126 additions and 122 deletions

View File

@ -4,6 +4,7 @@ class Formula < ActiveRecord::Base
attr_reader :parts, :quantities attr_reader :parts, :quantities
belongs_to :quantity, inverse_of: :formula, required: true belongs_to :quantity, inverse_of: :formula, required: true
belongs_to :unit, required: true
validates :code, presence: true validates :code, presence: true
validate do validate do

View File

@ -23,6 +23,7 @@ class CreateSchema < ActiveRecord::Migration
t.references :quantity t.references :quantity
t.string :code t.string :code
t.boolean :zero_nil t.boolean :zero_nil
t.references :unit
t.timestamps null: false t.timestamps null: false
end end

View File

@ -2,152 +2,154 @@ class LoadDefaults < ActiveRecord::Migration
def change def change
reversible do |dir| reversible do |dir|
dir.up do dir.up do
Unit.create project: nil, shortname: "g", name: "gram" u_a = Unit.create project: nil, shortname: "g", name: "gram"
Unit.create project: nil, shortname: "mg", name: "milligram" u_aa = Unit.create project: nil, shortname: "mg", name: "milligram"
Unit.create project: nil, shortname: "ug", name: "microgram" u_ab = Unit.create project: nil, shortname: "kg", name: "kilogram"
Unit.create project: nil, shortname: "kg", name: "kilogram" u_ac = Unit.create project: nil, shortname: "ug", name: "microgram"
Unit.create project: nil, shortname: "kcal", name: "kilocalorie" u_b = Unit.create project: nil, shortname: "kcal", name: "kilocalorie"
Unit.create project: nil, shortname: "%", name: "percent" u_c = Unit.create project: nil, shortname: "%", name: "percent"
# https://www.fsai.ie/uploadedFiles/Consol_Reg1169_2011.pdf # https://www.fsai.ie/uploadedFiles/Consol_Reg1169_2011.pdf
# https://www.fsai.ie/legislation/food_legislation/food_information_fic/nutrition_labelling.html # https://www.fsai.ie/legislation/food_legislation/food_information_fic/nutrition_labelling.html
e1 = Quantity.create project: nil, domain: :diet, parent: nil, name: "Energy", e_a = Quantity.create project: nil, domain: :diet, parent: nil,
description: "Total energy" name: "Energy", description: "Total energy"
e2 = Quantity.create project: nil, domain: :diet, parent: e1, name: "Calculated", e_aa = Quantity.create project: nil, domain: :diet, parent: e_a,
description: "Total energy calculated from macronutrients" name: "Calculated", description: "Total energy calculated from macronutrients"
p1 = Quantity.create project: nil, domain: :diet, parent: nil, name: "Proteins", p_a = Quantity.create project: nil, domain: :diet, parent: nil,
description: "Total amount of proteins" name: "Proteins", description: "Total amount of proteins"
f1 = Quantity.create project: nil, domain: :diet, parent: nil, name: "Fats", f_a = Quantity.create project: nil, domain: :diet, parent: nil,
description: "Total lipids, including phospholipids" name: "Fats", description: "Total lipids, including phospholipids"
f2 = Quantity.create project: nil, domain: :diet, parent: f1, name: "Fatty acids", f_aa = Quantity.create project: nil, domain: :diet, parent: f_a,
description: "" name: "Fatty acids", description: ""
f3 = Quantity.create project: nil, domain: :diet, parent: f2, name: "Saturated", f_aaa = Quantity.create project: nil, domain: :diet, parent: f_aa,
description: "Fatty acids without double bond" name: "Saturated", description: "Fatty acids without double bond"
f4 = Quantity.create project: nil, domain: :diet, parent: f2, name: "Unsaturated", f_aab = Quantity.create project: nil, domain: :diet, parent: f_aa,
description: "" name: "Unsaturated", description: ""
f5 = Quantity.create project: nil, domain: :diet, parent: f4, name: "Monounsaturated", f_aaba = Quantity.create project: nil, domain: :diet, parent: f_aab,
description: "Fatty acids with one cis double bond" name: "Monounsaturated", description: "Fatty acids with one cis double bond"
f6 = Quantity.create project: nil, domain: :diet, parent: f4, name: "Polyunsaturated", f_aabb = Quantity.create project: nil, domain: :diet, parent: f_aab,
description: "Fatty acids with two or more cis, cis-methylene interrupted" \ name: "Polyunsaturated", description: "Fatty acids with two or more cis," \
" double bonds; PUFA" " cis-methylene interrupted double bonds; PUFA"
f7 = Quantity.create project: nil, domain: :diet, parent: f4, name: "Trans", f_aabba = Quantity.create project: nil, domain: :diet, parent: f_aabb,
description: "Fatty acids with at least one non-conjugated C-C double bond in the" \ name: "Omega-3 (n-3)", description: ""
" trans configuration" f_aabbaa = Quantity.create project: nil, domain: :diet, parent: f_aabba,
f8 = Quantity.create project: nil, domain: :diet, parent: f6, name: "Omega-3 (n-3)", name: "ALA 18:3(n-3)", description: "alpha-Linolenic acid"
description: "" f_aabbab = Quantity.create project: nil, domain: :diet, parent: f_aabba,
f9 = Quantity.create project: nil, domain: :diet, parent: f6, name: "Omega-6 (n-6)", name: "EPA 20:5(n-3)", description: "Eicosapentaenoic acid; also icosapentaenoic" \
description: "" " acid"
f10 = Quantity.create project: nil, domain: :diet, parent: f8, name: "ALA 18:3(n-3)", f_aabbac = Quantity.create project: nil, domain: :diet, parent: f_aabba,
description: "alpha-Linolenic acid" name: "DHA 22:6(n-3)", description: "Docosahexaenoic acid"
f11 = Quantity.create project: nil, domain: :diet, parent: f8, name: "EPA 20:5(n-3)", f_aabbb = Quantity.create project: nil, domain: :diet, parent: f_aabb,
description: "Eicosapentaenoic acid; also icosapentaenoic acid" name: "Omega-6 (n-6)", description: ""
f12 = Quantity.create project: nil, domain: :diet, parent: f8, name: "DHA 22:6(n-3)", f_aabc = Quantity.create project: nil, domain: :diet, parent: f_aab,
description: "Docosahexaenoic acid" name: "Trans", description: "Fatty acids with at least one non-conjugated C-C" \
" double bond in the trans configuration"
c1 = Quantity.create project: nil, domain: :diet, parent: nil, name: "Carbohydrates", c_a = Quantity.create project: nil, domain: :diet, parent: nil,
description: "Total amount of carbohydrates" name: "Carbohydrates", description: "Total amount of carbohydrates"
c2 = Quantity.create project: nil, domain: :diet, parent: c1, name: "Digestible", c_aa = Quantity.create project: nil, domain: :diet, parent: c_a,
description: "" name: "Digestible", description: ""
c3 = Quantity.create project: nil, domain: :diet, parent: c2, name: "Sugars", c_aaa = Quantity.create project: nil, domain: :diet, parent: c_aa,
description: "Monosaccharides and disaccharides, excluding polyols" name: "Sugars", description: "Monosaccharides and disaccharides, excluding polyols"
c4 = Quantity.create project: nil, domain: :diet, parent: c3, name: "Monosaccharides", c_aaaa = Quantity.create project: nil, domain: :diet, parent: c_aaa,
description: "" name: "Monosaccharides", description: ""
c5 = Quantity.create project: nil, domain: :diet, parent: c4, name: "Glucose", c_aaaaa = Quantity.create project: nil, domain: :diet, parent: c_aaaa,
description: "" name: "Glucose", description: ""
c6 = Quantity.create project: nil, domain: :diet, parent: c4, name: "Fructose", c_aaaab = Quantity.create project: nil, domain: :diet, parent: c_aaaa,
description: "" name: "Fructose", description: ""
c7 = Quantity.create project: nil, domain: :diet, parent: c3, name: "Disaccharides", c_aaab = Quantity.create project: nil, domain: :diet, parent: c_aaa,
description: "" name: "Disaccharides", description: ""
c8 = Quantity.create project: nil, domain: :diet, parent: c7, name: "Sucrose", c_aaaba = Quantity.create project: nil, domain: :diet, parent: c_aaab,
description: "" name: "Sucrose", description: ""
c9 = Quantity.create project: nil, domain: :diet, parent: c7, name: "Lactose", c_aaabb = Quantity.create project: nil, domain: :diet, parent: c_aaab,
description: "" name: "Lactose", description: ""
c10 = Quantity.create project: nil, domain: :diet, parent: c2, name: "Polyols", c_aab = Quantity.create project: nil, domain: :diet, parent: c_aa,
description: "Alcohols containing more than 2 hydroxyl groups" name: "Polyols", description: "Alcohols containing more than 2 hydroxyl groups"
c11 = Quantity.create project: nil, domain: :diet, parent: c2, c_aac = Quantity.create project: nil, domain: :diet, parent: c_aa,
name: "Polysaccharides", description: "" name: "Polysaccharides", description: ""
c12 = Quantity.create project: nil, domain: :diet, parent: c11, name: "Starch", c_aaca = Quantity.create project: nil, domain: :diet, parent: c_aac,
description: "" name: "Starch", description: ""
c13 = Quantity.create project: nil, domain: :diet, parent: c1, name: "Indigestible", c_ab = Quantity.create project: nil, domain: :diet, parent: c_a,
description: "" name: "Indigestible", description: ""
c14 = Quantity.create project: nil, domain: :diet, parent: c13, name: "Fibre", c_aba = Quantity.create project: nil, domain: :diet, parent: c_ab,
description: "Carbohydrate polymers with 3 or more monomeric units, which are" \ name: "Fibre", description: "Carbohydrate polymers with 3 or more monomeric" \
" neither digested nor absorbed in the human small intestine" " units, which are neither digested nor absorbed in the human small intestine"
m1 = Quantity.create project: nil, domain: :diet, parent: nil, name: "Minerals", m_a = Quantity.create project: nil, domain: :diet, parent: nil,
description: "" name: "Minerals", description: ""
m2 = Quantity.create project: nil, domain: :diet, parent: m1, name: "Salt", m_aa = Quantity.create project: nil, domain: :diet, parent: m_a,
description: "Sodium chloride" name: "Salt", description: "Sodium chloride"
v1 = Quantity.create project: nil, domain: :diet, parent: nil, name: "Vitamins", v_a = Quantity.create project: nil, domain: :diet, parent: nil,
description: "" name: "Vitamins", description: ""
v2 = Quantity.create project: nil, domain: :diet, parent: v1, name: "Vitamin A", v_aa = Quantity.create project: nil, domain: :diet, parent: v_a,
description: "" name: "Vitamin A", description: ""
v3 = Quantity.create project: nil, domain: :diet, parent: v2, name: "Retinol (A1)", v_aaa = Quantity.create project: nil, domain: :diet, parent: v_aa,
description: "" name: "Retinol (A1)", description: ""
v4 = Quantity.create project: nil, domain: :diet, parent: v1, name: "Provitamin A", v_ab = Quantity.create project: nil, domain: :diet, parent: v_a,
description: "" name: "Provitamin A", description: ""
v5 = Quantity.create project: nil, domain: :diet, parent: v4, name: "beta-Carotene", v_aba = Quantity.create project: nil, domain: :diet, parent: v_ab,
description: "" name: "beta-Carotene", description: ""
v6 = Quantity.create project: nil, domain: :diet, parent: v1, name: "Vitamin B", v_ac = Quantity.create project: nil, domain: :diet, parent: v_a,
description: "" name: "Vitamin B", description: ""
v7 = Quantity.create project: nil, domain: :diet, parent: v6, name: "Thiamine (B1)", v_aca = Quantity.create project: nil, domain: :diet, parent: v_ac,
description: "" name: "Thiamine (B1)", description: ""
v8 = Quantity.create project: nil, domain: :diet, parent: v6, name: "Riboflavin (B2)", v_acb = Quantity.create project: nil, domain: :diet, parent: v_ac,
description: "Vitamin G" name: "Riboflavin (B2)", description: "Vitamin G"
v9 = Quantity.create project: nil, domain: :diet, parent: v6, name: "Vitamin B3", v_acc = Quantity.create project: nil, domain: :diet, parent: v_ac,
description: "Vitamin PP" name: "Vitamin B3", description: "Vitamin PP"
v10 = Quantity.create project: nil, domain: :diet, parent: v9, name: "Niacin", v_acca = Quantity.create project: nil, domain: :diet, parent: v_acc,
description: "Nicotinic acid" name: "Niacin", description: "Nicotinic acid"
v11 = Quantity.create project: nil, domain: :diet, parent: v6, name: "Vitamin B5", v_acd = Quantity.create project: nil, domain: :diet, parent: v_ac,
description: "Pantothenic acid" name: "Vitamin B5", description: "Pantothenic acid"
v12 = Quantity.create project: nil, domain: :diet, parent: v6, name: "Vitamin B6", v_ace = Quantity.create project: nil, domain: :diet, parent: v_ac,
description: "" name: "Vitamin B6", description: ""
v13 = Quantity.create project: nil, domain: :diet, parent: v6, name: "Biotin (B7)", v_acf = Quantity.create project: nil, domain: :diet, parent: v_ac,
description: "Vitamin H, also coenzyme R" name: "Biotin (B7)", description: "Vitamin H, also coenzyme R"
v14 = Quantity.create project: nil, domain: :diet, parent: v6, name: "Folate", v_acg = Quantity.create project: nil, domain: :diet, parent: v_ac,
description: "Includes: folic acid, folacin and vitamin B9" name: "Folate", description: "Includes: folic acid, folacin and vitamin B9"
v15 = Quantity.create project: nil, domain: :diet, parent: v14, name: "Vitamin B9", v_acga = Quantity.create project: nil, domain: :diet, parent: v_acg,
description: "" name: "Vitamin B9", description: ""
v16 = Quantity.create project: nil, domain: :diet, parent: v6, v_ach = Quantity.create project: nil, domain: :diet, parent: v_ac,
name: "Cobalamin (B12)", description: "" name: "Cobalamin (B12)", description: ""
v17 = Quantity.create project: nil, domain: :diet, parent: v1, name: "Vitamin C", v_ad = Quantity.create project: nil, domain: :diet, parent: v_a,
description: "" name: "Vitamin C", description: ""
v18 = Quantity.create project: nil, domain: :diet, parent: v1, name: "Vitamin D", v_ae = Quantity.create project: nil, domain: :diet, parent: v_a,
description: "Calciferol" name: "Vitamin D", description: "Calciferol"
v19 = Quantity.create project: nil, domain: :diet, parent: v18, v_aea = Quantity.create project: nil, domain: :diet, parent: v_ae,
name: "Cholecalciferol (D3)", description: "" name: "Cholecalciferol (D3)", description: ""
v20 = Quantity.create project: nil, domain: :diet, parent: v1, name: "Vitamin E", v_af = Quantity.create project: nil, domain: :diet, parent: v_a,
description: "" name: "Vitamin E", description: ""
v21 = Quantity.create project: nil, domain: :diet, parent: v1, name: "Vitamin K", v_ag = Quantity.create project: nil, domain: :diet, parent: v_a,
description: "" name: "Vitamin K", description: ""
b1 = Quantity.create project: nil, domain: :measurement, parent: nil, b_a = Quantity.create project: nil, domain: :measurement, parent: nil,
name: "Body composition", description: "" name: "Body composition", description: ""
b2 = Quantity.create project: nil, domain: :measurement, parent: b1, b_aa = Quantity.create project: nil, domain: :measurement, parent: b_a,
name: "Weight", description: "Total weight" name: "Weight", description: "Total weight"
b3 = Quantity.create project: nil, domain: :measurement, parent: b2, b_aaa = Quantity.create project: nil, domain: :measurement, parent: b_aa,
name: "Fat", description: "Fat weight" name: "Fat", description: "Fat weight"
b4 = Quantity.create project: nil, domain: :measurement, parent: b2, b_aab = Quantity.create project: nil, domain: :measurement, parent: b_aa,
name: "Muscle", description: "Muscle weight" name: "Muscle", description: "Muscle weight"
b5 = Quantity.create project: nil, domain: :measurement, parent: b1, b_ab = Quantity.create project: nil, domain: :measurement, parent: b_a,
name: "Composition", description: "" name: "Composition", description: ""
b6 = Quantity.create project: nil, domain: :measurement, parent: b5, b_aba = Quantity.create project: nil, domain: :measurement, parent: b_ab,
name: "% fat", description: "Fat as a % of total body weight" name: "% fat", description: "Fat as a % of total body weight"
b7 = Quantity.create project: nil, domain: :measurement, parent: b5, b_abb = Quantity.create project: nil, domain: :measurement, parent: b_ab,
name: "% muscle", description: "Muscle as a % of total body weight" name: "% muscle", description: "Muscle as a % of total body weight"
b8 = Quantity.create project: nil, domain: :measurement, parent: b1, b_ac = Quantity.create project: nil, domain: :measurement, parent: b_a,
name: "RM", description: "Resting metabolism" name: "RM", description: "Resting metabolism"
b9 = Quantity.create project: nil, domain: :measurement, parent: b1, b_ad = Quantity.create project: nil, domain: :measurement, parent: b_a,
name: "VF", description: "Visceral fat" name: "VF", description: "Visceral fat"
# Formulas go at the and to make sure dependencies exist # Formulas go at the and to make sure dependencies exist
e2.create_formula code: "4*Proteins + 9*Fats + 4*Carbohydrates", zero_nil: true e_aa.create_formula code: "4*Proteins + 9*Fats + 4*Carbohydrates", zero_nil: true,
b3.create_formula code: "'% fat' * 'Weight'", zero_nil: true unit: u_b
b_aaa.create_formula code: "'% fat' * 'Weight'", zero_nil: true, unit: u_ab
Source.create project: nil, name: "nutrition label", s_a = Source.create project: nil, name: "nutrition label",
description: "nutrition facts taken from package nutrition label" description: "nutrition facts taken from package nutrition label"
end end