File Coverage

blib/lib/XML/SAX/PurePerl/Reader/URI.pm
Criterion Covered Total %
statement 22 35 62.8
branch 5 10 50.0
condition 4 9 44.4
subroutine 5 6 83.3
pod 0 1 0.0
total 36 61 59.0


line stmt bran cond sub pod time code
1             # $Id$
2              
3             package XML::SAX::PurePerl::Reader::URI;
4              
5 12     12   61 use strict;
  12         22  
  12         469  
6              
7 12     12   64 use XML::SAX::PurePerl::Reader;
  12         20  
  12         365  
8 12     12   38347 use File::Temp qw(tempfile);
  12         397114  
  12         997  
9 12     12   120 use Symbol;
  12         44  
  12         7326  
10              
11             ## NOTE: This is *not* a subclass of Reader. It just returns Stream or String
12             ## Reader objects depending on what it's capabilities are.
13              
14             sub new {
15 17     17 0 36 my $class = shift;
16 17         33 my $uri = shift;
17             # request the URI
18 17 100 66     641 if (-e $uri && -f _) {
    50 33        
      33        
19 16         85 my $fh = gensym;
20 16 50       919 open($fh, $uri) || die "Cannot open file $uri : $!";
21 16         161 return XML::SAX::PurePerl::Reader::Stream->new($fh);
22             }
23             elsif ($uri =~ /^file:(.*)$/ && -e $1 && -f _) {
24 1         4 my $file = $1;
25 1         7 my $fh = gensym;
26 1 50       83 open($fh, $file) || die "Cannot open file $file : $!";
27 1         11 return XML::SAX::PurePerl::Reader::Stream->new($fh);
28             }
29             else {
30             # request URI, return String reader
31 0           require LWP::UserAgent;
32 0           my $ua = LWP::UserAgent->new;
33 0           $ua->agent("Perl/XML/SAX/PurePerl/1.0 " . $ua->agent);
34            
35 0           my $req = HTTP::Request->new(GET => $uri);
36            
37 0           my $fh = tempfile();
38            
39             my $callback = sub {
40 0     0     my ($data, $response, $protocol) = @_;
41 0           print $fh $data;
42 0           };
43            
44 0           my $res = $ua->request($req, $callback, 4096);
45            
46 0 0         if ($res->is_success) {
47 0           seek($fh, 0, 0);
48 0           return XML::SAX::PurePerl::Reader::Stream->new($fh);
49             }
50             else {
51 0           die "LWP Request Failed";
52             }
53             }
54             }
55              
56              
57             1;