Spec-Zone.ru › Elixir 1.6

Версия

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

Версия — это строка в определенном формате или 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)

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

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

compile_requirement(req)

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

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

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

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

match?(version(), requirement(), keyword()) :: 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) invalid version: "foo"

iex> Version.match?("2.0.0", "== == 1.0.0")
** (Version.InvalidRequirementError) invalid requirement: "== == 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) invalid version: "2.0-alpha1"

parse_requirement(string)

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.6.6/Version.html

Spec-Zone.ru

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