Spec-Zone.ru › Elixir 1.13

Версия

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

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

Хотя проекты Elixir не обязаны следовать SemVer, они должны следовать формату, описанному в схеме 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.amd64"

Структура

Версия представлена структурой Version, и поля названы в соответствии со схемой SemVer 2.0: :major, :minor, :patch, :pre, и :build. Вы можете читать эти поля, но не должны создавать новую Version напрямую через синтаксис структуры. Вместо этого используйте функции в этом модуле.

Требования

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

# 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"

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

~> Перевод
~> 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

Операнд требования после ~> может опускать версию исправления, что позволяет нам выразить ~> 2.1 или ~> 2.1-dev, что не допускается при использовании общих операторов сравнения.

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

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

Резюме

Типы

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

Функции

compare(version1, version2)

Сравнивает две версии.

compile_requirement(requirement)

Компилирует требование в внутреннее представление, которое может оптимизировать сопоставление.

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

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

parse!(string)

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

parse(string)

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

parse_requirement!(string)

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

parse_requirement(string)

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

END_OF_DOCUMENT_MARKER

Типы

build()Source

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

major()Source

@type major() :: non_neg_integer()

minor()Source

@type minor() :: non_neg_integer()

patch()Source

@type patch() :: non_neg_integer()

pre()Source

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

requirement()Source

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

t()Source

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

version()Source

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

Функции

compare(version1, version2)Source

@spec 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 version: "invalid"

compile_requirement(requirement)Source

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

Компилирует требование в внутреннее представление, которое может оптимизировать сопоставление.

Внутреннее представление является неявным.

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

@spec match?(version(), requirement(), keyword()) :: boolean()

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

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

Параметры

  • :allow_pre (boolean) - когда 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?("2.1.6-dev", "~> 2.1.2")
true

iex> Version.match?("2.1.6-dev", "~> 2.1.2", allow_pre: false)
false

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

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

parse!(string)Source

@spec parse!(String.t()) :: t()

Обрабатывает строку версии в Version.

Если string является недействительной версией, генерируется Version.InvalidVersionError.

Примеры

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

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

parse(string)Source

@spec 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_requirement!(string)Source

@spec parse_requirement!(String.t()) :: Version.Requirement.t()

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

Если string является недействительным требованием, генерируется Version.InvalidRequirementError.

Примеры

iex> Version.parse_requirement!("== 2.0.1")
#Version.Requirement<== 2.0.1>

iex> Version.parse_requirement!("== == 2.0.1")
** (Version.InvalidRequirementError) invalid requirement: "== == 2.0.1"

parse_requirement(string)Source

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

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

Примеры

iex> {:ok, requirement} = Version.parse_requirement("== 2.0.1")
iex> requirement
#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.13.4/Version.html

Spec-Zone.ru

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