Packages
moar
1.51.0
5.0.0
4.3.0
4.2.0
4.1.0
4.0.0
3.2.0
3.1.0
3.0.0
2.7.0
2.6.0
2.5.0
2.4.2
2.4.1
2.4.0
2.3.0
2.2.0
2.1.0
2.0.1
2.0.0
1.64.0
1.63.1
1.63.0
1.62.0
1.61.2
1.61.1
1.61.0
1.60.0
1.59.2
1.59.1
1.59.0
1.58.0
1.57.0
1.56.2
1.56.1
1.56.0
1.55.0
1.54.0
1.53.0
1.52.1
1.52.0
1.51.0
1.50.0
1.49.0
1.48.0
1.47.0
1.46.0
1.45.1
1.45.0
1.44.0
1.43.0
1.42.0
1.41.0
1.40.0
1.39.0
1.38.0
1.37.0
1.36.0
1.35.0
1.34.0
1.33.0
1.32.0
1.31.0
1.30.0
1.29.0
1.28.0
1.27.0
1.26.0
1.25.0
1.24.1
1.24.0
1.23.0
1.22.0
1.21.0
1.20.0
1.19.3
1.19.2
1.19.1
1.19.0
1.18.1
1.18.0
1.17.0
1.16.0
1.15.0
1.14.0
1.13.1
1.13.0
1.12.0
1.11.0
1.10.0
1.9.0
1.8.0
1.7.0
1.6.0
1.5.0
1.4.0
1.3.0
1.2.0
1.1.0
1.0.0
0.1.0
A dependency-free utility library containing 100+ useful functions.
Current section
Files
Jump to
Current section
Files
lib/version.ex
defmodule Moar.Version do
# @related [test](/test/version_test.exs)
@moduledoc "Version-related functions."
@doc """
Like `Version.compare/2` but first normalizes versions via `normalize/1`.
```
iex> Elixir.Version.compare("1.2", "1.2.3")
** (Version.InvalidVersionError) invalid version: "1.2"
iex> Moar.Version.compare("1.2", "1.2.3")
:lt
```
"""
@spec compare(binary(), binary()) :: :gt | :eq | :lt
def compare(left, right),
do: Version.compare(normalize(left), normalize(right))
@doc """
Adds major, minor, and patch versions if needed to create a string with major, minor, and patch numbers.
Does not support versions that have anything other than numbers (like `1.2.3-beta4`).
```
iex> Moar.Version.normalize("1.2")
"1.2.0"
```
"""
@spec normalize(binary()) :: binary()
def normalize(version) do
parts = version |> Moar.Term.presence("0.0.0") |> String.split(".") |> Enum.take(3)
normalized = parts ++ List.duplicate("0", 3 - length(parts))
Enum.join(normalized, ".")
end
end