File Coverage

blib/lib/Geography/States/Borders.pm
Criterion Covered Total %
statement 12 12 100.0
branch n/a
condition n/a
subroutine 4 4 100.0
pod 1 1 100.0
total 17 17 100.0


line stmt bran cond sub pod time code
1             package Geography::States::Borders;
2             our $AUTHORITY = 'cpan:GENE';
3              
4             # ABSTRACT: Return the borders of states and provinces
5              
6             our $VERSION = '0.0107';
7              
8 2     2   890393 use strictures 2;
  2         4458  
  2         159  
9 2     2   5940 use Moo;
  2         21494  
  2         26  
10 2     2   5660 use namespace::clean;
  2         38936  
  2         16  
11              
12              
13             has country => (
14             is => 'ro',
15             isa => sub { die "$_[0] is not valid" unless $_[0] =~ /^[a-zA-Z]+$/ },
16             default => sub { 'usa' },
17             );
18              
19             has _australia => (
20             is => 'ro',
21             init_arg => undef,
22             default => sub {
23             {
24             ACT => [qw(NSW)],
25             NSW => [qw(ACT VIC SA QLD)],
26             NT => [qw(WA QLD SA)],
27             QLD => [qw(NSW SA NT)],
28             SA => [qw(WA NT QLD NSW VIC )],
29             TAS => [],
30             VIC => [qw(SA NSW)],
31             WA => [qw(NT SA)],
32             }
33             },
34             );
35              
36             has _brazil => (
37             is => 'ro',
38             init_arg => undef,
39             default => sub {
40             {
41             AC => [qw(AM RO)],
42             AL => [qw(BA PE SE)],
43             AM => [qw(AC MT RO RR)],
44             AP => [qw(PA)],
45             BA => [qw(ES MG GO TO PI PE AL SE)],
46             CE => [qw(RN PB PE PI )],
47             DF => [qw(GO MG)],
48             ES => [qw(RJ MG BA)],
49             GO => [qw(DF MG MS MT TO BA)],
50             MA => [qw(PI TO PA)],
51             MG => [qw(SP MS GO DF BA ES RJ)],
52             MS => [qw(MT GO MG SP PR)],
53             MT => [qw(RO AM PA TO GO MS)],
54             PA => [qw(MT AM RR AP MA TO)],
55             PB => [qw(PE CE RN)],
56             PE => [qw(AL BA PI CE PB)],
57             PI => [qw(BA TO MA CE PE)],
58             PR => [qw(MS SP SC)],
59             RJ => [qw(SP MG ES)],
60             RN => [qw(PB CE)],
61             RO => [qw(AC AM MT)],
62             RR => [qw(AM PA)],
63             RS => [qw(SC)],
64             SC => [qw(RS PR)],
65             SE => [qw(BA AL)],
66             SP => [qw(PR MS MG RJ)],
67             TO => [qw(GO MT PA MA PI BA)],
68             }
69             },
70             );
71              
72             has _canada => (
73             is => 'ro',
74             init_arg => undef,
75             default => sub {
76             {
77             AB => [qw(BC NT SK)],
78             BC => [qw(AB NT YT)],
79             MB => [qw(NU ON SK)],
80             NB => [qw(NS QC)],
81             NL => [qw(QC)],
82             NS => [qw(NB)],
83             NT => [qw(AB BC NU SK YT)],
84             NU => [qw(MB NT)],
85             ON => [qw(MB QC)],
86             PE => [],
87             QC => [qw(NB NL ON)],
88             SK => [qw(AB MB NT)],
89             YT => [qw(BC NT)],
90             }
91             },
92             );
93              
94             has _netherlands => (
95             is => 'ro',
96             init_arg => undef,
97             default => sub {
98             {
99             DR => [qw(OV FR GR)],
100             FL => [qw(OV)],
101             FR => [qw(FL GR DR OV)],
102             GE => [qw(LI NB ZH UT OV)],
103             GR => [qw(DR FR)],
104             LI => [qw(NB GE)],
105             NB => [qw(ZE ZH GE LI)],
106             NH => [qw(ZH UT)],
107             OV => [qw(GE FL FR DR)],
108             UT => [qw(ZH NH GE)],
109             ZE => [qw(NB)],
110             ZH => [qw(NH UT GE NB)],
111             AW => [],
112             CW => [],
113             SX => [],
114             BQ1 => [],
115             BQ2 => [],
116             BQ3 => [],
117             }
118             },
119             );
120              
121             has _usa => (
122             is => 'ro',
123             init_arg => undef,
124             default => sub {
125             {
126             AK => [],
127             AL => [qw(FL GA MS TN)],
128             AR => [qw(LA MS MO OK TN TX)],
129             AS => [],
130             AZ => [qw(CA CO NV NM UT)],
131             CA => [qw(OR NV AZ)],
132             CO => [qw(AZ KS NE NM OK UT)],
133             CT => [qw(MA NY RI)],
134             DC => [qw(VA MD)],
135             DE => [qw(MD NJ PA)],
136             FL => [qw(GA AL)],
137             FM => [],
138             GA => [qw(FL AL TN NC SC)],
139             GU => [],
140             HI => [],
141             IA => [qw(IL MN MO NE SD WI)],
142             ID => [qw(MT NV OR UT WA WY)],
143             IL => [qw(IN KY MO IA WI)],
144             IN => [qw(IL KY MI OH)],
145             KS => [qw(CO MO NE OK)],
146             KY => [qw(IL IN MO OH TN VA WV)],
147             LA => [qw(AR MS TX)],
148             MA => [qw(CT NH NY RI VT)],
149             MD => [qw(DE PA VA DC WV)],
150             ME => [qw(NH)],
151             MH => [],
152             MI => [qw(WI OH IN MN)],
153             MN => [qw(IA MI ND SD WI)],
154             MO => [qw(AR IL IA KS KY NE OK TN)],
155             MP => [],
156             MS => [qw(AL AR LA TN)],
157             MT => [qw(ID ND SD WY)],
158             NC => [qw(GA SC TN VA)],
159             ND => [qw(MN MT SD)],
160             NE => [qw(CO IA KS MO SD WY)],
161             NH => [qw(MN MA VT)],
162             NJ => [qw(NY PA DE)],
163             NM => [qw(AZ CO OK TX UT)],
164             NV => [qw(AZ CA ID OR UT)],
165             NY => [qw(VT MA CT NJ PA)],
166             OH => [qw(PA WV KY IN MI)],
167             OK => [qw(AR CO KS MO NM TX)],
168             OR => [qw(CA ID NV WA)],
169             PA => [qw(NY NJ DE MD WV OH)],
170             PR => [],
171             PW => [],
172             RI => [qw(CT MA NY)],
173             SC => [qw(GA NC)],
174             SD => [qw(IA MN MT NE ND WY)],
175             TN => [qw(AL AR GA KY MS MO NC VA)],
176             TX => [qw(AR LA NM OK)],
177             UT => [qw(AZ CO ID NV NM WY)],
178             VA => [qw(KY MD NC TN WV DC)],
179             VI => [],
180             VT => [qw(MA NH NY)],
181             WA => [qw(ID OR)],
182             WI => [qw(MN MI IA IL)],
183             WV => [qw(KY MD OH PA VA)],
184             WY => [qw(CO MT NE SD UT ID)],
185             }
186             },
187             );
188              
189              
190             sub borders {
191 6     6 1 11031 my ($self) = @_;
192 6         26 my $states = '_' . lc $self->country;
193 6         48 return $self->$states();
194             }
195              
196             1;
197              
198             __END__