The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Test::Against::Dev::Sort - Sort Perl 5 development and RC releases in logical order

SYNOPSIS

    use Test::Against::Dev::Sort;

    my $minor_version = 27;
    $self = Test::Against::Dev::Sort->new($minor_version);

    my @versions = ( qw|
        perl-5.27.10
        perl-5.28.0-RC4
        perl-5.27.0
        perl-5.27.9
        perl-5.28.0-RC1
        perl-5.27.11
    | );
    my $sorted_versions_ref = $self->sort_dev_and_rc_versions(\@versions);

    my $non_matches_ref = $self->get_non_matches();

    $self->dump_non_matches();

DESCRIPTION

Given a list of strings representing Perl 5 releases in a specific development cycle, ...

    perl-5.27.10
    perl-5.28.0-RC4
    perl-5.27.0
    perl-5.27.9
    perl-5.28.0-RC1
    perl-5.27.11

... sort the list in logical order.

By specific development cycle is meant a series of development releases like perl-5.27.0, perl-5.27.1, ... perl-5.27.11 (or perhaps perl-5.27.12) followed by RC (Release Candidate) releases beginning with perl-5.28.0-RC1, perl-5.28.0-RC2, ..., but not including production releases (perl-5.28.0), maintenance releases (perl-5.28.1) or RCs for maintainance releases (perl-5.28.1-RC1).

By logical order is meant:

  • Development releases:

                            5.27.1
        major version:      5
        minor version:        27
        patch version:           1
    • Have an odd minor version number greater than or equal to 7.

    • Have a one- or two-digit patch version number starting at 0.

  • RC (Release Candidate) releases:

                            5.28.0-RC4
        major version:      5
        minor version:        28
        patch version:           0
        RC version:                  4
    • Have a minor version number which is even and one greater than the dev version number.

    • Have a patch version number of 0 (as we are not concerned with maintenance releases).

    • Have a string in the format -RCx following the patch version number, where x is a one-digit number starting with 1.

For the example above, the desired result would be:

    perl-5.27.0
    perl-5.27.9
    perl-5.27.10
    perl-5.27.11
    perl-5.28.0-RC1
    perl-5.28.0-RC4

METHODS

c<new()>

  • Purpose

    Test::Against::Dev::Sort constructor.

  • Arguments

        my $minor_version = 27;
        $self = Test::Against::Dev::Sort->new($minor_version);

    Odd-numbered integer, >= 7, representing the minor version for a Perl 5 monthly development release.

  • Return Value

    Test::Against::Dev::Sort object.

sort_dev_and_rc_versions()

  • Purpose

  • Arguments

        my @versions = ( qw|
            perl-5.27.10
            perl-5.28.0-RC4
            perl-5.27.0
            perl-5.27.9
            perl-5.28.0-RC1
            perl-5.27.11
        | );
        my $sorted_versions_ref = $self->sort_dev_and_rc_versions(\@versions);

    Reference to an array holding a list of Perl version strings for development or RC releases for a single annual development cycle (as denoted by the minor version number passed to new()).

  • Return Value

    Reference to an array holding that list sorted in logical order (as defined above).

  • Comment

    Any element in the arrayref passed as the argument which does not qualify is silently added to a list accessible via the get_non_matches() and get_dump_matches() methods. =back

get_non_matches()

  • Purpose

    Identify those elements of the arrayref passed to sort_dev_and_rc_versions() which do not qualify as being the Perl version string for a development or RC release in the annual development cycle passed as an argument new().

  • Arguments

        my $non_matches_ref = $self->get_non_matches();

    None; all data needed is already inside the object.

  • Return Value

    Reference to an array holding a list of elements in the arrayref passed to sort_dev_and_rc_versions() which do not qualify as being the Perl version string for a development or RC release in the annual development cycle passed as an argument new().

  • Comment

    Not meaningful except when called after sort_dev_and_rc_versions().

dump_non_matches()

  • Purpose

    Pretty-print to STDOUT the list returned by get_non_matches().

  • Arguments

        my $non_matches_ref = $self->get_non_matches();

    None; all data needed is already inside the object.

  • Return Value

    Perl true value.

  • Comment

    Not meaningful except when called after sort_dev_and_rc_versions().