File Coverage

blib/lib/Padre/Swarm/Identity.pm
Criterion Covered Total %
statement 24 32 75.0
branch 0 2 0.0
condition 3 4 75.0
subroutine 9 12 75.0
pod 0 6 0.0
total 36 56 64.2


line stmt bran cond sub pod time code
1             package Padre::Swarm::Identity;
2              
3             =pod
4              
5             =head1 NAME
6              
7             Padre::Swarm::Identity - represent a unique identity in the swarm
8              
9             =head1 SYNOPSIS
10              
11             my $id = $message->identity;
12             printf(
13             '%s @[%s] using resource %s on service %s',
14             $id->nickname,
15             $id->transport,
16             $id->resource,
17             $id->service,
18             );
19             my $swarm_id = $id->canonical;
20              
21             =head1 DESCRIPTION
22              
23             Attempt to make anything and everything addressable. More work needed.
24              
25             =cut
26              
27 1     1   34497 use strict;
  1         3  
  1         31  
28 1     1   4 use warnings;
  1         1  
  1         25  
29 1     1   4 use Carp qw( croak );
  1         2  
  1         66  
30 1     1   897 use Params::Util qw( _STRING );
  1         6257  
  1         108  
31              
32             use Class::XSAccessor
33 1         16 constructor => 'new',
34             getters => {
35             nickname => 'nickname',
36             transport => 'transport',
37             service => 'service',
38             resource => 'resource',
39             identity => 'identity',
40 1     1   91184 };
  1         4023  
41              
42             sub is_valid {
43 0     0 0 0 defined $_[0]->{canonical};
44             }
45              
46             sub set_nickname {
47 0     0 0 0 my $self = shift;
48 0         0 my $arg = shift;
49 0         0 my ($nickname) = $arg =~ /([^\W!]+)/;
50 0 0       0 croak "Invalid nickname '$arg'" unless $nickname;
51 0         0 $self->{nickname} = $nickname;
52             }
53              
54             sub set_service {
55 1     1 0 3 my ($self,$xport) = @_;
56 1         57 $self->{service} = $xport;
57             }
58              
59              
60             sub set_transport {
61 0     0 0 0 my ($self,$xport) = @_;
62 0         0 $self->{transport} = $xport;
63             }
64              
65             sub set_resource {
66 1     1 0 2 my ($self,$xport) = @_;
67 1         3 $self->{resource} = $xport;
68             }
69              
70             sub canonical {
71 6     6 0 28 my $self = shift;
72 6         12 $self->_canonise;
73             }
74              
75             sub _canonise {
76 6     6   8 my $self = shift;
77             # Revolting!
78 6   50     44 my $ident = sprintf(
      100        
79             '%s!%s|%s@%s' ,
80             $self->{nickname},
81             $self->{service},
82             $self->{transport} || 'unknown',
83             $self->{resource} || '',
84             );
85 6         27 $self->{canonical} = $ident;
86             }
87              
88             1;