File Coverage

blib/lib/Validation/Class/Directive/State.pm
Criterion Covered Total %
statement 27 27 100.0
branch 8 12 66.6
condition 2 6 33.3
subroutine 5 5 100.0
pod 0 1 0.0
total 42 51 82.3


line stmt bran cond sub pod time code
1             # ABSTRACT: State Directive for Validation Class Field Definitions
2              
3             package Validation::Class::Directive::State;
4              
5 108     108   70350 use strict;
  108         259  
  108         2832  
6 108     108   530 use warnings;
  108         198  
  108         2818  
7              
8 108     108   524 use base 'Validation::Class::Directive';
  108         191  
  108         7797  
9              
10 108     108   596 use Validation::Class::Util;
  108         217  
  108         732  
11              
12             our $VERSION = '7.900057'; # VERSION
13              
14              
15             has 'mixin' => 1;
16             has 'field' => 1;
17             has 'multi' => 0;
18             has 'message' => '%s is not a valid state';
19             has 'regexp' => sub {sprintf'^(%s)$',join'|',map{quotemeta}@{shift->states}};
20             has 'states' => sub {[ # u.s. states and territories
21             'Alabama',
22             'Alaska',
23             'Arizona',
24             'Arkansas',
25             'California',
26             'Colorado',
27             'Connecticut',
28             'Delaware',
29             'Florida',
30             'Georgia',
31             'Hawaii',
32             'Idaho',
33             'Illinois',
34             'Indiana',
35             'Iowa',
36             'Kansas',
37             'Kentucky',
38             'Louisiana',
39             'Maine',
40             'Maryland',
41             'Massachusetts',
42             'Michigan',
43             'Minnesota',
44             'Mississippi',
45             'Missouri',
46             'Montana',
47             'Nebraska',
48             'Nevada',
49             'New Hampshire',
50             'New Jersey',
51             'New Mexico',
52             'New York',
53             'North Carolina',
54             'North Dakota',
55             'Ohio',
56             'Oklahoma',
57             'Oregon',
58             'Pennsylvania',
59             'Rhode Island',
60             'South Carolina',
61             'South Dakota',
62             'Tennessee',
63             'Texas',
64             'Utah',
65             'Vermont',
66             'Virginia',
67             'Washington',
68             'West Virginia',
69             'Wisconsin',
70             'Wyoming',
71             'District of Columbia',
72             'Puerto Rico',
73             'Guam',
74             'American Samoa',
75             'U.S. Virgin Islands',
76             'Northern Mariana Islands',
77             ]};
78              
79             sub validate {
80              
81 46     46 0 109 my ($self, $proto, $field, $param) = @_;
82              
83 46 50 33     314 if (defined $field->{state} && defined $param) {
84              
85 46 50 33     246 if ($field->{required} || $param) {
86              
87 46         72 my $type = $field->{state};
88 46         178 my $lre = $self->regexp;
89              
90 46         1640 my $sre = {
91             'abbr' => qr/^(A[LKSZRAEP]|C[AOT]|D[EC]|F[LM]|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEHINOPST]|N[CDEHJMVY]|O[HKR]|P[ARW]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$/i,
92             'long' => qr/$lre/i,
93             };
94              
95 46         119 my $is_valid = 0;
96              
97 46 50       152 $type = isa_arrayref($type) ? $type : $type == 1 ? [keys %$sre] : [$type];
    50          
98              
99 46         85 for (@{$type}) {
  46         116  
100              
101 81 100       729 if ($param =~ $sre->{$_}) {
102 26         35 $is_valid = 1;
103 26         50 last;
104             }
105              
106             }
107              
108 46 100       281 $self->error($proto, $field) unless $is_valid;
109              
110             }
111              
112             }
113              
114 46         174 return $self;
115              
116             }
117              
118             1;
119              
120             __END__