Skip to content

Handle culinary recipes and calculate their nutritional value (pre-alpha / WIP)

License

Notifications You must be signed in to change notification settings

filipmnowak/ex_kcal

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

92 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ExKcal

Notes

This is exploratory, toy project, strange things in the code, too much emphasis on types etc.

Installation

Available in Hex; the package can be installed by adding ex_kcal to your list of dependencies in mix.exs:

def deps do
  [
    {:ex_kcal, "~> 0.0.6"}
  ]
end

Examples

iex> alias ExKcal.Fats
iex> alias ExKcal.Product
iex> alias ExKcal.Products
iex> import ExKcal.Calc
iex> alias ExKcal.Recipe
iex> import Recipe
iex> alias ExKcal.Recipe.Step, as: RecipeStep
iex> alias ExKcal.Recipe.Time, as: RecipeTime
iex> strange_apple = %Product{name: "strange apple",
...>                         kcal: 301.0,
...>                         amount: {100.0, :g},
...>                         fats: %Fats{total: {4.0, :kg}}} |> adjust_amount({1.0, :kg})
%ExKcal.Product{
  alcohols: %ExKcal.Alcohols{
    ethanol: {nil, :none},
    other: {nil, :none},
    total: {nil, :none}
  },
  amount: {1.0, :kg},
  brand: "",
  carbs: %ExKcal.Carbs{
    dietary_fiber: {nil, :none},
    other: {nil, :none},
    starch: {nil, :none},
    sugars: {nil, :none},
    total: {nil, :none}
  },
  description: "",
  fats: %ExKcal.Fats{
    monounsaturated: {nil, :none},
    polyunsaturated: {nil, :none},
    saturated: {nil, :none},
    total: {40.0, :kg}
  },
  kcal: 3010.0,
  minerals: %ExKcal.Minerals{
    calcium: {nil, :none},
    chloride: {nil, :none},
    chromium: {nil, :none},
    copper: {nil, :none},
    fluoride: {nil, :none},
    iodide: {nil, :none},
    iodine: {nil, :none},
    iron: {nil, :none},
    magnesium: {nil, :none},
    manganese: {nil, :none},
    molybdenum: {nil, :none},
    phosphorus: {nil, :none},
    potassium: {nil, :none},
    selenium: {nil, :none},
    sodium: {nil, :none},
    sulfur: {nil, :none},
    zinc: {nil, :none}
  },
  name: "strange apple",
  note: "",
  origin: [],
  produced: [],
  producer: "",
  proteins: {nil, :none},
  salt: {nil, :none},
  vitamins: %ExKcal.Vitamins{
    choline: {nil, :none},
    vitamin_a: {nil, :none},
    vitamin_b1: {nil, :none},
    vitamin_b12: {nil, :none},
    vitamin_b2: {nil, :none},
    vitamin_b3: {nil, :none},
    vitamin_b4: {nil, :none},
    vitamin_b6: {nil, :none},
    vitamin_b9: {nil, :none},
    vitamin_c: {nil, :none},
    vitamin_d: {nil, :none},
    vitamin_e: {nil, :none},
    vitamin_k: {nil, :none}
  }
}
iex>
{:ok,
 %ExKcal.Products{
   map: %{
     %ExKcal.Product{
       alcohols: %ExKcal.Alcohols{
         ethanol: {nil, :none},
         other: {nil, :none},
         total: {nil, :none}
       },
       amount: {1.0, :kg},
       brand: "",
       carbs: %ExKcal.Carbs{
         dietary_fiber: {nil, :none},
         other: {nil, :none},
         starch: {nil, :none},
         sugars: {nil, :none},
         total: {nil, :none}
       },
       description: "",
       fats: %ExKcal.Fats{
         monounsaturated: {nil, :none},
         polyunsaturated: {nil, :none},
         saturated: {nil, :none},
         total: {40.0, :kg}
       },
       kcal: 3010.0,
       minerals: %ExKcal.Minerals{
         calcium: {nil, :none},
         chloride: {nil, :none},
         chromium: {nil, :none},
         copper: {nil, :none},
         fluoride: {nil, :none},
         iodide: {nil, :none},
         iodine: {nil, :none},
         iron: {nil, :none},
         magnesium: {nil, :none},
         manganese: {nil, :none},
         molybdenum: {nil, :none},
         phosphorus: {nil, :none},
         potassium: {nil, :none},
         selenium: {nil, :none},
         sodium: {nil, :none},
         sulfur: {nil, :none},
         zinc: {nil, :none}
       },
       name: "strange apple",
       note: "",
       origin: [],
       produced: [],
       producer: "",
       proteins: {nil, :none},
       salt: {nil, :none},
       vitamins: %ExKcal.Vitamins{
         choline: {nil, :none},
         vitamin_a: {nil, :none},
         vitamin_b1: {nil, :none},
         vitamin_b12: {nil, :none},
         vitamin_b2: {nil, :none},
         vitamin_b3: {nil, :none},
         vitamin_b4: {nil, :none},
         vitamin_b6: {nil, :none},
         vitamin_b9: {nil, :none},
         vitamin_c: {nil, :none},
         vitamin_d: {nil, :none},
         vitamin_e: {nil, :none},
         vitamin_k: {nil, :none}
       }
     } => nil
   }
 }}
iex> step1 = %RecipeStep{time: %RecipeTime{minutes: 5, seconds: 10},
...>                     instructions: "wash in cold water", products: products}
%ExKcal.Recipe.Step{
  instructions: "wash in cold water",
  notes: "",
  products: %ExKcal.Products{
    map: %{
      %ExKcal.Product{
        alcohols: %ExKcal.Alcohols{
          ethanol: {nil, :none},
          other: {nil, :none},
          total: {nil, :none}
        },
        amount: {1.0, :kg},
        brand: "",
        carbs: %ExKcal.Carbs{
          dietary_fiber: {nil, :none},
          other: {nil, :none},
          starch: {nil, :none},
          sugars: {nil, :none},
          total: {nil, :none}
        },
        description: "",
        fats: %ExKcal.Fats{
          monounsaturated: {nil, :none},
          polyunsaturated: {nil, :none},
          saturated: {nil, :none},
          total: {40.0, :kg}
        },
        kcal: 3010.0,
        minerals: %ExKcal.Minerals{
          calcium: {nil, :none},
          chloride: {nil, :none},
          chromium: {nil, :none},
          copper: {nil, :none},
          fluoride: {nil, :none},
          iodide: {nil, :none},
          iodine: {nil, :none},
          iron: {nil, :none},
          magnesium: {nil, :none},
          manganese: {nil, :none},
          molybdenum: {nil, :none},
          phosphorus: {nil, :none},
          potassium: {nil, :none},
          selenium: {nil, :none},
          sodium: {nil, :none},
          sulfur: {nil, :none},
          zinc: {nil, :none}
        },
        name: "strange apple",
        note: "",
        origin: [],
        produced: [],
        producer: "",
        proteins: {nil, :none},
        salt: {nil, :none},
        vitamins: %ExKcal.Vitamins{
          choline: {nil, :none},
          vitamin_a: {nil, :none},
          vitamin_b1: {nil, :none},
          vitamin_b12: {nil, :none},
          vitamin_b2: {nil, :none},
          vitamin_b3: {nil, :none},
          vitamin_b4: {nil, :none},
          vitamin_b6: {nil, :none},
          vitamin_b9: {nil, :none},
          vitamin_c: {nil, :none},
          vitamin_d: {nil, :none},
          vitamin_e: {nil, :none},
          vitamin_k: {nil, :none}
        }
      } => nil
    }
  },
  time: %ExKcal.Recipe.Time{hours: 0, minutes: 5, seconds: 10}
}
iex> step2 = %RecipeStep{time: %RecipeTime{hours: 1}, instructions: "cook on medium heat"}
%ExKcal.Recipe.Step{
  instructions: "cook on medium heat",
  notes: "",
  products: %ExKcal.Products{map: %{}},
  time: %ExKcal.Recipe.Time{hours: 1, minutes: 0, seconds: 0}
}
iex>
%ExKcal.Recipe{
  steps: [
    %ExKcal.Recipe.Step{
      instructions: "wash in cold water",
      notes: "",
      products: %ExKcal.Products{
        map: %{
          %ExKcal.Product{
            alcohols: %ExKcal.Alcohols{
              ethanol: {nil, :none},
              other: {nil, :none},
              total: {nil, :none}
            },
            amount: {1.0, :kg},
            brand: "",
            carbs: %ExKcal.Carbs{
              dietary_fiber: {nil, :none},
              other: {nil, :none},
              starch: {nil, :none},
              sugars: {nil, :none},
              total: {nil, :none}
            },
            description: "",
            fats: %ExKcal.Fats{
              monounsaturated: {nil, :none},
              polyunsaturated: {nil, :none},
              saturated: {nil, :none},
              total: {40.0, :kg}
            },
            kcal: 3010.0,
            minerals: %ExKcal.Minerals{
              calcium: {nil, :none},
              chloride: {nil, :none},
              chromium: {nil, :none},
              copper: {nil, :none},
              fluoride: {nil, :none},
              iodide: {nil, :none},
              iodine: {nil, :none},
              iron: {nil, :none},
              magnesium: {nil, :none},
              manganese: {nil, :none},
              molybdenum: {nil, :none},
              phosphorus: {nil, :none},
              potassium: {nil, :none},
              selenium: {nil, :none},
              sodium: {nil, :none},
              sulfur: {nil, :none},
              zinc: {nil, :none}
            },
            name: "strange apple",
            note: "",
            origin: [],
            produced: [],
            producer: "",
            proteins: {nil, :none},
            salt: {nil, :none},
            vitamins: %ExKcal.Vitamins{
              choline: {nil, :none},
              vitamin_a: {nil, :none},
              vitamin_b1: {nil, :none},
              vitamin_b12: {nil, :none},
              vitamin_b2: {nil, :none},
              vitamin_b3: {nil, :none},
              vitamin_b4: {nil, :none}, 
              vitamin_b6: {nil, :none},
              vitamin_b9: {nil, :none},
              vitamin_c: {nil, :none},
              vitamin_d: {nil, :none},
              vitamin_e: {nil, :none},
              vitamin_k: {nil, :none}
            }
          } => nil
        }
      },
      time: %ExKcal.Recipe.Time{hours: 0, minutes: 5, seconds: 10}
    },
    %ExKcal.Recipe.Step{
      instructions: "cook on medium heat",
      notes: "",
      products: %ExKcal.Products{map: %{}},
      time: %ExKcal.Recipe.Time{hours: 1, minutes: 0, seconds: 0}
    }
  ]
}
iex>
%ExKcal.Product{
  alcohols: %ExKcal.Alcohols{
    ethanol: {nil, :none},
    other: {nil, :none},
    total: {nil, :none}
  },
  amount: {1.0, :kg},
  brand: "",
  carbs: %ExKcal.Carbs{
    dietary_fiber: {nil, :none},
    other: {nil, :none},
    starch: {nil, :none},
    sugars: {nil, :none},
    total: {nil, :none}
  },
  description: "",
  fats: %ExKcal.Fats{
    monounsaturated: {nil, :none},
    polyunsaturated: {nil, :none},
    saturated: {nil, :none},
    total: {40.0, :kg}
  },
  kcal: 3010.0,
  minerals: %ExKcal.Minerals{
    calcium: {nil, :none},
    chloride: {nil, :none},
    chromium: {nil, :none},
    copper: {nil, :none},
    fluoride: {nil, :none},
    iodide: {nil, :none},
    iodine: {nil, :none},
    iron: {nil, :none},
    magnesium: {nil, :none},
    manganese: {nil, :none},
    molybdenum: {nil, :none},
    phosphorus: {nil, :none},
    potassium: {nil, :none},
    selenium: {nil, :none},
    sodium: {nil, :none},
    sulfur: {nil, :none},
    zinc: {nil, :none}
  },
  name: "",
  note: "",
  origin: [],
  produced: [],
  producer: "",
  proteins: {nil, :none},
  salt: {nil, :none},
  vitamins: %ExKcal.Vitamins{
    choline: {nil, :none},
    vitamin_a: {nil, :none},
    vitamin_b1: {nil, :none},
    vitamin_b12: {nil, :none}, 
    vitamin_b2: {nil, :none},
    vitamin_b3: {nil, :none},
    vitamin_b4: {nil, :none},
    vitamin_b6: {nil, :none},
    vitamin_b9: {nil, :none},
    vitamin_c: {nil, :none},
    vitamin_d: {nil, :none},
    vitamin_e: {nil, :none},
    vitamin_k: {nil, :none}
  }
}
iex>
%ExKcal.Recipe.Time{hours: 1, minutes: 5, seconds: 10}

Docs

Check at Hex.

About

Handle culinary recipes and calculate their nutritional value (pre-alpha / WIP)

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages