NAME

Role::Versioning::Scheme - Role for Versioning::Scheme::* modules

VERSION

This document describes version 0.011 of Role::Versioning::Scheme (from Perl distribution Versioning-Scheme), released on 2020-10-01.

PROVIDED METHODS

versioning_scheme

Usage:

print $vs->versioning_scheme; # Dotted

Print the versioning scheme name.

REQUIRED METHODS

is_valid_version

Usage:

my $valid = $vs->is_valid_version('1.2.3'); # bool

Must return true when a string is a valid version number for the associated scheme, or false otherwise.

parse_version

Usage:

my $hash = $vs->parse_version('1.2.3'); # => {major=>1, minor=>2, patch=>3}

Parse version number into elements. Should return hashref, or undef if version number is invalid.

normalize_version

Usage:

my $normalized = $vs->normalize_version('1.2.3'); # bool

Return the canonical string form of a version number according to the associated scheme.

Must die when input is not a valid version number string.

cmp_version

Usage:

my $res = $vs->cmp_version($v1, $v2); # -1|0|1

Compare two version number strings and, like Perl's cmp, must return -1, 0, or 1 depending on $v1 is less than, equal to, or greater than $v2, respectively, according to the associated scheme.

Must die when either $v1 or $v2 is invalid.

bump_version

Usage:

my $v2 = $vs->bump_version($v[ , \%opts ]); # => str

Bump a version number string and return a bumped version number string.

Must die when $v is invalid.

By default it must bump the bumpable least significant part by one. Example in dotted scheme:

my $v2 = $vs->bump_version('1.2.3'); # => '1.2.4'

In monotonic scheme:

my $v2 = $vs->bump_version('1.2+foo'); # => '1.3+foo'

Some options this method can accept:

  • num => int (default: 1)

    Number of version numbers to bump, for example:

    my $v2 = $vs->bump_version('1.2.3', {num=>2}); # => '1.2.5'

    It can be negative:

    my $v2 = $vs->bump_version('1.2.3', {num=>-1}); # => '1.2.2'
    my $v2 = $vs->bump_version('1.2.3', {num=>-3}); # => '1.2.0'

    It must die when an ambiguous number is specified:

    my $v2 = $vs->bump_version('1.2.3', {num=>-4}); # dies
  • part => int

    Specify which part to bump, where 0 means the most significant part, 1 means the second most significant part, and so on. It can also be negative (-1 means the least significant part, -2 the second least significant part, and so on). The default should be the bumpable least significant part. For example in dotted version:

    my $v2 = $vs->bump_version('1.2.3', {part=>-2}); # => '1.3.0'
  • reset_smaller => bool (default: 1)

    By default, when a bigger part is increased, the smaller parts are reset (see previous example). Setting this option to 0 prevents that:

    my $v2 = $vs->bump_version('1.2.3', {part=>-2, reset_smaller=>0}); # => '1.3.3'

HOMEPAGE

Please visit the project's homepage at https://metacpan.org/release/Versioning-Scheme.

SOURCE

Source repository is at https://github.com/perlancar/perl-Versioning-Scheme.

BUGS

Please report any bugs or feature requests on the bugtracker website https://rt.cpan.org/Public/Dist/Display.html?Name=Versioning-Scheme

When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.

AUTHOR

perlancar <perlancar@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2020, 2019, 2018 by perlancar@cpan.org.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.