File Coverage

blib/lib/SRS/EPP/Command/PayloadClass.pm
Criterion Covered Total %
statement 1 3 33.3
branch n/a
condition n/a
subroutine 1 1 100.0
pod n/a
total 2 4 50.0


line stmt bran cond sub pod time code
1             package SRS::EPP::Command::PayloadClass;
2              
3 1     1   12662 use Moose::Role;
  0            
  0            
4              
5             sub payload_class {
6             my $self = shift;
7             my $class = ref $self;
8             my $root_element = shift;
9             my $xmlns = shift;
10             our $payload_classes;
11             if ( !$payload_classes->{$class} ) {
12             $payload_classes->{$class} = {
13             map {
14             $_->can("xmlns") ?
15             ($_->action.":".$_->xmlns => $_)
16             : ();
17             } $self->plugins,
18             };
19             #print "payload classes for $class are: ".Dumper($payload_classes->{$class});
20             }
21             $payload_classes->{$class}{ $root_element.":".$xmlns };
22             }
23              
24             sub REBLESS {
25             my $self = shift;
26             if ( my $epp = $self->message ) {
27             my $payload = eval { $epp->message->argument->payload } or return;
28             # print "payload is $payload\n";
29              
30             # ASSERT($payload->does("PRANG::Graph"));
31              
32             my $root_element = $payload->root_element;
33             my $xmlns = $payload->xmlns;
34              
35             # print "looking for plugin that handles $root_element ($xmlns)\n";
36              
37             if (my $class = $self->payload_class($root_element, $xmlns)) {
38             # print "reblessing $self into $class\n";
39             bless $self, $class;
40             no strict 'refs';
41             $self->REBLESS if defined &{"${class}::REBLESS"};
42             }
43             }
44             }
45              
46             1;