File Coverage

blib/lib/App/HL7/Compare/Parser/Role/Partible.pm
Criterion Covered Total %
statement 34 41 82.9
branch 1 4 25.0
condition n/a
subroutine 10 11 90.9
pod 0 2 0.0
total 45 58 77.5


line stmt bran cond sub pod time code
1             package App::HL7::Compare::Parser::Role::Partible;
2             $App::HL7::Compare::Parser::Role::Partible::VERSION = '0.004';
3 4     4   2275 use v5.10;
  4         14  
4 4     4   19 use strict;
  4         8  
  4         105  
5 4     4   15 use warnings;
  4         9  
  4         281  
6              
7 4     4   25 use Mooish::AttributeBuilder -standard;
  4         8  
  4         31  
8 4     4   505 use Types::Standard qw(ArrayRef ConsumerOf);
  4         9  
  4         27  
9 4     4   6916 use List::Util qw(first);
  4         8  
  4         356  
10 4     4   38 use App::HL7::Compare::Exception;
  4         8  
  4         123  
11 4     4   20 use Moo::Role;
  4         7  
  4         27  
12              
13             has field 'parts' => (
14             isa => ArrayRef [ConsumerOf ['App::HL7::Compare::Parser::Role::Part']],
15             lazy => 1,
16             );
17              
18             with qw(
19             App::HL7::Compare::Parser::Role::Stringifies
20             App::HL7::Compare::Parser::Role::PartOfMessage
21             );
22              
23             requires qw(
24             part_separator
25             _build_parts
26             );
27              
28             sub to_string
29             {
30 0     0 0 0 my ($self) = @_;
31              
32 0         0 my $parts = $self->parts;
33 0 0       0 return '' unless @{$parts} > 0;
  0         0  
34              
35 0         0 return join $self->part_separator, map { $_->to_string } @{$parts};
  0         0  
  0         0  
36             }
37              
38             sub _trimmed
39             {
40 248     248   417 my ($self, $value) = @_;
41              
42 248         513 $value =~ s/\A\s+//;
43 248         767 $value =~ s/\s+\z//;
44 248         628 return $value;
45             }
46              
47             sub split_and_build
48             {
49 134     134 0 264 my ($self, $string_to_split, $class_to_build) = @_;
50              
51 134         359 my @parts = map { $self->_trimmed($_) } split quotemeta($self->part_separator), $string_to_split, -1;
  248         458  
52              
53 134 50       375 App::HL7::Compare::Exception->raise("empty value for $class_to_build in: <$string_to_split>")
54             if @parts == 0;
55              
56             return [
57             map {
58 210         14396 $class_to_build->new(
59             msg_config => $self->msg_config,
60             number => $_ + 1,
61             input => $parts[$_],
62             )
63             } grep {
64 134         320 length $parts[$_] > 0
  248         570  
65             } 0 .. $#parts
66             ];
67             }
68              
69             1;
70