File Coverage

blib/lib/URI/news.pm
Criterion Covered Total %
statement 46 46 100.0
branch 22 24 91.6
condition 6 6 100.0
subroutine 9 9 100.0
pod 1 3 33.3
total 84 88 95.4


line stmt bran cond sub pod time code
1             package URI::news; # draft-gilman-news-url-01
2              
3 2     2   16 use strict;
  2         4  
  2         115  
4 2     2   13 use warnings;
  2         4  
  2         198  
5              
6             our $VERSION = '5.34';
7              
8 2     2   14 use parent 'URI::_server';
  2         3  
  2         16  
9              
10 2     2   181 use URI::Escape qw(uri_unescape);
  2         5  
  2         118  
11 2     2   13 use Carp ();
  2         5  
  2         1485  
12              
13 4     4 1 9 sub default_port { 119 }
14              
15             # newsURL = scheme ":" [ news-server ] [ refbygroup | message ]
16             # scheme = "news" | "snews" | "nntp"
17             # news-server = "//" server "/"
18             # refbygroup = group [ "/" messageno [ "-" messageno ] ]
19             # message = local-part "@" domain
20              
21             sub _group
22             {
23 18     18   33 my $self = shift;
24 18         77 my $old = $self->path;
25 18 100       51 if (@_) {
26 4         10 my($group,$from,$to) = @_;
27 4 100       14 if ($group =~ /\@/) {
28 2         11 $group =~ s/^<(.*)>$/$1/; # "<" and ">" should not be part of it
29             }
30 4         10 $group =~ s,%,%25,g;
31 4         20 $group =~ s,/,%2F,g;
32 4         9 my $path = $group;
33 4 100       10 if (defined $from) {
34 1         4 $path .= "/$from";
35 1 50       4 $path .= "-$to" if defined $to;
36             }
37 4         12 $self->path($path);
38             }
39              
40 18         45 $old =~ s,^/,,;
41 18 100 100     117 if ($old !~ /\@/ && $old =~ s,/(.*),, && wantarray) {
      100        
42 2         7 my $extra = $1;
43 2         10 return (uri_unescape($old), split(/-/, $extra));
44             }
45 16         50 uri_unescape($old);
46             }
47              
48              
49             sub group
50             {
51 12     12 0 48 my $self = shift;
52 12 100       33 if (@_) {
53 2 50       10 Carp::croak("Group name can't contain '\@'") if $_[0] =~ /\@/;
54             }
55 12         42 my @old = $self->_group(@_);
56 12 100       38 return if $old[0] =~ /\@/;
57 11 100       58 wantarray ? @old : $old[0];
58             }
59              
60             sub message
61             {
62 6     6 0 867 my $self = shift;
63 6 100       21 if (@_) {
64 3 100       280 Carp::croak("Message must contain '\@'") unless $_[0] =~ /\@/;
65             }
66 5         15 my $old = $self->_group(@_);
67 5 100       24 return undef unless $old =~ /\@/;
68 2         10 return $old;
69             }
70              
71             1;