From 031b857925746825da55d981d163c58a44be5466 Mon Sep 17 00:00:00 2001 From: cryptogopher Date: Wed, 25 Mar 2020 17:57:49 +0100 Subject: [PATCH] Added reference to Unit in Formula Updated defaults identifiers and units in default formulas --- app/models/formula.rb | 1 + db/migrate/001_create_schema.rb | 1 + db/migrate/002_load_defaults.rb | 246 ++++++++++++++++---------------- 3 files changed, 126 insertions(+), 122 deletions(-) diff --git a/app/models/formula.rb b/app/models/formula.rb index 9c51f3b..00c04f0 100644 --- a/app/models/formula.rb +++ b/app/models/formula.rb @@ -4,6 +4,7 @@ class Formula < ActiveRecord::Base attr_reader :parts, :quantities belongs_to :quantity, inverse_of: :formula, required: true + belongs_to :unit, required: true validates :code, presence: true validate do diff --git a/db/migrate/001_create_schema.rb b/db/migrate/001_create_schema.rb index 36381ce..69f1e6f 100644 --- a/db/migrate/001_create_schema.rb +++ b/db/migrate/001_create_schema.rb @@ -23,6 +23,7 @@ class CreateSchema < ActiveRecord::Migration t.references :quantity t.string :code t.boolean :zero_nil + t.references :unit t.timestamps null: false end diff --git a/db/migrate/002_load_defaults.rb b/db/migrate/002_load_defaults.rb index 1306e41..449d5ad 100644 --- a/db/migrate/002_load_defaults.rb +++ b/db/migrate/002_load_defaults.rb @@ -2,152 +2,154 @@ class LoadDefaults < ActiveRecord::Migration def change reversible do |dir| dir.up do - Unit.create project: nil, shortname: "g", name: "gram" - Unit.create project: nil, shortname: "mg", name: "milligram" - Unit.create project: nil, shortname: "ug", name: "microgram" - Unit.create project: nil, shortname: "kg", name: "kilogram" - Unit.create project: nil, shortname: "kcal", name: "kilocalorie" - Unit.create project: nil, shortname: "%", name: "percent" + u_a = Unit.create project: nil, shortname: "g", name: "gram" + u_aa = Unit.create project: nil, shortname: "mg", name: "milligram" + u_ab = Unit.create project: nil, shortname: "kg", name: "kilogram" + u_ac = Unit.create project: nil, shortname: "ug", name: "microgram" + u_b = Unit.create project: nil, shortname: "kcal", name: "kilocalorie" + u_c = Unit.create project: nil, shortname: "%", name: "percent" # https://www.fsai.ie/uploadedFiles/Consol_Reg1169_2011.pdf # https://www.fsai.ie/legislation/food_legislation/food_information_fic/nutrition_labelling.html - e1 = Quantity.create project: nil, domain: :diet, parent: nil, name: "Energy", - description: "Total energy" - e2 = Quantity.create project: nil, domain: :diet, parent: e1, name: "Calculated", - description: "Total energy calculated from macronutrients" + e_a = Quantity.create project: nil, domain: :diet, parent: nil, + name: "Energy", description: "Total energy" + e_aa = Quantity.create project: nil, domain: :diet, parent: e_a, + name: "Calculated", description: "Total energy calculated from macronutrients" - p1 = Quantity.create project: nil, domain: :diet, parent: nil, name: "Proteins", - description: "Total amount of proteins" + p_a = Quantity.create project: nil, domain: :diet, parent: nil, + name: "Proteins", description: "Total amount of proteins" - f1 = Quantity.create project: nil, domain: :diet, parent: nil, name: "Fats", - description: "Total lipids, including phospholipids" - f2 = Quantity.create project: nil, domain: :diet, parent: f1, name: "Fatty acids", - description: "" - f3 = Quantity.create project: nil, domain: :diet, parent: f2, name: "Saturated", - description: "Fatty acids without double bond" - f4 = Quantity.create project: nil, domain: :diet, parent: f2, name: "Unsaturated", - description: "" - f5 = Quantity.create project: nil, domain: :diet, parent: f4, name: "Monounsaturated", - description: "Fatty acids with one cis double bond" - f6 = Quantity.create project: nil, domain: :diet, parent: f4, name: "Polyunsaturated", - description: "Fatty acids with two or more cis, cis-methylene interrupted" \ - " double bonds; PUFA" - f7 = Quantity.create project: nil, domain: :diet, parent: f4, name: "Trans", - description: "Fatty acids with at least one non-conjugated C-C double bond in the" \ - " trans configuration" - f8 = Quantity.create project: nil, domain: :diet, parent: f6, name: "Omega-3 (n-3)", - description: "" - f9 = Quantity.create project: nil, domain: :diet, parent: f6, name: "Omega-6 (n-6)", - description: "" - f10 = Quantity.create project: nil, domain: :diet, parent: f8, name: "ALA 18:3(n-3)", - description: "alpha-Linolenic acid" - f11 = Quantity.create project: nil, domain: :diet, parent: f8, name: "EPA 20:5(n-3)", - description: "Eicosapentaenoic acid; also icosapentaenoic acid" - f12 = Quantity.create project: nil, domain: :diet, parent: f8, name: "DHA 22:6(n-3)", - description: "Docosahexaenoic acid" + f_a = Quantity.create project: nil, domain: :diet, parent: nil, + name: "Fats", description: "Total lipids, including phospholipids" + f_aa = Quantity.create project: nil, domain: :diet, parent: f_a, + name: "Fatty acids", description: "" + f_aaa = Quantity.create project: nil, domain: :diet, parent: f_aa, + name: "Saturated", description: "Fatty acids without double bond" + f_aab = Quantity.create project: nil, domain: :diet, parent: f_aa, + name: "Unsaturated", description: "" + f_aaba = Quantity.create project: nil, domain: :diet, parent: f_aab, + name: "Monounsaturated", description: "Fatty acids with one cis double bond" + f_aabb = Quantity.create project: nil, domain: :diet, parent: f_aab, + name: "Polyunsaturated", description: "Fatty acids with two or more cis," \ + " cis-methylene interrupted double bonds; PUFA" + f_aabba = Quantity.create project: nil, domain: :diet, parent: f_aabb, + name: "Omega-3 (n-3)", description: "" + f_aabbaa = Quantity.create project: nil, domain: :diet, parent: f_aabba, + name: "ALA 18:3(n-3)", description: "alpha-Linolenic acid" + f_aabbab = Quantity.create project: nil, domain: :diet, parent: f_aabba, + name: "EPA 20:5(n-3)", description: "Eicosapentaenoic acid; also icosapentaenoic" \ + " acid" + f_aabbac = Quantity.create project: nil, domain: :diet, parent: f_aabba, + name: "DHA 22:6(n-3)", description: "Docosahexaenoic acid" + f_aabbb = Quantity.create project: nil, domain: :diet, parent: f_aabb, + name: "Omega-6 (n-6)", description: "" + f_aabc = Quantity.create project: nil, domain: :diet, parent: f_aab, + 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", - description: "Total amount of carbohydrates" - c2 = Quantity.create project: nil, domain: :diet, parent: c1, name: "Digestible", - description: "" - c3 = Quantity.create project: nil, domain: :diet, parent: c2, name: "Sugars", - description: "Monosaccharides and disaccharides, excluding polyols" - c4 = Quantity.create project: nil, domain: :diet, parent: c3, name: "Monosaccharides", - description: "" - c5 = Quantity.create project: nil, domain: :diet, parent: c4, name: "Glucose", - description: "" - c6 = Quantity.create project: nil, domain: :diet, parent: c4, name: "Fructose", - description: "" - c7 = Quantity.create project: nil, domain: :diet, parent: c3, name: "Disaccharides", - description: "" - c8 = Quantity.create project: nil, domain: :diet, parent: c7, name: "Sucrose", - description: "" - c9 = Quantity.create project: nil, domain: :diet, parent: c7, name: "Lactose", - description: "" - c10 = Quantity.create project: nil, domain: :diet, parent: c2, name: "Polyols", - description: "Alcohols containing more than 2 hydroxyl groups" - c11 = Quantity.create project: nil, domain: :diet, parent: c2, + c_a = Quantity.create project: nil, domain: :diet, parent: nil, + name: "Carbohydrates", description: "Total amount of carbohydrates" + c_aa = Quantity.create project: nil, domain: :diet, parent: c_a, + name: "Digestible", description: "" + c_aaa = Quantity.create project: nil, domain: :diet, parent: c_aa, + name: "Sugars", description: "Monosaccharides and disaccharides, excluding polyols" + c_aaaa = Quantity.create project: nil, domain: :diet, parent: c_aaa, + name: "Monosaccharides", description: "" + c_aaaaa = Quantity.create project: nil, domain: :diet, parent: c_aaaa, + name: "Glucose", description: "" + c_aaaab = Quantity.create project: nil, domain: :diet, parent: c_aaaa, + name: "Fructose", description: "" + c_aaab = Quantity.create project: nil, domain: :diet, parent: c_aaa, + name: "Disaccharides", description: "" + c_aaaba = Quantity.create project: nil, domain: :diet, parent: c_aaab, + name: "Sucrose", description: "" + c_aaabb = Quantity.create project: nil, domain: :diet, parent: c_aaab, + name: "Lactose", description: "" + c_aab = Quantity.create project: nil, domain: :diet, parent: c_aa, + name: "Polyols", description: "Alcohols containing more than 2 hydroxyl groups" + c_aac = Quantity.create project: nil, domain: :diet, parent: c_aa, name: "Polysaccharides", description: "" - c12 = Quantity.create project: nil, domain: :diet, parent: c11, name: "Starch", - description: "" - c13 = Quantity.create project: nil, domain: :diet, parent: c1, name: "Indigestible", - description: "" - c14 = Quantity.create project: nil, domain: :diet, parent: c13, name: "Fibre", - description: "Carbohydrate polymers with 3 or more monomeric units, which are" \ - " neither digested nor absorbed in the human small intestine" + c_aaca = Quantity.create project: nil, domain: :diet, parent: c_aac, + name: "Starch", description: "" + c_ab = Quantity.create project: nil, domain: :diet, parent: c_a, + name: "Indigestible", description: "" + c_aba = Quantity.create project: nil, domain: :diet, parent: c_ab, + name: "Fibre", description: "Carbohydrate polymers with 3 or more monomeric" \ + " units, which are neither digested nor absorbed in the human small intestine" - m1 = Quantity.create project: nil, domain: :diet, parent: nil, name: "Minerals", - description: "" - m2 = Quantity.create project: nil, domain: :diet, parent: m1, name: "Salt", - description: "Sodium chloride" + m_a = Quantity.create project: nil, domain: :diet, parent: nil, + name: "Minerals", description: "" + m_aa = Quantity.create project: nil, domain: :diet, parent: m_a, + name: "Salt", description: "Sodium chloride" - v1 = Quantity.create project: nil, domain: :diet, parent: nil, name: "Vitamins", - description: "" - v2 = Quantity.create project: nil, domain: :diet, parent: v1, name: "Vitamin A", - description: "" - v3 = Quantity.create project: nil, domain: :diet, parent: v2, name: "Retinol (A1)", - description: "" - v4 = Quantity.create project: nil, domain: :diet, parent: v1, name: "Provitamin A", - description: "" - v5 = Quantity.create project: nil, domain: :diet, parent: v4, name: "beta-Carotene", - description: "" - v6 = Quantity.create project: nil, domain: :diet, parent: v1, name: "Vitamin B", - description: "" - v7 = Quantity.create project: nil, domain: :diet, parent: v6, name: "Thiamine (B1)", - description: "" - v8 = Quantity.create project: nil, domain: :diet, parent: v6, name: "Riboflavin (B2)", - description: "Vitamin G" - v9 = Quantity.create project: nil, domain: :diet, parent: v6, name: "Vitamin B3", - description: "Vitamin PP" - v10 = Quantity.create project: nil, domain: :diet, parent: v9, name: "Niacin", - description: "Nicotinic acid" - v11 = Quantity.create project: nil, domain: :diet, parent: v6, name: "Vitamin B5", - description: "Pantothenic acid" - v12 = Quantity.create project: nil, domain: :diet, parent: v6, name: "Vitamin B6", - description: "" - v13 = Quantity.create project: nil, domain: :diet, parent: v6, name: "Biotin (B7)", - description: "Vitamin H, also coenzyme R" - v14 = Quantity.create project: nil, domain: :diet, parent: v6, name: "Folate", - description: "Includes: folic acid, folacin and vitamin B9" - v15 = Quantity.create project: nil, domain: :diet, parent: v14, name: "Vitamin B9", - description: "" - v16 = Quantity.create project: nil, domain: :diet, parent: v6, + v_a = Quantity.create project: nil, domain: :diet, parent: nil, + name: "Vitamins", description: "" + v_aa = Quantity.create project: nil, domain: :diet, parent: v_a, + name: "Vitamin A", description: "" + v_aaa = Quantity.create project: nil, domain: :diet, parent: v_aa, + name: "Retinol (A1)", description: "" + v_ab = Quantity.create project: nil, domain: :diet, parent: v_a, + name: "Provitamin A", description: "" + v_aba = Quantity.create project: nil, domain: :diet, parent: v_ab, + name: "beta-Carotene", description: "" + v_ac = Quantity.create project: nil, domain: :diet, parent: v_a, + name: "Vitamin B", description: "" + v_aca = Quantity.create project: nil, domain: :diet, parent: v_ac, + name: "Thiamine (B1)", description: "" + v_acb = Quantity.create project: nil, domain: :diet, parent: v_ac, + name: "Riboflavin (B2)", description: "Vitamin G" + v_acc = Quantity.create project: nil, domain: :diet, parent: v_ac, + name: "Vitamin B3", description: "Vitamin PP" + v_acca = Quantity.create project: nil, domain: :diet, parent: v_acc, + name: "Niacin", description: "Nicotinic acid" + v_acd = Quantity.create project: nil, domain: :diet, parent: v_ac, + name: "Vitamin B5", description: "Pantothenic acid" + v_ace = Quantity.create project: nil, domain: :diet, parent: v_ac, + name: "Vitamin B6", description: "" + v_acf = Quantity.create project: nil, domain: :diet, parent: v_ac, + name: "Biotin (B7)", description: "Vitamin H, also coenzyme R" + v_acg = Quantity.create project: nil, domain: :diet, parent: v_ac, + name: "Folate", description: "Includes: folic acid, folacin and vitamin B9" + v_acga = Quantity.create project: nil, domain: :diet, parent: v_acg, + name: "Vitamin B9", description: "" + v_ach = Quantity.create project: nil, domain: :diet, parent: v_ac, name: "Cobalamin (B12)", description: "" - v17 = Quantity.create project: nil, domain: :diet, parent: v1, name: "Vitamin C", - description: "" - v18 = Quantity.create project: nil, domain: :diet, parent: v1, name: "Vitamin D", - description: "Calciferol" - v19 = Quantity.create project: nil, domain: :diet, parent: v18, + v_ad = Quantity.create project: nil, domain: :diet, parent: v_a, + name: "Vitamin C", description: "" + v_ae = Quantity.create project: nil, domain: :diet, parent: v_a, + name: "Vitamin D", description: "Calciferol" + v_aea = Quantity.create project: nil, domain: :diet, parent: v_ae, name: "Cholecalciferol (D3)", description: "" - v20 = Quantity.create project: nil, domain: :diet, parent: v1, name: "Vitamin E", - description: "" - v21 = Quantity.create project: nil, domain: :diet, parent: v1, name: "Vitamin K", - description: "" + v_af = Quantity.create project: nil, domain: :diet, parent: v_a, + name: "Vitamin E", description: "" + v_ag = Quantity.create project: nil, domain: :diet, parent: v_a, + 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: "" - 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" - 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" - 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" - b5 = Quantity.create project: nil, domain: :measurement, parent: b1, + b_ab = Quantity.create project: nil, domain: :measurement, parent: b_a, 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" - 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" - 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" - 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" # Formulas go at the and to make sure dependencies exist - e2.create_formula code: "4*Proteins + 9*Fats + 4*Carbohydrates", zero_nil: true - b3.create_formula code: "'% fat' * 'Weight'", zero_nil: true + e_aa.create_formula code: "4*Proteins + 9*Fats + 4*Carbohydrates", 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" end