File Coverage

blib/lib/Business/UPS/Tracking/Element/Address.pm
Criterion Covered Total %
statement 7 9 77.7
branch n/a
condition n/a
subroutine 3 3 100.0
pod n/a
total 10 12 83.3


line stmt bran cond sub pod time code
1             # ============================================================================
2             package Business::UPS::Tracking::Element::Address;
3             # ============================================================================
4 1     1   8192 use utf8;
  1         4  
  1         10  
5 1     1   76 use 5.0100;
  1         4  
  1         41  
6              
7 1     1   1673 use Moose;
  0            
  0            
8              
9             use Business::UPS::Tracking::Utils;
10              
11             =encoding utf8
12              
13             =head1 NAME
14              
15             Business::UPS::Tracking::Element::Address - An address
16            
17             =head1 DESCRIPTION
18              
19             This class represents an address. Usually it is created
20             automatically from a L<Business::UPS::Tracking::Shipment> object.
21              
22             =head1 ACCESSORS
23              
24             =head2 xml
25              
26             Original L<XML::LibXML::Node> node.
27              
28             =head2 AddressLine1
29              
30             =head2 AddressLine2
31              
32             =head2 AddressLine3
33              
34             =head2 City
35              
36             =head2 StateProviceCode
37              
38             Only US and Canada
39              
40             =head2 PostalCode
41              
42             =head2 CountryCode
43              
44             ISO 3166-1 alpha-2 country code.
45              
46             =cut
47              
48             has 'xml' => (
49             is => 'rw',
50             isa => 'XML::LibXML::Node',
51             required => 1,
52             trigger => \&_build_address,
53             );
54             has 'AddressLine1' => (
55             is => 'rw',
56             isa => 'Maybe[Str]',
57             );
58             has 'AddressLine2' => (
59             is => 'rw',
60             isa => 'Maybe[Str]',
61             );
62             has 'AddressLine3' => (
63             is => 'rw',
64             isa => 'Maybe[Str]',
65             );
66             has 'City' => (
67             is => 'rw',
68             isa => 'Maybe[Str]',
69             );
70             has 'StateProvinceCode' => (
71             is => 'rw',
72             isa => 'Maybe[Str]',
73             );
74             has 'PostalCode' => (
75             is => 'rw',
76             isa => 'Maybe[Str]',
77             );
78             has 'CountryCode' => (
79             is => 'rw',
80             isa => 'Maybe[Str]',
81             );
82              
83             sub _build_address {
84             my ( $self, $xml ) = @_;
85              
86             foreach my $node ( @{ $xml->childNodes } ) {
87             my $name = $node->nodeName;
88             my $value = $node->textContent;
89             next unless $self->can($name);
90             next unless defined $value;
91             $self->$name($value);
92             }
93              
94             return;
95             }
96              
97             =head1 METHODS
98              
99             =head2 printall
100              
101             Serialize address into a string.
102              
103             =head2 meta
104              
105             Moose meta method
106              
107             =cut
108              
109             sub printall {
110             my ($self) = @_;
111            
112             my @address;
113             push (@address,$self->AddressLine1)
114             if $self->AddressLine1;
115             push (@address,$self->AddressLine2)
116             if $self->AddressLine2;
117             push (@address,$self->AddressLine3)
118             if $self->AddressLine3;
119            
120             my $line = $self->CountryCode;
121             $line .= '-'.$self->PostalCode
122             if $self->PostalCode;
123             $line .= ' '.$self->City
124             if $self->City;
125            
126             push (@address,$line);
127            
128             return join("\n",@address);
129             }
130              
131             __PACKAGE__->meta->make_immutable;
132             no Moose;
133             1;