Spec-Zone.ru › Elixir 1.4

Версия

Функции для парсинга и сопоставления версий с требованиями.

Версия — это строка в определённом формате или Version, сгенерированная после парсинга с помощью Version.parse/1.

Version парсинг и требования следуют схеме SemVer 2.0.

Версии

Вкратце, версия представлена тремя числами:

MAJOR.MINOR.PATCH

Предварительные версии поддерживаются добавлением -[0-9A-Za-z-\.]:

"1.0.0-alpha.3"

Дополнительную информацию о сборке можно добавить, добавив +[0-9A-Za-z-\.]:

"1.0.0-alpha.3+20130417140000"

Структура

Версия представлена структурой Version, поля которой названы в соответствии со спецификацией Semver: :major, :minor, :patch, :pre и :build.

Требования

Требования позволяют указать, с какими версиями заданной зависимости вы готовы работать. Они поддерживают стандартные операторы, такие как >=, <=, >, == и аналогичные, которые работают так, как ожидается:

# Only version 2.0.0
"== 2.0.0"

# Anything later than 2.0.0
"> 2.0.0"

Требования также поддерживают and и or для сложных условий:

# 2.0.0 and later until 2.1.0
">= 2.0.0 and < 2.1.0"

Так как пример выше является распространённым требованием, он может быть выражен как:

"~> 2.0.0"

~> никогда не будет включать предварительные версии в своём верхнем пределе. Он также может использоваться для установки верхнего предела только для части основной версии. См. таблицу ниже для ~> требований и их соответствий.

~> Перевод
~> 2.0.0 >= 2.0.0 and < 2.1.0
~> 2.1.2 >= 2.1.2 and < 2.2.0
~> 2.1.3-dev >= 2.1.3-dev and < 2.2.0
~> 2.0 >= 2.0.0 and < 3.0.0
~> 2.1 >= 2.1.0 and < 3.0.0

Если allow_pre: false установлен, требование не будет соответствовать предварительной версии, если операнд не является предварительной версией. По умолчанию, предварительные версии всегда разрешены, но обратите внимание, что в Hex :allow_pre установлено в false.. См. таблицу ниже для примеров.

Требование Версия :allow_pre Совпадает
~> 2.0 2.1.0 - true
~> 2.0 3.0.0 - false
~> 2.0.0 2.0.1 - true
~> 2.0.0 2.1.0 - false
~> 2.1.2 2.1.3-dev true true
~> 2.1.2 2.1.3-dev false false
~> 2.1-dev 2.2.0-dev false true
~> 2.1.2-dev 2.1.3-dev false true
>= 2.1.0 2.2.0-dev false false
>= 2.1.0-dev 2.2.3-dev true true

Резюме

Типы

build()
major()
matchable()
minor()
patch()
pre()
requirement()
t()
version()

Функции

compare(version1, version2)

Сравнивает две версии. Возвращает :gt, если первая версия больше второй, и :lt в обратном случае. Если версии равны, возвращается :eq

compile_requirement(req)

Компилирует требование до его внутренней формы с использованием :ets.match_spec_compile/1 для более быстрого сопоставления.

match?(version, requirement, opts \\ [])

Проверяет, соответствует ли заданная версия спецификации.

parse(string)

Парсит строку версии в Version

parse!(string)

Парсит строку версии в Version

parse_requirement(string)

Парсит строку требования к версии в Version.Requirement

Типы

build()

build() :: String.t() | nil

major()

major() :: String.t() | non_neg_integer()

matchable()

matchable() :: {major :: major(), minor :: minor(), patch :: patch(), pre :: pre()}

minor()

minor() :: non_neg_integer() | nil

patch()

patch() :: non_neg_integer() | nil

pre()

pre() :: [String.t() | non_neg_integer()]

requirement()

requirement() :: String.t() | Version.Requirement.t()

t()

t() :: %Version{build: build(), major: major(), minor: minor(), patch: patch(), pre: pre()}

version()

version() :: String.t() | t()

Функции

compare(version1, version2)

compare(version(), version()) :: :gt | :eq | :lt

Сравнивает две версии. Возвращает :gt, если первая версия больше второй, и :lt в обратном случае. Если версии равны, возвращается :eq. Предыдущие версии строго меньше соответствующих релизных версий.

Разделы "патча" сравниваются лексикографически, если они являются буквенно-цифровыми, и численно в противном случае.

Разделы "сборки" игнорируются. Если две версии отличаются только разделом "сборки", они считаются равными.

Возбуждает исключение Version.InvalidVersionError, если какой-либо из двух не может быть распарсен. Если передана уже распарсенная версия, функция не вызовет исключения.

Примеры

iex> Version.compare("2.0.1-alpha1", "2.0.0")
:gt

iex> Version.compare("1.0.0-beta", "1.0.0-rc1")
:lt

iex> Version.compare("1.0.0-10", "1.0.0-2")
:gt

iex> Version.compare("2.0.1+build0", "2.0.1")
:eq

iex> Version.compare("invalid", "2.0.1")
** (Version.InvalidVersionError) invalid

compile_requirement(req)

compile_requirement(Version.Requirement.t()) :: Version.Requirement.t()

Компилирует требование до его внутренней формы с использованием :ets.match_spec_compile/1 для более быстрого сопоставления. Внутренняя форма неявна и не может быть преобразована в формат внешнего термина, а затем обратно, без потери свойств (т.е. её нельзя отправить процессу на другом узле, и она останется действительным скомпилированным match_spec, и её нельзя сохранить на диске).

match?(version, requirement, opts \\ [])

match?(version(), requirement(), Keyword.t()) :: boolean()

Проверяет, соответствует ли заданная версия спецификации.

Возвращает true, если version удовлетворяет requirement, в противном случае false Возбуждает исключение Version.InvalidRequirementError, если requirement не может быть распарсено, или Version.InvalidVersionError, если version не может быть распарсено. Если переданы уже распарсенные версия и требование, функция не вызовет исключение.

Параметры

  • :allow_pre - когда false предварительные версии не будут соответствовать, если операнд не является предварительной версией, см. таблицу выше для примеров (по умолчанию: true);

Примеры

iex> Version.match?("2.0.0", ">1.0.0")
true

iex> Version.match?("2.0.0", "==1.0.0")
false

iex> Version.match?("foo", "==1.0.0")
** (Version.InvalidVersionError) foo

iex> Version.match?("2.0.0", "== ==1.0.0")
** (Version.InvalidRequirementError) == ==1.0.0

parse(string)

parse(String.t()) :: {:ok, t()} | :error

Разбирает строку версии в Version.

Примеры

iex> {:ok, version} = Version.parse("2.0.1-alpha1")
iex> version
#Version<2.0.1-alpha1>

iex> Version.parse("2.0-alpha1")
:error

parse!(string)

parse!(String.t()) :: t() | no_return()

Разбирает строку версии в Version.

Если string — это недопустимая версия, возникает InvalidVersionError.

Примеры

iex> Version.parse!("2.0.1-alpha1")
#Version<2.0.1-alpha1>

iex> Version.parse!("2.0-alpha1")
** (Version.InvalidVersionError) 2.0-alpha1

parse_requirement(string)

parse_requirement(String.t()) ::
  {:ok, Version.Requirement.t()} |
  :error

Разбирает строку требования версии в Version.Requirement.

Примеры

iex> {:ok, req} = Version.parse_requirement("== 2.0.1")
iex> req
#Version.Requirement<== 2.0.1>

iex> Version.parse_requirement("== == 2.0.1")
:error

© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.4.5/Version.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API