File Coverage

blib/lib/Catmandu/Fix/Condition/marc_all_match.pm
Criterion Covered Total %
statement 34 34 100.0
branch n/a
condition n/a
subroutine 8 8 100.0
pod 0 1 0.0
total 42 43 97.6


line stmt bran cond sub pod time code
1             package Catmandu::Fix::Condition::marc_all_match;
2 4     4   47319 use Catmandu::Sane;
  4         262278  
  4         26  
3 4     4   1648 use Catmandu::Fix::marc_map;
  4         14  
  4         26  
4 4     4   2317 use Catmandu::Fix::Condition::all_match;
  4         59001  
  4         19  
5 4     4   1953 use Catmandu::Fix::set_field;
  4         12593  
  4         47  
6 4     4   1895 use Catmandu::Fix::remove_field;
  4         12689  
  4         16  
7 4     4   198 use Moo;
  4         8  
  4         32  
8 4     4   1189 use Catmandu::Fix::Has;
  4         8  
  4         37  
9              
10             our $VERSION = '1.21';
11              
12             with 'Catmandu::Fix::Condition';
13              
14             has marc_path => (fix_arg => 1);
15             has value => (fix_arg => 1);
16              
17             sub emit {
18 5     5 0 10512 my ($self,$fixer,$label) = @_;
19              
20 5         9 my $perl;
21              
22 5         92 my $tmp_var = '_tmp_' . int(rand(9999));
23 5         104 my $marc_map = Catmandu::Fix::marc_map->new($self->marc_path , "$tmp_var.\$append");
24 5         589 $perl .= $marc_map->emit($fixer,$label);
25              
26 5         72 my $all_match = Catmandu::Fix::Condition::all_match->new("$tmp_var.*",$self->value);
27 5         3198 my $remove_field = Catmandu::Fix::remove_field->new($tmp_var);
28              
29 5         2075 my $pass_fixes = $self->pass_fixes;
30 5         18 my $fail_fixes = $self->fail_fixes;
31              
32 5         26 $all_match->pass_fixes([ $remove_field , @$pass_fixes ]);
33 5         13 $all_match->fail_fixes([ $remove_field , @$fail_fixes ]);
34              
35 5         15 $perl .= $all_match->emit($fixer,$label);
36              
37 5         4002 $perl;
38             }
39              
40             =head1 NAME
41              
42             Catmandu::Fix::Condition::marc_all_match - Test if a MARC (sub)field matches a value
43              
44             =head1 SYNOPSIS
45              
46             # marc_all_match(MARC_PATH,REGEX)
47              
48             # Match when 245 contains the value "My funny title"
49             if marc_all_match('245','My funny title')
50             add_field('my.funny.title','true')
51             end
52              
53             # Match when 245a contains the value "My funny title"
54             if marc_all_match('245a','My funny title')
55             add_field('my.funny.title','true')
56             end
57              
58             # Match when all 650 fields contain digits
59             if marc_all_match('650','[0-9]')
60             add_field('has_digits','true')
61             end
62              
63             =head1 DESCRIPTION
64              
65             Evaluate the enclosing fixes only if the MARC (sub)field matches a
66             regular expression. When the MARC field is a repeated fiels, then all
67             the MARC fields should match the regular expression.
68              
69             =head1 METHODS
70              
71             =head2 marc_all_match(MARC_PATH, REGEX)
72              
73             Evaluates to true when all MARC_PATH values matches the REGEX, false otherwise.
74              
75             =head1 SEE ALSO
76              
77             L<Catmandu::Fix::Condition::marc_any_match>
78              
79             =cut
80              
81             1;