File Coverage

blib/lib/MARC/Spec.pm
Criterion Covered Total %
statement 37 41 90.2
branch 7 10 70.0
condition n/a
subroutine 9 9 100.0
pod 1 5 20.0
total 54 65 83.0


line stmt bran cond sub pod time code
1             package MARC::Spec;
2              
3 13     13   161606 use Carp qw(croak);
  13         16  
  13         1441  
4 13     13   5160 use Moo;
  13         112668  
  13         56  
5 13     13   17100 use MARC::Spec::Parser;
  13         23  
  13         380  
6 13     13   451 use namespace::clean;
  13         8068  
  13         43  
7              
8             our $VERSION = '0.1.4';
9              
10             has field => (
11             is => 'rw',
12             isa => sub {
13             croak('Field is not an instance of MARC::Spec::Field')
14             if(ref $_[0] ne 'MARC::Spec::Field')
15             },
16             required => 1
17             );
18              
19             has subfields => (
20             is => 'rwp',
21             isa => sub {
22             croak('Subfield is not an instance of MARC::Spec::Subfield.')
23             if(grep {ref $_ ne 'MARC::Spec::Subfield'} @{$_[0]})
24             },
25             predicate => 1
26             );
27              
28             sub BUILDARGS {
29 40     40 0 11467 my ($class, @args) = @_;
30 40 50       101 if (@args % 2 == 1) { unshift @args, "field" }
  40         60  
31 40         566 return { @args };
32             }
33              
34             sub add_subfield {
35 2     2 0 14 my ($self, $subfield) = @_;
36 2 50       9 if(!$self->has_subfields) {
37 2         28 $self->_set_subfields([$subfield]);
38             } else {
39 0         0 my @subfields = ( @{$self->subfields}, $subfield );
  0         0  
40 0         0 $self->_set_subfields( \@subfields );
41             }
42             }
43              
44             sub add_subfields {
45 23     23 0 28 my ($self, $subfields) = @_;
46 23 50       44 if (ref $subfields ne 'ARRAY') {
47 0         0 croak('Subfields is not an ARRAYRef!')
48             }
49 23 100       78 if(!$self->has_subfields) {
50 22         301 $self->_set_subfields($subfields);
51             } else {
52 1         1 my @merged = ( @{$self->subfields}, @{$subfields} );
  1         2  
  1         2  
53 1         13 $self->_set_subfields( \@merged )
54             }
55             }
56              
57             sub parse {
58 30     30 1 7616 my ($self, $spec) = @_;
59 30         392 my $parser = MARC::Spec::Parser->new($spec);
60 19         204 return $parser->marcspec;
61             }
62              
63             sub to_string {
64 9     9 0 27 my ($self) = @_;
65 9         102 my $string = $self->field->to_string();
66 9 100       16 if($self->has_subfields) {
67 5         7 foreach my $sf (@{$self->subfields}) {
  5         10  
68 5         10 $string .= $sf->to_string()
69             }
70             }
71 9         64 return $string;
72             }
73             1;
74             __END__