File Coverage

blib/lib/RDF/DOAP/Person.pm
Criterion Covered Total %
statement 39 43 90.7
branch 14 24 58.3
condition 4 14 28.5
subroutine 9 9 100.0
pod 0 1 0.0
total 66 91 72.5


line stmt bran cond sub pod time code
1             package RDF::DOAP::Person;
2              
3             our $AUTHORITY = 'cpan:TOBYINK';
4             our $VERSION = '0.103';
5              
6 2     2   14 use Moose;
  2         4  
  2         12  
7             extends qw(RDF::DOAP::Resource);
8              
9             use overload
10 20     20   239 q[""] => sub { shift->to_string },
11 2     2   12958 fallback => 1;
  2         5  
  2         38  
12              
13 2     2   1123 use RDF::DOAP::Types -types;
  2         9  
  2         22  
14 2     2   13358 use RDF::DOAP::Utils -traits;
  2         8  
  2         26  
15              
16 2     2   983 use RDF::Trine::Namespace qw(rdf rdfs owl xsd);
  2         7  
  2         28  
17             my $foaf = 'RDF::Trine::Namespace'->new('http://xmlns.com/foaf/0.1/');
18              
19             has $_ => (
20             traits => [ WithURI ],
21             is => 'ro',
22             isa => String,
23             coerce => 1,
24             uri => $foaf->$_,
25             ) for qw( name nick );
26              
27             has mbox => (
28             traits => [ WithURI ],
29             is => 'ro',
30             isa => ArrayRef[Identifier],
31             coerce => 1,
32             uri => $foaf->mbox,
33             multi => 1,
34             lazy => 1,
35             builder => '_build_mbox',
36             );
37              
38             has cpanid => (
39             is => 'ro',
40             isa => Maybe[Str],
41             lazy => 1,
42             builder => '_build_cpanid',
43             );
44              
45             sub _build_cpanid
46             {
47 3     3   7 my $self = shift;
48 3 50       97 return unless $self->has_rdf_about;
49 3 100       83 return unless $self->rdf_about->is_resource;
50 2 50       73 $self->rdf_about->uri =~ m{^http://purl\.org/NET/cpan-uri/person/(\w+)$}
51             and return $1;
52 0         0 return;
53             }
54              
55             sub _build_mbox
56             {
57 1     1   2 my $self = shift;
58 1 50       25 return [sprintf('mailto:%s@cpan.org', $self->cpanid)]
59             if defined $self->cpanid;
60 0         0 return [];
61             }
62              
63             sub to_string
64             {
65 23     23 0 44 my $self = shift;
66            
67 23 100 0     127 return $self->name
      66        
68             || $self->nick
69             || $self->cpanid
70             || ($self->mbox && $self->mbox->[0]->uri)
71             || ($self->rdf_about && $self->rdf_about->uri)
72             || 'Anonymous'
73             if @_ && $_[0] eq 'compact';
74            
75 21         38 my @parts;
76 21 50       586 if ($self->name)
77             {
78 21         499 push @parts, $self->name;
79 21 100       518 if ($self->cpanid)
80             {
81 20         460 push @parts, sprintf('(%s)', uc $self->cpanid);
82             }
83             }
84             else
85             {
86 0   0     0 my $nick = uc($self->nick) || uc($self->cpanid);
87 0 0       0 push @parts, $nick if $nick;
88             }
89            
90 21         51 for my $mbox (@{$self->mbox})
  21         502  
91             {
92 21 50 33     85 if ($mbox and $mbox->uri =~ /^mailto:(.+)$/)
93             {
94 21         947 push @parts, "<$1>";
95 21         57 last;
96             }
97             }
98            
99 21         41 for my $mbox (@{$self->mbox})
  21         864  
100             {
101 21 50       66 push @parts, $mbox if !@parts;
102             }
103            
104 21 50 33     68 push @parts, $self->rdf_about if !@parts && $self->has_rdf_about;
105            
106 21 50       226 join(" ", grep !!$_, @parts) or 'Anonymous';
107             }
108              
109             1;