File Coverage

blib/lib/HTTP/OAI/Header.pm
Criterion Covered Total %
statement 33 39 84.6
branch 14 20 70.0
condition 1 6 16.6
subroutine 8 10 80.0
pod 7 8 87.5
total 63 83 75.9


line stmt bran cond sub pod time code
1             package HTTP::OAI::Header;
2              
3             @ISA = qw( HTTP::OAI::MemberMixin HTTP::OAI::SAX::Base );
4              
5 11     11   65 use strict;
  11         20  
  11         439  
6              
7             our $VERSION = '4.12';
8              
9 11     11   54 use POSIX qw/strftime/;
  11         17  
  11         84  
10              
11 33     33 1 219 sub identifier { shift->_elem('identifier',@_) }
12             sub datestamp {
13 15     15 1 30 my $self = shift;
14 15 100       37 return $self->_elem('datestamp') unless @_;
15 13 50       29 my $ds = shift or return $self->_elem('datestamp',undef);
16 13 50       63 if( $ds =~ /^(\d{4})(\d{2})(\d{2})$/ ) {
    50          
17 0         0 $ds = "$1-$2-$3";
18             } elsif( $ds =~ /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/ ) {
19 0         0 $ds = "$1-$2-$3T$4:$5:$6Z";
20             }
21 13         36 return $self->_elem('datestamp',$ds);
22             }
23 16     16 1 65 sub status { shift->_elem('status',@_) }
24 14     14 1 63 sub setSpec { shift->_multi('setSpec',@_) }
25              
26 0     0 0 0 sub now { return strftime("%Y-%m-%dT%H:%M:%SZ",gmtime()) }
27              
28 0   0 0 1 0 sub is_deleted { my $s = shift->status(); return defined($s) && $s eq 'deleted'; }
  0         0  
29              
30             sub generate
31             {
32 1     1 1 15 my ($self, $driver) = @_;
33              
34 1 50       4 if( defined($self->status) ) {
35 1         11 $driver->start_element( 'header', status => $self->status );
36             } else {
37 0         0 $driver->start_element( 'header' );
38             }
39 1         80 $driver->data_element( 'identifier', $self->identifier );
40 1   33     13 $driver->data_element( 'datestamp', ($self->datestamp || $self->now) );
41 1         10 for($self->setSpec)
42             {
43 2         10 $driver->data_element( 'setSpec', $_ );
44             }
45 1         10 $driver->end_element( 'header' );
46             }
47              
48             sub end_element {
49 51     51 1 408 my ($self,$hash) = @_;
50 51         100 my $elem = lc($hash->{LocalName});
51 51         76 my $text = $hash->{Text};
52 51 50       95 if( defined $text )
53             {
54 51         102 $text =~ s/^\s+//;
55 51         114 $text =~ s/\s+$//;
56             }
57 51 100       158 if( $elem eq 'identifier' ) {
    100          
    100          
    50          
58 13         42 $self->identifier($text);
59             } elsif( $elem eq 'datestamp' ) {
60 13         44 $self->datestamp($text);
61             } elsif( $elem eq 'setspec' ) {
62 12         25 $self->setSpec($text);
63             } elsif( $elem eq 'header' ) {
64 13         57 $self->status($hash->{Attributes}->{'{}status'}->{Value});
65             }
66             }
67              
68             1;
69              
70             __END__