File Coverage

blib/lib/URI/VersionRange/Version.pm
Criterion Covered Total %
statement 54 57 94.7
branch 3 4 75.0
condition 2 3 66.6
subroutine 17 19 89.4
pod 4 4 100.0
total 80 87 91.9


line stmt bran cond sub pod time code
1             package URI::VersionRange::Version;
2              
3 4     4   30 use feature ':5.10';
  4         8  
  4         546  
4 4     4   24 use strict;
  4         8  
  4         97  
5 4     4   19 use utf8;
  4         5  
  4         22  
6 4     4   125 use warnings;
  4         7  
  4         262  
7              
8 4     4   2447 use URI::VersionRange::Util qw(generic_version_compare);
  4         14  
  4         557  
9              
10 4     4   36 use overload ('cmp' => \&compare, '<=>' => \&compare, fallback => 1);
  4         10  
  4         42  
11              
12 4     4   485 use constant DEBUG => $ENV{VERS_DEBUG};
  4         9  
  4         2078  
13              
14             our $VERSION = '2.25';
15              
16             sub load {
17              
18 791     791 1 1637 my ($class, $scheme) = @_;
19              
20 791         1367 $scheme = lc $scheme;
21              
22 791         2917 my @CLASSES = (
23             join('::', 'URI::VersionRange::Scheme', lc($scheme)), # Scheme specific
24             join('::', 'URI::VersionRange::Version', lc($scheme)), # Scheme specific (legacy naming convention)
25             );
26              
27 791         1473 foreach my $version_class (@CLASSES) {
28              
29 1540 100 66     139973 if ($version_class->can('new') or eval "require $version_class; 1") {
30 42         60 DEBUG and say STDERR "-- Loaded '$version_class' class";
31 42         145 return $version_class;
32             }
33              
34 1498 50       11258 DEBUG and say STDERR "-- (E) Failed to load '$version_class' class: $@" if $@;
35              
36             }
37              
38 749         2836 return $class;
39              
40             }
41              
42 104     104 1 146 sub new { my $class = shift; bless [@_], $class }
  104         362  
43              
44             sub scheme {
45 0     0 1 0 return (split(/\:\:/, shift, 4))[3];
46             }
47              
48             sub compare {
49 0     0 1 0 my ($left, $right) = @_;
50 0         0 return generic_version_compare($left->[0], $right->[0]);
51             }
52              
53             # CPAN
54              
55             package # hide from pause
56             URI::VersionRange::Scheme::cpan {
57 4     4   664 use parent 'URI::VersionRange::Version';
  4         348  
  4         39  
58              
59 4     4   1404 use version();
  4         4835  
  4         1587  
60 4     4   32 use overload ('cmp' => \&compare, '<=>' => \&compare, fallback => 1);
  4         9  
  4         37  
61              
62             sub compare {
63 20     20   68 my ($left, $right) = @_;
64 20         387 return (version->parse($left->[0]) <=> version->parse($right->[0]));
65             }
66             }
67              
68             # PyPi
69              
70             package # hide from pause
71             URI::VersionRange::Scheme::pypi {
72 4     4   912 use parent 'URI::VersionRange::Version';
  4         10  
  4         23  
73              
74 4     4   316 use version();
  4         8  
  4         234  
75 4     4   21 use overload ('cmp' => \&compare, '<=>' => \&compare, fallback => 1);
  4         19  
  4         36  
76              
77             sub compare {
78 32     32   40 my ($left, $right) = @_;
79 32         344 return (version->parse($left->[0]) <=> version->parse($right->[0]));
80             }
81             }
82              
83             1;
84              
85             __END__