File Coverage

lib/Mojolicious/Plugin/Vparam/Barcode.pm
Criterion Covered Total %
statement 26 26 100.0
branch 9 12 75.0
condition n/a
subroutine 7 7 100.0
pod 0 3 0.0
total 42 48 87.5


line stmt bran cond sub pod time code
1             package Mojolicious::Plugin::Vparam::Barcode;
2 72     72   848995 use Mojo::Base -strict;
  72         9684  
  72         559  
3 72     72   8567 use Mojolicious::Plugin::Vparam::Common;
  72         183  
  72         27522  
4              
5             sub check_barcode($) {
6 9 50   9 0 21 return 'Value not defined' unless defined $_[0];
7 9 100       28 return 'Value not set' unless length $_[0];
8 8 50       40 return 'Wrong format' unless $_[0] =~ m{^[0-9]+$};
9              
10 8         14 my $crc = 0;
11 8         45 my @str = reverse split '', $_[0];
12 8         24 for my $i ( 0 .. $#str ) {
13 98         118 my $digit = $str[$i];
14 98 100       188 $digit *= 3 if $i % 2;
15 98         131 $crc += $digit;
16             }
17 8 100       22 return 'Checksum error' if $crc % 10;
18              
19 7         26 return 0;
20             }
21              
22             sub parse_barcode($) {
23 9     9 0 19 my ($str) = @_;
24 9 50       20 return undef unless defined $str;
25 9         29 s{[^0-9]}{}g for $str;
26 9         19 return $str;
27             }
28              
29             sub register {
30 74     74 0 263 my ($class, $self, $app, $conf) = @_;
31              
32             $app->vtype(
33             barcode =>
34 9     9   23 pre => sub { parse_barcode $_[1] },
35 9     9   14 valid => sub { check_barcode $_[1] },
36 74         808 );
37              
38 74         392 return;
39             }
40              
41             1;