<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="generator" content="ExDoc v0.19.1"> <title>Version – Elixir v1.7.2</title> <link rel="stylesheet" href="dist/app-240d7fc7e5.css" /> <link rel="canonical" href="https://hexdocs.pm/elixir/v1.7/Version.html" /> <script src="dist/sidebar_items-cdf4e58b19.js"></script> </head> <body data-type="modules"> <script>try { if(localStorage.getItem('night-mode')) document.body.className += ' night-mode'; } catch (e) { }</script> <div class="main"> <button class="sidebar-button sidebar-toggle"> <span class="icon-menu" aria-hidden="true"></span> <span class="sr-only">Toggle Sidebar</span> </button> <button class="sidebar-button night-mode-toggle"> <span class="icon-theme" aria-hidden="true"></span> <span class="sr-only">Toggle Theme</span> </button> <section class="sidebar"> <a href="http://elixir-lang.org/docs.html" class="sidebar-projectLink"> <div class="sidebar-projectDetails"> <h1 class="sidebar-projectName"> Elixir </h1> <h2 class="sidebar-projectVersion"> v1.7.2 </h2> </div> <img src="assets/logo.png" alt="Elixir" class="sidebar-projectImage"> </a> <form class="sidebar-search" action="search.html"> <button type="submit" class="search-button"> <span class="icon-search" aria-hidden="true"></span> </button> <input name="q" type="text" id="search-list" class="search-input" placeholder="Search" aria-label="Search" autocomplete="off" /> </form> <ul class="sidebar-listNav"> <li><a id="extras-list" href="#full-list">Pages</a></li> <li><a id="modules-list" href="#full-list">Modules</a></li> <li><a id="exceptions-list" href="#full-list">Exceptions</a></li> </ul> <div class="gradient"></div> <ul id="full-list" class="sidebar-fullList"></ul> </section> <section class="content"> <div class="content-outer"> <div id="content" class="content-inner"> <h1> <small class="visible-xs">Elixir v1.7.2</small> Version <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/version.ex#L1" title="View Source" class="view-source" rel="help"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> </h1> <section id="moduledoc"> <p>Functions for parsing and matching versions against requirements.</p> <p>A version is a string in a specific format or a <a href="Version.html#content"><code class="inline">Version</code></a> generated after parsing via <a href="Version.html#parse/1"><code class="inline">Version.parse/1</code></a>.</p> <p><a href="Version.html#content"><code class="inline">Version</code></a> parsing and requirements follow <a href="http://semver.org/">SemVer 2.0 schema</a>.</p> <h2 id="module-versions" class="section-heading"> <a href="#module-versions" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Versions </h2> <p>In a nutshell, a version is represented by three numbers:</p> <pre><code class="nohighlight makeup elixir"><span class="nc">MAJOR.MINOR.PATCH</span></code></pre> <p>Pre-releases are supported by appending <code class="inline">-[0-9A-Za-z-\.]</code>:</p> <pre><code class="nohighlight makeup elixir"><span class="s">"1.0.0-alpha.3"</span></code></pre> <p>Build information can be added by appending <code class="inline">+[0-9A-Za-z-\.]</code>:</p> <pre><code class="nohighlight makeup elixir"><span class="s">"1.0.0-alpha.3+20130417140000"</span></code></pre> <h2 id="module-struct" class="section-heading"> <a href="#module-struct" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Struct </h2> <p>The version is represented by the <a href="Version.html#content"><code class="inline">Version</code></a> struct and fields are named according to SemVer: <code class="inline">:major</code>, <code class="inline">:minor</code>, <code class="inline">:patch</code>, <code class="inline">:pre</code>, and <code class="inline">:build</code>.</p> <h2 id="module-requirements" class="section-heading"> <a href="#module-requirements" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Requirements </h2> <p>Requirements allow you to specify which versions of a given dependency you are willing to work against. Requirements support common operators like <code class="inline">>=</code>, <code class="inline"><=</code>, <code class="inline">></code>, <code class="inline">==</code>, and friends that work as one would expect:</p> <pre><code class="nohighlight makeup elixir"><span class="c1"># Only version 2.0.0</span><span class="w"> </span><span class="s">"== 2.0.0"</span><span class="w"> </span><span class="c1"># Anything later than 2.0.0</span><span class="w"> </span><span class="s">"> 2.0.0"</span></code></pre> <p>Requirements also support <code class="inline">and</code> and <code class="inline">or</code> for complex conditions:</p> <pre><code class="nohighlight makeup elixir"><span class="c1"># 2.0.0 and later until 2.1.0</span><span class="w"> </span><span class="s">">= 2.0.0 and < 2.1.0"</span></code></pre> <p>Since the example above is such a common requirement, it can be expressed as:</p> <pre><code class="nohighlight makeup elixir"><span class="s">"~> 2.0.0"</span></code></pre> <p><code class="inline">~></code> will never include pre-release versions of its upper bound. It can also be used to set an upper bound on only the major version part. See the table below for <code class="inline">~></code> requirements and their corresponding translation.</p> <table> <colgroup> <col> <col> </colgroup> <thead> <tr> <th style="text-align: left"><code class="inline">~></code></th><th style="text-align: left">Translation</th> </tr> </thead> <tr> <td style="text-align: left"><code class="inline">~> 2.0.0</code></td><td style="text-align: left"><code class="inline">>= 2.0.0 and < 2.1.0</code></td> </tr> <tr> <td style="text-align: left"><code class="inline">~> 2.1.2</code></td><td style="text-align: left"><code class="inline">>= 2.1.2 and < 2.2.0</code></td> </tr> <tr> <td style="text-align: left"><code class="inline">~> 2.1.3-dev</code></td><td style="text-align: left"><code class="inline">>= 2.1.3-dev and < 2.2.0</code></td> </tr> <tr> <td style="text-align: left"><code class="inline">~> 2.0</code></td><td style="text-align: left"><code class="inline">>= 2.0.0 and < 3.0.0</code></td> </tr> <tr> <td style="text-align: left"><code class="inline">~> 2.1</code></td><td style="text-align: left"><code class="inline">>= 2.1.0 and < 3.0.0</code></td> </tr> </table> <p>When <code class="inline">allow_pre: false</code> is set, the requirement will not match a pre-release version unless the operand is a pre-release version. The default is to always allow pre-releases but note that in Hex <code class="inline">:allow_pre</code> is set to <code class="inline">false</code>. See the table below for examples.</p> <table> <colgroup> <col> <col> <col> <col> </colgroup> <thead> <tr> <th style="text-align: left">Requirement</th><th style="text-align: left">Version</th><th style="text-align: left"><code class="inline">:allow_pre</code></th><th style="text-align: left">Matches</th> </tr> </thead> <tr> <td style="text-align: left"><code class="inline">~> 2.0</code></td><td style="text-align: left"><code class="inline">2.1.0</code></td><td style="text-align: left">-</td><td style="text-align: left"><code class="inline">true</code></td> </tr> <tr> <td style="text-align: left"><code class="inline">~> 2.0</code></td><td style="text-align: left"><code class="inline">3.0.0</code></td><td style="text-align: left">-</td><td style="text-align: left"><code class="inline">false</code></td> </tr> <tr> <td style="text-align: left"><code class="inline">~> 2.0.0</code></td><td style="text-align: left"><code class="inline">2.0.1</code></td><td style="text-align: left">-</td><td style="text-align: left"><code class="inline">true</code></td> </tr> <tr> <td style="text-align: left"><code class="inline">~> 2.0.0</code></td><td style="text-align: left"><code class="inline">2.1.0</code></td><td style="text-align: left">-</td><td style="text-align: left"><code class="inline">false</code></td> </tr> <tr> <td style="text-align: left"><code class="inline">~> 2.1.2</code></td><td style="text-align: left"><code class="inline">2.1.3-dev</code></td><td style="text-align: left"><code class="inline">true</code></td><td style="text-align: left"><code class="inline">true</code></td> </tr> <tr> <td style="text-align: left"><code class="inline">~> 2.1.2</code></td><td style="text-align: left"><code class="inline">2.1.3-dev</code></td><td style="text-align: left"><code class="inline">false</code></td><td style="text-align: left"><code class="inline">false</code></td> </tr> <tr> <td style="text-align: left"><code class="inline">~> 2.1-dev</code></td><td style="text-align: left"><code class="inline">2.2.0-dev</code></td><td style="text-align: left"><code class="inline">false</code></td><td style="text-align: left"><code class="inline">true</code></td> </tr> <tr> <td style="text-align: left"><code class="inline">~> 2.1.2-dev</code></td><td style="text-align: left"><code class="inline">2.1.3-dev</code></td><td style="text-align: left"><code class="inline">false</code></td><td style="text-align: left"><code class="inline">true</code></td> </tr> <tr> <td style="text-align: left"><code class="inline">>= 2.1.0</code></td><td style="text-align: left"><code class="inline">2.2.0-dev</code></td><td style="text-align: left"><code class="inline">false</code></td><td style="text-align: left"><code class="inline">false</code></td> </tr> <tr> <td style="text-align: left"><code class="inline">>= 2.1.0-dev</code></td><td style="text-align: left"><code class="inline">2.2.3-dev</code></td><td style="text-align: left"><code class="inline">true</code></td><td style="text-align: left"><code class="inline">true</code></td> </tr> </table> </section> <section id="summary" class="details-list"> <h1 class="section-heading"> <a class="hover-link" href="#summary"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this section</span> </a> Summary </h1> <div class="summary-types summary"> <h2> <a href="#types">Types</a> </h2> <div class="summary-row"> <div class="summary-signature"> <a href="#t:build/0">build()</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#t:major/0">major()</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#t:matchable/0">matchable()</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#t:minor/0">minor()</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#t:patch/0">patch()</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#t:pre/0">pre()</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#t:requirement/0">requirement()</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#t:t/0">t()</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#t:version/0">version()</a> </div> </div> </div> <div class="summary-functions summary"> <h2> <a href="#functions">Functions</a> </h2> <div class="summary-row"> <div class="summary-signature"> <a href="#compare/2">compare(version1, version2)</a> </div> <div class="summary-synopsis"><p>Compares two versions</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#compile_requirement/1">compile_requirement(req)</a> </div> <div class="summary-synopsis"><p>Compiles a requirement to its internal representation with <a href="http://www.erlang.org/doc/man/ets.html#match_spec_compile-1"><code class="inline">:ets.match_spec_compile/1</code></a> for faster matching</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#match?/3">match?(version, requirement, opts \\ [])</a> </div> <div class="summary-synopsis"><p>Checks if the given version matches the specification</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#parse!/1">parse!(string)</a> </div> <div class="summary-synopsis"><p>Parses a version string into a <a href="Version.html#content"><code class="inline">Version</code></a></p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#parse/1">parse(string)</a> </div> <div class="summary-synopsis"><p>Parses a version string into a <a href="Version.html#content"><code class="inline">Version</code></a> struct</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#parse_requirement/1">parse_requirement(string)</a> </div> <div class="summary-synopsis"><p>Parses a version requirement string into a <a href="https://hexdocs.pm/elixir/Version.Requirement.html"><code class="inline">Version.Requirement</code></a> struct</p> </div> </div> </div> </section> <section id="types" class="details-list"> <h1 class="section-heading"> <a class="hover-link" href="#types"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this section</span> </a> Types </h1> <div class="types-list"> <div class="detail" id="t:build/0"> <div class="detail-header"> <a href="#t:build/0" class="detail-link" title="Link to this type"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this type</span> </a> <span class="signature">build()</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/version.ex#L96" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>build() :: <a href="String.html#t:t/0">String.t</a>() | nil</pre> </div> </div> <section class="docstring"> </section> </div> <div class="detail" id="t:major/0"> <div class="detail-header"> <a href="#t:major/0" class="detail-link" title="Link to this type"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this type</span> </a> <span class="signature">major()</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/version.ex#L92" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>major() :: <a href="String.html#t:t/0">String.t</a>() | <a href="typespecs.html#basic-types">non_neg_integer</a>()</pre> </div> </div> <section class="docstring"> </section> </div> <div class="detail" id="t:matchable/0"> <div class="detail-header"> <a href="#t:matchable/0" class="detail-link" title="Link to this type"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this type</span> </a> <span class="signature">matchable()</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/version.ex#L97" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>matchable() :: {major :: <a href="#t:major/0">major</a>(), minor :: <a href="#t:minor/0">minor</a>(), patch :: <a href="#t:patch/0">patch</a>(), pre :: <a href="#t:pre/0">pre</a>()}</pre> </div> </div> <section class="docstring"> </section> </div> <div class="detail" id="t:minor/0"> <div class="detail-header"> <a href="#t:minor/0" class="detail-link" title="Link to this type"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this type</span> </a> <span class="signature">minor()</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/version.ex#L93" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>minor() :: <a href="typespecs.html#basic-types">non_neg_integer</a>() | nil</pre> </div> </div> <section class="docstring"> </section> </div> <div class="detail" id="t:patch/0"> <div class="detail-header"> <a href="#t:patch/0" class="detail-link" title="Link to this type"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this type</span> </a> <span class="signature">patch()</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/version.ex#L94" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>patch() :: <a href="typespecs.html#basic-types">non_neg_integer</a>() | nil</pre> </div> </div> <section class="docstring"> </section> </div> <div class="detail" id="t:pre/0"> <div class="detail-header"> <a href="#t:pre/0" class="detail-link" title="Link to this type"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this type</span> </a> <span class="signature">pre()</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/version.ex#L95" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>pre() :: [<a href="String.html#t:t/0">String.t</a>() | <a href="typespecs.html#basic-types">non_neg_integer</a>()]</pre> </div> </div> <section class="docstring"> </section> </div> <div class="detail" id="t:requirement/0"> <div class="detail-header"> <a href="#t:requirement/0" class="detail-link" title="Link to this type"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this type</span> </a> <span class="signature">requirement()</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/version.ex#L91" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>requirement() :: <a href="String.html#t:t/0">String.t</a>() | <a href="https://hexdocs.pm/elixir/Version.Requirement.html#t:t/0">Version.Requirement.t</a>()</pre> </div> </div> <section class="docstring"> </section> </div> <div class="detail" id="t:t/0"> <div class="detail-header"> <a href="#t:t/0" class="detail-link" title="Link to this type"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this type</span> </a> <span class="signature">t()</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/version.ex#L98" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>t() :: %Version{ build: <a href="#t:build/0">build</a>(), major: <a href="#t:major/0">major</a>(), minor: <a href="#t:minor/0">minor</a>(), patch: <a href="#t:patch/0">patch</a>(), pre: <a href="#t:pre/0">pre</a>() }</pre> </div> </div> <section class="docstring"> </section> </div> <div class="detail" id="t:version/0"> <div class="detail-header"> <a href="#t:version/0" class="detail-link" title="Link to this type"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this type</span> </a> <span class="signature">version()</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/version.ex#L90" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>version() :: <a href="String.html#t:t/0">String.t</a>() | <a href="#t:t/0">t</a>()</pre> </div> </div> <section class="docstring"> </section> </div> </div> </section> <section id="functions" class="details-list"> <h1 class="section-heading"> <a class="hover-link" href="#functions"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this section</span> </a> Functions </h1> <div class="detail" id="compare/2"> <div class="detail-header"> <a href="#compare/2" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">compare(version1, version2)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/version.ex#L225" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>compare(<a href="#t:version/0">version</a>(), <a href="#t:version/0">version</a>()) :: :gt | :eq | :lt</pre> </div> </div> <section class="docstring"> <p>Compares two versions.</p> <p>Returns <code class="inline">:gt</code> if the first version is greater than the second one, and <code class="inline">:lt</code> for vice versa. If the two versions are equal, <code class="inline">:eq</code> is returned.</p> <p>Pre-releases are strictly less than their corresponding release versions.</p> <p>Patch segments are compared lexicographically if they are alphanumeric, and numerically otherwise.</p> <p>Build segments are ignored: if two versions differ only in their build segment they are considered to be equal.</p> <p>Raises a <a href="Version.InvalidVersionError.html"><code class="inline">Version.InvalidVersionError</code></a> exception if any of the two given versions are not parsable. If given an already parsed version this function won’t raise.</p> <h2 id="compare/2-examples" class="section-heading"> <a href="#compare/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="nc">Version</span><span class="o">.</span><span class="n">compare</span><span class="p" data-group-id="6767389482-1">(</span><span class="s">"2.0.1-alpha1"</span><span class="p">,</span><span class="w"> </span><span class="s">"2.0.0"</span><span class="p" data-group-id="6767389482-1">)</span><span class="w"> </span><span class="ss">:gt</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Version</span><span class="o">.</span><span class="n">compare</span><span class="p" data-group-id="6767389482-2">(</span><span class="s">"1.0.0-beta"</span><span class="p">,</span><span class="w"> </span><span class="s">"1.0.0-rc1"</span><span class="p" data-group-id="6767389482-2">)</span><span class="w"> </span><span class="ss">:lt</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Version</span><span class="o">.</span><span class="n">compare</span><span class="p" data-group-id="6767389482-3">(</span><span class="s">"1.0.0-10"</span><span class="p">,</span><span class="w"> </span><span class="s">"1.0.0-2"</span><span class="p" data-group-id="6767389482-3">)</span><span class="w"> </span><span class="ss">:gt</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Version</span><span class="o">.</span><span class="n">compare</span><span class="p" data-group-id="6767389482-4">(</span><span class="s">"2.0.1+build0"</span><span class="p">,</span><span class="w"> </span><span class="s">"2.0.1"</span><span class="p" data-group-id="6767389482-4">)</span><span class="w"> </span><span class="ss">:eq</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Version</span><span class="o">.</span><span class="n">compare</span><span class="p" data-group-id="6767389482-5">(</span><span class="s">"invalid"</span><span class="p">,</span><span class="w"> </span><span class="s">"2.0.1"</span><span class="p" data-group-id="6767389482-5">)</span><span class="w"> </span><span class="gt">** (Version.InvalidVersionError) invalid version: "invalid"</span></code></pre> </section> </div> <div class="detail" id="compile_requirement/1"> <div class="detail-header"> <a href="#compile_requirement/1" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">compile_requirement(req)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/version.ex#L323" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>compile_requirement(<a href="https://hexdocs.pm/elixir/Version.Requirement.html#t:t/0">Version.Requirement.t</a>()) :: <a href="https://hexdocs.pm/elixir/Version.Requirement.html#t:t/0">Version.Requirement.t</a>()</pre> </div> </div> <section class="docstring"> <p>Compiles a requirement to its internal representation with <a href="http://www.erlang.org/doc/man/ets.html#match_spec_compile-1"><code class="inline">:ets.match_spec_compile/1</code></a> for faster matching.</p> <p>The internal representation is opaque and cannot be converted to external term format and then back again without losing its properties (meaning it can not be sent to a process on another node and still remain a valid compiled match_spec, nor can it be stored on disk).</p> </section> </div> <div class="detail" id="match?/3"> <span id="match?/2"></span> <div class="detail-header"> <a href="#match?/3" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">match?(version, requirement, opts \\ [])</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/version.ex#L183" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>match?(<a href="#t:version/0">version</a>(), <a href="#t:requirement/0">requirement</a>(), <a href="typespecs.html#built-in-types">keyword</a>()) :: <a href="typespecs.html#built-in-types">boolean</a>()</pre> </div> </div> <section class="docstring"> <p>Checks if the given version matches the specification.</p> <p>Returns <code class="inline">true</code> if <code class="inline">version</code> satisfies <code class="inline">requirement</code>, <code class="inline">false</code> otherwise. Raises a <a href="Version.InvalidRequirementError.html"><code class="inline">Version.InvalidRequirementError</code></a> exception if <code class="inline">requirement</code> is not parsable, or a <a href="Version.InvalidVersionError.html"><code class="inline">Version.InvalidVersionError</code></a> exception if <code class="inline">version</code> is not parsable. If given an already parsed version and requirement this function won’t raise.</p> <h2 id="match?/3-options" class="section-heading"> <a href="#match?/3-options" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Options </h2> <ul> <li><code class="inline">:allow_pre</code> (boolean) - when <code class="inline">false</code>, pre-release versions will not match unless the operand is a pre-release version. See the table above for examples. Defaults to <code class="inline">true</code>. </li> </ul> <h2 id="match?/3-examples" class="section-heading"> <a href="#match?/3-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="nc">Version</span><span class="o">.</span><span class="n">match?</span><span class="p" data-group-id="5528895875-1">(</span><span class="s">"2.0.0"</span><span class="p">,</span><span class="w"> </span><span class="s">"> 1.0.0"</span><span class="p" data-group-id="5528895875-1">)</span><span class="w"> </span><span class="no">true</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Version</span><span class="o">.</span><span class="n">match?</span><span class="p" data-group-id="5528895875-2">(</span><span class="s">"2.0.0"</span><span class="p">,</span><span class="w"> </span><span class="s">"== 1.0.0"</span><span class="p" data-group-id="5528895875-2">)</span><span class="w"> </span><span class="no">false</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Version</span><span class="o">.</span><span class="n">match?</span><span class="p" data-group-id="5528895875-3">(</span><span class="s">"foo"</span><span class="p">,</span><span class="w"> </span><span class="s">"== 1.0.0"</span><span class="p" data-group-id="5528895875-3">)</span><span class="w"> </span><span class="gt">** (Version.InvalidVersionError) invalid version: "foo"</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Version</span><span class="o">.</span><span class="n">match?</span><span class="p" data-group-id="5528895875-4">(</span><span class="s">"2.0.0"</span><span class="p">,</span><span class="w"> </span><span class="s">"== == 1.0.0"</span><span class="p" data-group-id="5528895875-4">)</span><span class="w"> </span><span class="gt">** (Version.InvalidRequirementError) invalid requirement: "== == 1.0.0"</span></code></pre> </section> </div> <div class="detail" id="parse!/1"> <div class="detail-header"> <a href="#parse!/1" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">parse!(string)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/version.ex#L282" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>parse!(<a href="String.html#t:t/0">String.t</a>()) :: <a href="#t:t/0">t</a>() | <a href="typespecs.html#built-in-types">no_return</a>()</pre> </div> </div> <section class="docstring"> <p>Parses a version string into a <a href="Version.html#content"><code class="inline">Version</code></a>.</p> <p>If <code class="inline">string</code> is an invalid version, an <code class="inline">InvalidVersionError</code> is raised.</p> <h2 id="parse!/1-examples" class="section-heading"> <a href="#parse!/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="nc">Version</span><span class="o">.</span><span class="n">parse!</span><span class="p" data-group-id="1989350379-1">(</span><span class="s">"2.0.1-alpha1"</span><span class="p" data-group-id="1989350379-1">)</span><span class="w"> </span><span class="p" data-group-id="1989350379-2">#</span><span class="nc" data-group-id="1989350379-2">Version</span><span class="p" data-group-id="1989350379-2"><</span><span class="mf">2.0</span><span class="o">.</span><span class="mi">1</span><span class="o">-</span><span class="n">alpha1</span><span class="p" data-group-id="1989350379-2">></span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Version</span><span class="o">.</span><span class="n">parse!</span><span class="p" data-group-id="1989350379-3">(</span><span class="s">"2.0-alpha1"</span><span class="p" data-group-id="1989350379-3">)</span><span class="w"> </span><span class="gt">** (Version.InvalidVersionError) invalid version: "2.0-alpha1"</span></code></pre> </section> </div> <div class="detail" id="parse/1"> <div class="detail-header"> <a href="#parse/1" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">parse(string)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/version.ex#L255" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>parse(<a href="String.html#t:t/0">String.t</a>()) :: {:ok, <a href="#t:t/0">t</a>()} | :error</pre> </div> </div> <section class="docstring"> <p>Parses a version string into a <a href="Version.html#content"><code class="inline">Version</code></a> struct.</p> <h2 id="parse/1-examples" class="section-heading"> <a href="#parse/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="p" data-group-id="2282878883-1">{</span><span class="ss">:ok</span><span class="p">,</span><span class="w"> </span><span class="n">version</span><span class="p" data-group-id="2282878883-1">}</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Version</span><span class="o">.</span><span class="n">parse</span><span class="p" data-group-id="2282878883-2">(</span><span class="s">"2.0.1-alpha1"</span><span class="p" data-group-id="2282878883-2">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="n">version</span><span class="w"> </span><span class="p" data-group-id="2282878883-3">#</span><span class="nc" data-group-id="2282878883-3">Version</span><span class="p" data-group-id="2282878883-3"><</span><span class="mf">2.0</span><span class="o">.</span><span class="mi">1</span><span class="o">-</span><span class="n">alpha1</span><span class="p" data-group-id="2282878883-3">></span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Version</span><span class="o">.</span><span class="n">parse</span><span class="p" data-group-id="2282878883-4">(</span><span class="s">"2.0-alpha1"</span><span class="p" data-group-id="2282878883-4">)</span><span class="w"> </span><span class="ss">:error</span></code></pre> </section> </div> <div class="detail" id="parse_requirement/1"> <div class="detail-header"> <a href="#parse_requirement/1" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">parse_requirement(string)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/version.ex#L303" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>parse_requirement(<a href="String.html#t:t/0">String.t</a>()) :: {:ok, <a href="https://hexdocs.pm/elixir/Version.Requirement.html#t:t/0">Version.Requirement.t</a>()} | :error</pre> </div> </div> <section class="docstring"> <p>Parses a version requirement string into a <a href="https://hexdocs.pm/elixir/Version.Requirement.html"><code class="inline">Version.Requirement</code></a> struct.</p> <h2 id="parse_requirement/1-examples" class="section-heading"> <a href="#parse_requirement/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="p" data-group-id="7755240385-1">{</span><span class="ss">:ok</span><span class="p">,</span><span class="w"> </span><span class="n">requirement</span><span class="p" data-group-id="7755240385-1">}</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Version</span><span class="o">.</span><span class="n">parse_requirement</span><span class="p" data-group-id="7755240385-2">(</span><span class="s">"== 2.0.1"</span><span class="p" data-group-id="7755240385-2">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="n">requirement</span><span class="w"> </span><span class="p" data-group-id="7755240385-3">#</span><span class="nc" data-group-id="7755240385-3">Version.Requirement</span><span class="p" data-group-id="7755240385-3"><</span><span class="o">==</span><span class="w"> </span><span class="mf">2.0</span><span class="o">.</span><span class="mi">1</span><span class="p" data-group-id="7755240385-3">></span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Version</span><span class="o">.</span><span class="n">parse_requirement</span><span class="p" data-group-id="7755240385-4">(</span><span class="s">"== == 2.0.1"</span><span class="p" data-group-id="7755240385-4">)</span><span class="w"> </span><span class="ss">:error</span></code></pre> </section> </div> </section> <footer class="footer"> <p> <span class="line"> Built using <a href="https://github.com/elixir-lang/ex_doc" title="ExDoc" target="_blank" rel="help noopener">ExDoc</a> (v0.19.1), </span> <span class="line"> designed by <a href="https://twitter.com/dignifiedquire" target="_blank" rel="noopener" title="@dignifiedquire">Friedel Ziegelmayer</a>. </span> </p> </footer> </div> </div> </section> </div> <script src="dist/app-a0c90688fa.js"></script> </body> </html>