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 14     14   79 use strict;
  14         27  
  14         355  
6              
7 14     14   71 use XML::SAX::PurePerl::Reader;
  14         22  
  14         314  
8 14     14   8339 use File::Temp qw(tempfile);
  14         265002  
  14         968  
9 14     14   104 use Symbol;
  14         27  
  14         4262  
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 18     18 0 40 my $class = shift;
16 18         28 my $uri = shift;
17             # request the URI
18 18 100 66     403 if (-e $uri && -f _) {
    50 33        
      33        
19 17         86 my $fh = gensym;
20 17 50       982 open($fh, $uri) || die "Cannot open file $uri : $!";
21 17         150 return XML::SAX::PurePerl::Reader::Stream->new($fh);
22             }
23             elsif ($uri =~ /^file:(.*)$/ && -e $1 && -f _) {
24 1         5 my $file = $1;
25 1         3 my $fh = gensym;
26 1 50       43 open($fh, $file) || die "Cannot open file $file : $!";
27 1         10 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;