File Coverage

blib/lib/Net/OAI/ListSets.pm
Criterion Covered Total %
statement 38 39 97.4
branch 5 6 83.3
condition 1 3 33.3
subroutine 9 9 100.0
pod 6 6 100.0
total 59 63 93.6


line stmt bran cond sub pod time code
1             package Net::OAI::ListSets;
2              
3 14     14   175 use strict;
  14         29  
  14         519  
4 14     14   83 use base qw( XML::SAX::Base );
  14         26  
  14         1066  
5 14     14   119 use base qw( Net::OAI::Base );
  14         37  
  14         7143  
6              
7             =head1 NAME
8              
9             Net::OAI::ListSets - The results of the ListSets OAI-PMH verb.
10              
11             =head1 SYNOPSIS
12              
13             =head1 DESCRIPTION
14              
15             =head1 METHODS
16              
17             =head2 new()
18              
19             =cut
20              
21             sub new {
22 1     1 1 6 my ( $class, %opts ) = @_;
23 1   33     10 my $self = bless \%opts, ref( $class ) || $class;
24 1         14 $self->{ insideSet } = 0;
25 1         4 $self->{ specs } = {};
26 1         5 return( $self );
27             }
28              
29             =head2 setSpecs()
30              
31             Get back a list of set specification codes.
32              
33             =cut
34              
35             sub setSpecs {
36 1     1 1 855 my $self = shift;
37 1         2 return( sort( keys( %{ $self->{ specs } } ) ) );
  1         50  
38             }
39              
40             =head2 setName()
41              
42             Pass in a setSpec code, and get back it's name...or undef if the set spec does
43             not exist for this repository.
44              
45             =cut
46              
47             sub setName {
48 112     112 1 32834 my ( $self, $setSpec ) = @_;
49 112 50       382 if ( exists( $self->{ specs }{ $setSpec } ) ) {
50 112         570 return( $self->{ specs }{ $setSpec } );
51             }
52 0         0 return( undef );
53             }
54              
55             ## SAX Handlers
56              
57             sub start_element {
58 1789     1789 1 11224 my ( $self, $element ) = @_;
59 1789         4746 $self->SUPER::start_element( $element );
60 1789         9644 push( @{ $self->{ tagStack } }, $element->{ Name } );
  1789         8886  
61             }
62              
63             sub end_element {
64 1789     1789 1 11089 my ( $self, $element ) = @_;
65 1789 100       4597 if ( $element->{ Name } eq 'set' ) {
66 56         360 $self->{ specs }{ $self->{ setSpec } } = $self->{ setName };
67 56         157 $self->{ setSpec } = undef;
68 56         128 $self->{ setName } = undef;
69             }
70 1789         4986 $self->SUPER::end_element( $element );
71 1789         15863 pop( @{ $self->{ tagStack } } );
  1789         7587  
72             }
73              
74             sub characters {
75 3763     3763 1 21681 my ( $self, $characters ) = @_;
76 3763         3938 my $insideTag = @{ $self->{ tagStack } }[-1];
  3763         7286  
77 3763 100       10722 if ( $insideTag =~ /^(setName|setSpec)$/ ) {
78 117         397 $self->{ $insideTag } .= $characters->{ Data };
79             }
80 3763         9902 $self->SUPER::characters( $characters );
81             }
82              
83             1;