Packages
mneme
0.8.1
0.10.2
0.10.1
0.10.0
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.9.0-alpha.1
0.9.0-alpha.0
0.8.2
0.8.1
0.8.0
0.7.0
0.6.1
0.6.0
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.3.0-rc.1
0.3.0-rc.0
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
Snapshot testing tool using familiar assertions
Current section
Files
Jump to
Current section
Files
lib/mneme/versions.ex
defmodule Mneme.Versions do
@moduledoc false
@doc """
Checks whether the given Elixir or Erlang/OTP versions match the
system versions.
Versions.match?(elixir: ">= 1.17.0", otp: ">= 27.0.0")
"""
def match?(requirements \\ []) do
requirements = Keyword.validate!(requirements, elixir: ">= 0.0.0", otp: ">= 0.0.0")
Version.match?(elixir_version(), requirements[:elixir]) and
Version.match?(otp_version(), requirements[:otp])
end
@doc """
Current Elixir version.
"""
@spec elixir_version() :: Version.t()
def elixir_version do
Version.parse!(System.version())
end
@doc """
Current OTP version.
"""
@spec otp_version() :: Version.t()
def otp_version do
major = System.otp_release()
version_file = Path.join([:code.root_dir(), "releases", major, "OTP_VERSION"])
version_file
|> File.read!()
|> String.trim()
|> parse_version!()
end
defp parse_version!(version_string) do
[major, minor, patch] = parse_segments(version_string, 3)
Version.parse!("#{major}.#{minor}.#{patch}")
end
defp parse_segments(s, segment_number)
defp parse_segments(_, 0) do
[]
end
defp parse_segments("." <> rest, segment_number) do
parse_segments(rest, segment_number)
end
defp parse_segments("", segment_number) do
[0 | parse_segments("", segment_number - 1)]
end
defp parse_segments(s, segment_number) do
case Integer.parse(s) do
{n, rest} -> [n | parse_segments(rest, segment_number - 1)]
:error -> [0 | parse_segments("", segment_number - 1)]
end
end
end