mirror of
https://github.com/ash-project/igniter.git
synced 2024-09-20 13:33:00 +12:00
44 lines
1.1 KiB
Elixir
44 lines
1.1 KiB
Elixir
defmodule Igniter.Version do
|
|
@moduledoc "Utilities for working versions and version requirements"
|
|
|
|
@doc """
|
|
Provides a general requirement for a given version string.
|
|
|
|
For example
|
|
|
|
`3.1.2` would be `~> 3.0`
|
|
and
|
|
`0.2.4` would be `~> 0.2`
|
|
"""
|
|
@spec version_string_to_general_requirement(String.t()) :: String.t() | no_return
|
|
def version_string_to_general_requirement!(version) do
|
|
case version_string_to_general_requirement(version) do
|
|
{:ok, requirement} -> requirement
|
|
{:error, error} -> raise ArgumentError, error
|
|
end
|
|
end
|
|
|
|
def version_string_to_general_requirement(version) do
|
|
version
|
|
|> pad_zeroes()
|
|
|> Version.parse()
|
|
|> case do
|
|
{:ok, %Version{major: 0, minor: minor}} ->
|
|
{:ok, "~> 0.#{minor}"}
|
|
|
|
{:ok, %Version{major: major}} ->
|
|
{:ok, "~> #{major}.0"}
|
|
|
|
:error ->
|
|
{:error, "invalid version string"}
|
|
end
|
|
end
|
|
|
|
defp pad_zeroes(version) do
|
|
case String.split(version, ".", trim: true) do
|
|
[_major, _minor] -> version <> ".0"
|
|
[_major] -> version <> ".0.0"
|
|
_ -> version
|
|
end
|
|
end
|
|
end
|