validatious 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +20 -2
- data/lib/validatious.rb +6 -0
- data/lib/validatious/addresses/countries.rb +346 -0
- data/lib/validatious/addresses/provinces.rb +42 -0
- data/lib/validatious/addresses/searchable.rb +90 -0
- data/lib/validatious/addresses/states.rb +102 -0
- data/lib/validatious/helper_methods.rb +4 -0
- data/lib/validatious/locale/en.yml +1 -0
- data/lib/validatious/validators/postal_code_validator.rb +49 -0
- data/lib/validatious/version.rb +1 -1
- data/spec/spec_helper.rb +4 -0
- data/spec/support/models/person.rb +13 -0
- data/spec/validatious/addresses/countries_spec.rb +77 -0
- data/spec/validatious/addresses/states_spec.rb +27 -0
- data/spec/validatious/helper_methods_spec.rb +1 -0
- data/spec/validatious/validators/postal_code_validator_spec.rb +15 -0
- metadata +50 -46
data/README.md
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
Validatious -- A collection of delicious Rails validators
|
2
2
|
=========================================================
|
3
3
|
|
4
|
-
## DESCRIPTION
|
5
|
-
|
6
4
|
No matter what app you are working on, Rails never seems to include all the
|
7
5
|
validations you need, and you end having to repeat yourself over and over by
|
8
6
|
writing regex validations and/or custom validators.
|
@@ -66,6 +64,26 @@ or
|
|
66
64
|
|
67
65
|
validates_email_format_of :email
|
68
66
|
|
67
|
+
|
68
|
+
### Postal Code
|
69
|
+
|
70
|
+
This validates the format of a postal code address, ensuring that the attribute conforms
|
71
|
+
to the correct format as specified by the given country (default: US).
|
72
|
+
|
73
|
+
validates :zip, :postal_code => true
|
74
|
+
|
75
|
+
or specify a different country
|
76
|
+
|
77
|
+
validates :zip, :postal_code => { :country => 'UK' }
|
78
|
+
|
79
|
+
or validate for several countries
|
80
|
+
|
81
|
+
validates :zip, :postal_code => { :country => [ 'US', 'CA' ] }
|
82
|
+
|
83
|
+
or
|
84
|
+
|
85
|
+
validates_postal_code_format_of :zip
|
86
|
+
|
69
87
|
|
70
88
|
### Text Content
|
71
89
|
|
data/lib/validatious.rb
CHANGED
@@ -9,7 +9,13 @@ end
|
|
9
9
|
require "validatious/validators/url_validator"
|
10
10
|
require "validatious/validators/email_validator"
|
11
11
|
require "validatious/validators/text_content_validator"
|
12
|
+
require "validatious/validators/postal_code_validator"
|
12
13
|
require "validatious/helper_methods"
|
13
14
|
|
15
|
+
require "validatious/addresses/searchable"
|
16
|
+
require "validatious/addresses/states"
|
17
|
+
require "validatious/addresses/countries"
|
18
|
+
require "validatious/addresses/provinces"
|
19
|
+
|
14
20
|
require 'active_support/i18n'
|
15
21
|
I18n.load_path << File.dirname(__FILE__) + '/validatious/locale/en.yml'
|
@@ -0,0 +1,346 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
module Validatious
|
3
|
+
module Addresses
|
4
|
+
module Countries
|
5
|
+
include Searchable
|
6
|
+
|
7
|
+
postal5 = /^\d{5}$/
|
8
|
+
postal4 = /^\d{4}$/
|
9
|
+
postal6 = /^\d{6}$/
|
10
|
+
|
11
|
+
COUNTRIES = [
|
12
|
+
{ :name => 'Austria', :numeric => '040', :alpha2 => 'AT', :alpha3 => 'AUT', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => postal4 },
|
13
|
+
{ :name => 'Australia', :numeric => '036', :alpha2 => 'AU', :alpha3 => 'AUS', :continent => 'Australia', :region => ['Southern Hemisphere', 'Eastern Hemisphere', 'Australia'], :postal_code => postal4 },
|
14
|
+
{ :name => 'Belgium', :numeric => '056', :alpha2 => 'BE', :alpha3 => 'BEL', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => postal4 },
|
15
|
+
{ :name => 'Bulgaria', :numeric => '100', :alpha2 => 'BG', :alpha3 => 'BGR', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => postal4 },
|
16
|
+
{ :name => 'Canada', :numeric => '124', :alpha2 => 'CA', :alpha3 => 'CAN', :continent => 'North America', :region => ['Northern Hemisphere', 'Western Hemisphere', 'North America'], :postal_code => /^([A-Z]\d[A-Z][\-\s]?\d[A-Z](\d)?)$/i },
|
17
|
+
{ :name => 'Cyprus', :numeric => '196', :alpha2 => 'CY', :alpha3 => 'CYP', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => postal4 },
|
18
|
+
{ :name => 'Czech Republic', :numeric => '203', :alpha2 => 'CZ', :alpha3 => 'CZE', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^(CZ-)?\d{3}(\s)?\d{2}$/i },
|
19
|
+
{ :name => 'Denmark', :numeric => '208', :alpha2 => 'DK', :alpha3 => 'DNK', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^\d{3,4}$/ },
|
20
|
+
{ :name => 'Estonia', :numeric => '233', :alpha2 => 'EE', :alpha3 => 'EST', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^(EE-)?\d{4,5}$/i },
|
21
|
+
{ :name => 'Finland', :numeric => '246', :alpha2 => 'FI', :alpha3 => 'FIN', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => postal5 },
|
22
|
+
{ :name => 'France', :numeric => '249', :alpha2 => 'FR', :alpha3 => 'FRA', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => postal5 },
|
23
|
+
{ :name => 'Germany', :numeric => '278', :alpha2 => 'DE', :alpha3 => 'DEU', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => postal5 },
|
24
|
+
{ :name => 'Greece', :numeric => '300', :alpha2 => 'GR', :alpha3 => 'GRC', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^\d{3}(\s)?\d{2}$/ },
|
25
|
+
{ :name => 'Hungary', :numeric => '348', :alpha2 => 'HU', :alpha3 => 'HUN', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => postal4 },
|
26
|
+
{ :name => 'Ireland', :numeric => '372', :alpha2 => 'IE', :alpha3 => 'IRL', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /.?/ },
|
27
|
+
{ :name => 'Italy', :numeric => '380', :alpha2 => 'IT', :alpha3 => 'ITA', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => postal5 },
|
28
|
+
{ :name => 'Latvia', :numeric => '428', :alpha2 => 'LV', :alpha3 => 'LVA', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /(LV-)?\d{4}^$/i },
|
29
|
+
{ :name => 'Lithuania', :numeric => '440', :alpha2 => 'LT', :alpha3 => 'LTU', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^(LT-)?\d{5}$/i },
|
30
|
+
{ :name => 'Luxembourg', :numeric => '442', :alpha2 => 'LU', :alpha3 => 'LUX', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => postal4 },
|
31
|
+
{ :name => 'Malta', :numeric => '470', :alpha2 => 'MT', :alpha3 => 'MLT', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^[A-Z]{3}(\s)?\d{4}$/i },
|
32
|
+
{ :name => 'Netherlands', :numeric => '528', :alpha2 => 'NL', :alpha3 => 'NLD', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^\d{4}(\s)?[A-Z]{2}(\s)?(\d*)?$/ },
|
33
|
+
{ :name => 'Poland', :numeric => '616', :alpha2 => 'PL', :alpha3 => 'POL', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^\d{2}[\-\s]?\d{3}$/ },
|
34
|
+
{ :name => 'Portugal', :numeric => '620', :alpha2 => 'PT', :alpha3 => 'PRT', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^\d{4}[\-\s]?\d{3}$/ },
|
35
|
+
{ :name => 'Romania', :numeric => '642', :alpha2 => 'RO', :alpha3 => 'ROM', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^\d{6}$/ },
|
36
|
+
{ :name => 'Slovakia', :numeric => '703', :alpha2 => 'SK', :alpha3 => 'SVK', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^(SK-)?\d{3}(\s)?\d{2}$/ },
|
37
|
+
{ :name => 'Slovenia', :numeric => '705', :alpha2 => 'SI', :alpha3 => 'SVN', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^(SL-)?\d{4}$/i },
|
38
|
+
{ :name => 'Spain', :numeric => '724', :alpha2 => 'ES', :alpha3 => 'ESP', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => postal5 },
|
39
|
+
{ :name => 'Sweden', :numeric => '752', :alpha2 => 'SE', :alpha3 => 'SWE', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^\d{3}(\s)?\d{2}$/ },
|
40
|
+
{ :name => 'United Kingdom', :numeric => '826', :alpha2 => 'GB', :alpha3 => 'GBR', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^[\dA-Z]{2,4}(\s)?[\dA-Z]{3}$/i },
|
41
|
+
{ :name => 'United States', :numeric => '840', :alpha2 => 'US', :alpha3 => 'USA', :continent => 'North America', :region => ['Northern Hemisphere', 'Western Hemisphere', 'North America'], :postal_code => /^\d{5}([\-\s]?\d{4})?$/ }
|
42
|
+
]
|
43
|
+
|
44
|
+
# this is the eventual list of countries, but we must first fill in all the pertinent info before we can switch to this list
|
45
|
+
# TODO: all the EU countries need their regional Europe distinction added, i.e. Southern Europe, South-Eastern Europe, etc.
|
46
|
+
PRIVATE_COUNTRIES = [
|
47
|
+
{ :name => 'Afghanistan', :alpha2 => 'AF', :alpha3 => 'AFG', :numeric => '004', :continent => 'Asia', :region => ['Central Asia', 'Southern Asia', 'Central Asia', 'South-Central Asia', 'Northern Hemisphere', 'Eastern Hemisphere'], :postal_code => /./i },
|
48
|
+
{ :name => 'Albania', :alpha2 => 'AL', :alpha3 => 'ALB', :numeric => '008', :continent => 'Europe', :region => ['South-Eastern Europe', 'Southern Europe', 'Eastern Europe', 'Northern Hemisphere', 'Eastern Hemisphere'], :postal_code => /./i },
|
49
|
+
{ :name => 'Algeria', :alpha2 => 'DZ', :alpha3 => 'DZA', :numeric => '012', :continent => 'Africa', :region => ['North Africa', 'Northern Hemisphere', 'Eastern Hemisphere', 'Western Hemisphere'], :postal_code => postal4 },
|
50
|
+
{ :name => 'American Samoa', :alpha2 => 'AS', :alpha3 => 'ASM', :numeric => '016', :continent => 'Asia', :region => ['South Pacific', 'United States Territory', 'Southern Hemisphere', 'Eastern Hemisphere'], :postal_code => /^\d{5}([\-\s]?\d{4})?$/ },
|
51
|
+
{ :name => 'Andorra', :alpha2 => 'AD', :alpha3 => 'AND', :numeric => '020', :continent => 'Europe', :region => ['Southern Europe', 'Western Europe', 'South-Western Europe', 'Northern Hemisphere', 'Eastern Hemisphere'], :postal_code => /^[A-Z]{2}\d{3}$/i },
|
52
|
+
{ :name => 'Angola', :alpha2 => 'AO', :alpha3 => 'AGO', :numeric => '024', :continent => 'Africa', :region => ['Southern Africa', 'Central Africa', 'South-Central Africa', 'Southern Hemisphere', 'Eastern Hemisphere'], :postal_code => /./i },
|
53
|
+
{ :name => 'Anguilla', :alpha2 => 'AI', :alpha3 => 'AIA', :numeric => '660', :continent => 'North America', :region => ['Special Territory of the European Union', 'Carribean', 'Northern Hemisphere', 'Western Hemisphere'], :postal_code => /./i },
|
54
|
+
{ :name => 'Antigua and Barbuda', :alpha2 => 'AG', :alpha3 => 'ATG', :numeric => '028', :continent => 'North America', :region => ['Carribean', 'Northern Hemisphere', 'Western Hemisphere'], :postal_code => /./i },
|
55
|
+
{ :name => 'Argentina', :alpha2 => 'AR', :alpha3 => 'ARG', :numeric => '032', :continent => 'South America', :region => ['Latin America''Northern Hemisphere', 'Western Hemisphere'], :postal_code => /^[A-Z]\d{4}[A-Z]{3}$/i },
|
56
|
+
{ :name => 'Armenia', :alpha2 => 'AM', :alpha3 => 'ARM', :numeric => '051', :continent => 'Europe', :region => ['Eastern Europe', 'Southern Europe', 'South-Eastern Europe', 'Northern Hemisphere', 'Eastern Hemisphere'], :postal_code => /^\d{6}$/i },
|
57
|
+
{ :name => 'Aruba', :alpha2 => 'AW', :alpha3 => 'ABW', :numeric => '533', :continent => 'North America', :region => ['Carribean', 'Central America', 'Northern Hemisphere', 'Eastern Hemisphere'], :postal_code => /./i },
|
58
|
+
{ :name => 'Australia', :alpha2 => 'AU', :alpha3 => 'AUS', :numeric => '036', :continent => 'Australia', :region => ['Southern Hemisphere', 'Eastern Hemisphere', 'Australia', 'South Pacific'], :postal_code => postal4 },
|
59
|
+
{ :name => 'Austria', :alpha2 => 'AT', :alpha3 => 'AUT', :numeric => '040', :continent => 'Europe', :region => ['EU', 'Northern Hemisphere', 'Eastern Hemisphere'], :postal_code => postal4 },
|
60
|
+
{ :name => 'Åland Islands', :alpha2 => 'AX', :alpha3 => 'ALA', :numeric => '248', :continent => 'Europe', :region => ['Northern Europe''Northern Hemisphere', 'Eastern Hemisphere'], :postal_code => /^([A-Z]{2})?[\-\s]?\d{5}$/i },
|
61
|
+
{ :name => 'Azerbaijan', :alpha2 => 'AZ', :alpha3 => 'AZE', :numeric => '031', :continent => 'Europe', :region => ['Eastern Europe', 'Southern Europe', 'South-Eastern Europe', 'Northern Hemisphere', 'Eastern Hemisphere'], :postal_code => postal6 },
|
62
|
+
{ :name => 'Bahamas', :alpha2 => 'BS', :alpha3 => 'BHS', :numeric => '044', :continent => 'North America', :region => ['Central America', 'Carribean', 'Northern Hemisphere', 'Western Hemisphere'], :postal_code => /./i },
|
63
|
+
{ :name => 'Bahrain', :alpha2 => 'BH', :alpha3 => 'BHR', :numeric => '048', :continent => 'Europe', :region => [], :postal_code => /./i },
|
64
|
+
{ :name => 'Bangladesh', :alpha2 => 'BD', :alpha3 => 'BGD', :numeric => '050', :continent => 'Europe', :region => [], :postal_code => /./i },
|
65
|
+
{ :name => 'Barbados', :alpha2 => 'BB', :alpha3 => 'BRB', :numeric => '052', :continent => 'Europe', :region => [], :postal_code => /./i },
|
66
|
+
{ :name => 'Belarus', :alpha2 => 'BY', :alpha3 => 'BLR', :numeric => '112', :continent => 'Europe', :region => [], :postal_code => /./i },
|
67
|
+
{ :name => 'Belgium', :alpha2 => 'BE', :alpha3 => 'BEL', :numeric => '056', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => postal4 },
|
68
|
+
{ :name => 'Belize', :alpha2 => 'BZ', :alpha3 => 'BLZ', :numeric => '084', :continent => 'Europe', :region => [], :postal_code => /./i },
|
69
|
+
{ :name => 'Benin', :alpha2 => 'BJ', :alpha3 => 'BEN', :numeric => '204', :continent => 'Europe', :region => [], :postal_code => /./i },
|
70
|
+
{ :name => 'Bermuda', :alpha2 => 'BM', :alpha3 => 'BMU', :numeric => '060', :continent => 'Europe', :region => [], :postal_code => /./i },
|
71
|
+
{ :name => 'Bhutan', :alpha2 => 'BT', :alpha3 => 'BTN', :numeric => '064', :continent => 'Europe', :region => [], :postal_code => /./i },
|
72
|
+
{ :name => 'Bolivia', :alpha2 => 'BO', :alpha3 => 'BOL', :numeric => '068', :continent => 'Europe', :region => [], :postal_code => /./i },
|
73
|
+
{ :name => 'Bosnia and Herzegovina', :alpha2 => 'BA', :alpha3 => 'BIH', :numeric => '070', :continent => 'Europe', :region => [], :postal_code => /./i },
|
74
|
+
{ :name => 'Botswana', :alpha2 => 'BW', :alpha3 => 'BWA', :numeric => '072', :continent => 'Europe', :region => [], :postal_code => /./i },
|
75
|
+
{ :name => 'Brazil', :alpha2 => 'BR', :alpha3 => 'BRA', :numeric => '076', :continent => 'Europe', :region => [], :postal_code => /./i },
|
76
|
+
{ :name => 'Brunei Darussalam', :alpha2 => 'BN', :alpha3 => 'BRN', :numeric => '096', :continent => 'Europe', :region => [], :postal_code => /./i },
|
77
|
+
{ :name => 'Bulgaria', :alpha2 => 'BG', :alpha3 => 'BGR', :numeric => '100', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => postal4 },
|
78
|
+
{ :name => 'Burkina Faso', :alpha2 => 'BF', :alpha3 => 'BFA', :numeric => '854', :continent => 'Europe', :region => [], :postal_code => /./i },
|
79
|
+
{ :name => 'Burundi', :alpha2 => 'BI', :alpha3 => 'BDI', :numeric => '108', :continent => 'Europe', :region => [], :postal_code => /./i },
|
80
|
+
{ :name => 'Cambodia', :alpha2 => 'KH', :alpha3 => 'KHM', :numeric => '116', :continent => 'Europe', :region => [], :postal_code => /./i },
|
81
|
+
{ :name => 'Cameroon', :alpha2 => 'CM', :alpha3 => 'CMR', :numeric => '120', :continent => 'Europe', :region => [], :postal_code => /./i },
|
82
|
+
{ :name => 'Canada', :alpha2 => 'CA', :alpha3 => 'CAN', :numeric => '124', :continent => 'North America', :region => ['Northern Hemisphere', 'Western Hemisphere', 'North America'], :postal_code => /^([A-Z]\d[A-Z][\-\s]?\d[A-Z](\d)?)$/i },
|
83
|
+
{ :name => 'Cape Verde', :alpha2 => 'CV', :alpha3 => 'CPV', :numeric => '132', :continent => 'Europe', :region => [], :postal_code => /./i },
|
84
|
+
{ :name => 'Cayman Islands', :alpha2 => 'KY', :alpha3 => 'CYM', :numeric => '136', :continent => 'Europe', :region => [], :postal_code => /./i },
|
85
|
+
{ :name => 'Central African Republic', :alpha2 => 'CF', :alpha3 => 'CAF', :numeric => '140', :continent => 'Europe', :region => [], :postal_code => /./i },
|
86
|
+
{ :name => 'Chad', :alpha2 => 'TD', :alpha3 => 'TCD', :numeric => '148', :continent => 'Europe', :region => [], :postal_code => /./i },
|
87
|
+
{ :name => 'Chile', :alpha2 => 'CL', :alpha3 => 'CHL', :numeric => '152', :continent => 'Europe', :region => [], :postal_code => /./i },
|
88
|
+
{ :name => 'China', :alpha2 => 'CN', :alpha3 => 'CHN', :numeric => '156', :continent => 'Europe', :region => [], :postal_code => /./i },
|
89
|
+
{ :name => 'Colombia', :alpha2 => 'CO', :alpha3 => 'COL', :numeric => '170', :continent => 'Europe', :region => [], :postal_code => /./i },
|
90
|
+
{ :name => 'Comoros', :alpha2 => 'KM', :alpha3 => 'COM', :numeric => '174', :continent => 'Europe', :region => [], :postal_code => /./i },
|
91
|
+
{ :name => 'Congo', :alpha2 => 'CG', :alpha3 => 'COG', :numeric => '178', :continent => 'Europe', :region => [], :postal_code => /./i },
|
92
|
+
{ :name => 'Congo, the Democratic Republic of the', :alpha2 => 'CD', :alpha3 => 'COD', :numeric => '180', :continent => 'Europe', :region => [], :postal_code => /./i },
|
93
|
+
{ :name => 'Cook Islands', :alpha2 => 'CK', :alpha3 => 'COK', :numeric => '184', :continent => 'Europe', :region => [], :postal_code => /./i },
|
94
|
+
{ :name => 'Costa Rica', :alpha2 => 'CR', :alpha3 => 'CRI', :numeric => '188', :continent => 'Europe', :region => [], :postal_code => /./i },
|
95
|
+
{ :name => 'Cote D\'Ivoire', :alpha2 => 'CI', :alpha3 => 'CIV', :numeric => '384', :continent => 'Europe', :region => [], :postal_code => /./i },
|
96
|
+
{ :name => 'Croatia', :alpha2 => 'HR', :alpha3 => 'HRV', :numeric => '191', :continent => 'Europe', :region => [], :postal_code => /./i },
|
97
|
+
{ :name => 'Cuba', :alpha2 => 'CU', :alpha3 => 'CUB', :numeric => '192', :continent => 'Europe', :region => [], :postal_code => /./i },
|
98
|
+
{ :name => 'Cyprus', :alpha2 => 'CY', :alpha3 => 'CYP', :numeric => '196', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => postal4 },
|
99
|
+
{ :name => 'Czech Republic', :alpha2 => 'CZ', :alpha3 => 'CZE', :numeric => '203', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^(CZ-)?\d{3}(\s)?\d{2}$/i },
|
100
|
+
{ :name => 'Denmark', :alpha2 => 'DK', :alpha3 => 'DNK', :numeric => '208', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^\d{3,4}$/ },
|
101
|
+
{ :name => 'Djibouti', :alpha2 => 'DJ', :alpha3 => 'DJI', :numeric => '262', :continent => 'Europe', :region => [], :postal_code => /./i },
|
102
|
+
{ :name => 'Dominica', :alpha2 => 'DM', :alpha3 => 'DMA', :numeric => '212', :continent => 'Europe', :region => [], :postal_code => /./i },
|
103
|
+
{ :name => 'Dominican Republic', :alpha2 => 'DO', :alpha3 => 'DOM', :numeric => '214', :continent => 'Europe', :region => [], :postal_code => /./i },
|
104
|
+
{ :name => 'Ecuador', :alpha2 => 'EC', :alpha3 => 'ECU', :numeric => '218', :continent => 'Europe', :region => [], :postal_code => /./i },
|
105
|
+
{ :name => 'Egypt', :alpha2 => 'EG', :alpha3 => 'EGY', :numeric => '818', :continent => 'Europe', :region => [], :postal_code => /./i },
|
106
|
+
{ :name => 'El Salvador', :alpha2 => 'SV', :alpha3 => 'SLV', :numeric => '222', :continent => 'Europe', :region => [], :postal_code => /./i },
|
107
|
+
{ :name => 'Equatorial Guinea', :alpha2 => 'GQ', :alpha3 => 'GNQ', :numeric => '226', :continent => 'Europe', :region => [], :postal_code => /./i },
|
108
|
+
{ :name => 'Eritrea', :alpha2 => 'ER', :alpha3 => 'ERI', :numeric => '232', :continent => 'Europe', :region => [], :postal_code => /./i },
|
109
|
+
{ :name => 'Estonia', :alpha2 => 'EE', :alpha3 => 'EST', :numeric => '233', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^(EE-)?\d{4,5}$/i },
|
110
|
+
{ :name => 'Ethiopia', :alpha2 => 'ET', :alpha3 => 'ETH', :numeric => '231', :continent => 'Europe', :region => [], :postal_code => /./i },
|
111
|
+
{ :name => 'Falkland Islands (Malvinas)', :alpha2 => 'FK', :alpha3 => 'FLK', :numeric => '238', :continent => 'Europe', :region => [], :postal_code => /./i },
|
112
|
+
{ :name => 'Faroe Islands', :alpha2 => 'FO', :alpha3 => 'FRO', :numeric => '234', :continent => 'Europe', :region => [], :postal_code => /./i },
|
113
|
+
{ :name => 'Fiji', :alpha2 => 'FJ', :alpha3 => 'FJI', :numeric => '242', :continent => 'Europe', :region => [], :postal_code => /./i },
|
114
|
+
{ :name => 'Finland', :alpha2 => 'FI', :alpha3 => 'FIN', :numeric => '246', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => postal5 },
|
115
|
+
{ :name => 'France', :alpha2 => 'FR', :alpha3 => 'FRA', :numeric => '249', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => postal5 },
|
116
|
+
{ :name => 'French Guiana', :alpha2 => 'GF', :alpha3 => 'GUF', :numeric => '254', :continent => 'Europe', :region => [], :postal_code => /./i },
|
117
|
+
{ :name => 'French Polynesia', :alpha2 => 'PF', :alpha3 => 'PYF', :numeric => '258', :continent => 'Europe', :region => [], :postal_code => /./i },
|
118
|
+
{ :name => 'Gabon', :alpha2 => 'GA', :alpha3 => 'GAB', :numeric => '266', :continent => 'Europe', :region => [], :postal_code => /./i },
|
119
|
+
{ :name => 'Gambia', :alpha2 => 'GM', :alpha3 => 'GMB', :numeric => '270', :continent => 'Europe', :region => [], :postal_code => /./i },
|
120
|
+
{ :name => 'Georgia', :alpha2 => 'GE', :alpha3 => 'GEO', :numeric => '268', :continent => 'Europe', :region => [], :postal_code => /./i },
|
121
|
+
{ :name => 'Germany', :alpha2 => 'DE', :alpha3 => 'DEU', :numeric => '278', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => postal5 },
|
122
|
+
{ :name => 'Ghana', :alpha2 => 'GH', :alpha3 => 'GHA', :numeric => '288', :continent => 'Europe', :region => [], :postal_code => /./i },
|
123
|
+
{ :name => 'Gibraltar', :alpha2 => 'GI', :alpha3 => 'GIB', :numeric => '292', :continent => 'Europe', :region => [], :postal_code => /./i },
|
124
|
+
{ :name => 'Greece', :alpha2 => 'GR', :alpha3 => 'GRC', :numeric => '300', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^\d{3}(\s)?\d{2}$/ },
|
125
|
+
{ :name => 'Greenland', :alpha2 => 'GL', :alpha3 => 'GRL', :numeric => '304', :continent => 'Europe', :region => [], :postal_code => /./i },
|
126
|
+
{ :name => 'Grenada', :alpha2 => 'GD', :alpha3 => 'GRD', :numeric => '308', :continent => 'Europe', :region => [], :postal_code => /./i },
|
127
|
+
{ :name => 'Guadeloupe', :alpha2 => 'GP', :alpha3 => 'GLP', :numeric => '312', :continent => 'Europe', :region => [], :postal_code => /./i },
|
128
|
+
{ :name => 'Guam', :alpha2 => 'GU', :alpha3 => 'GUM', :numeric => '316', :continent => 'Europe', :region => [], :postal_code => /./i },
|
129
|
+
{ :name => 'Guatemala', :alpha2 => 'GT', :alpha3 => 'GTM', :numeric => '320', :continent => 'Europe', :region => [], :postal_code => /./i },
|
130
|
+
{ :name => 'Guinea', :alpha2 => 'GN', :alpha3 => 'GIN', :numeric => '324', :continent => 'Europe', :region => [], :postal_code => /./i },
|
131
|
+
{ :name => 'Guinea-Bissau', :alpha2 => 'GW', :alpha3 => 'GNB', :numeric => '624', :continent => 'Europe', :region => [], :postal_code => /./i },
|
132
|
+
{ :name => 'Guyana', :alpha2 => 'GY', :alpha3 => 'GUY', :numeric => '328', :continent => 'Europe', :region => [], :postal_code => /./i },
|
133
|
+
{ :name => 'Haiti', :alpha2 => 'HT', :alpha3 => 'HTI', :numeric => '332', :continent => 'Europe', :region => [], :postal_code => /./i },
|
134
|
+
{ :name => 'Holy See (Vatican City State)', :alpha2 => 'VA', :alpha3 => 'VAT', :numeric => '336', :continent => 'Europe', :region => [], :postal_code => /./i },
|
135
|
+
{ :name => 'Honduras', :alpha2 => 'HN', :alpha3 => 'HND', :numeric => '340', :continent => 'Europe', :region => [], :postal_code => /./i },
|
136
|
+
{ :name => 'Hong Kong', :alpha2 => 'HK', :alpha3 => 'HKG', :numeric => '344', :continent => 'Europe', :region => [], :postal_code => /./i },
|
137
|
+
{ :name => 'Hungary', :alpha2 => 'HU', :alpha3 => 'HUN', :numeric => '348', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => postal4 },
|
138
|
+
{ :name => 'Iceland', :alpha2 => 'IS', :alpha3 => 'ISL', :numeric => '352', :continent => 'Europe', :region => [], :postal_code => /./i },
|
139
|
+
{ :name => 'India', :alpha2 => 'IN', :alpha3 => 'IND', :numeric => '356', :continent => 'Europe', :region => [], :postal_code => /./i },
|
140
|
+
{ :name => 'Indonesia', :alpha2 => 'ID', :alpha3 => 'IDN', :numeric => '360', :continent => 'Europe', :region => [], :postal_code => /./i },
|
141
|
+
{ :name => 'Iran, Islamic Republic of', :alpha2 => 'IR', :alpha3 => 'IRN', :numeric => '364', :continent => 'Europe', :region => [], :postal_code => /./i },
|
142
|
+
{ :name => 'Iraq', :alpha2 => 'IQ', :alpha3 => 'IRQ', :numeric => '368', :continent => 'Europe', :region => [], :postal_code => /./i },
|
143
|
+
{ :name => 'Ireland', :alpha2 => 'IE', :alpha3 => 'IRL', :numeric => '372', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /.?/ },
|
144
|
+
{ :name => 'Israel', :alpha2 => 'IL', :alpha3 => 'ISR', :numeric => '376', :continent => 'Europe', :region => [], :postal_code => /./i },
|
145
|
+
{ :name => 'Italy', :alpha2 => 'IT', :alpha3 => 'ITA', :numeric => '380', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => postal5 },
|
146
|
+
{ :name => 'Jamaica', :alpha2 => 'JM', :alpha3 => 'JAM', :numeric => '388', :continent => 'Europe', :region => [], :postal_code => /./i },
|
147
|
+
{ :name => 'Japan', :alpha2 => 'JP', :alpha3 => 'JPN', :numeric => '392', :continent => 'Europe', :region => [], :postal_code => /./i },
|
148
|
+
{ :name => 'Jordan', :alpha2 => 'JO', :alpha3 => 'JOR', :numeric => '400', :continent => 'Europe', :region => [], :postal_code => /./i },
|
149
|
+
{ :name => 'Kazakhstan', :alpha2 => 'KZ', :alpha3 => 'KAZ', :numeric => '398', :continent => 'Europe', :region => [], :postal_code => /./i },
|
150
|
+
{ :name => 'Kenya', :alpha2 => 'KE', :alpha3 => 'KEN', :numeric => '404', :continent => 'Europe', :region => [], :postal_code => /./i },
|
151
|
+
{ :name => 'Kiribati', :alpha2 => 'KI', :alpha3 => 'KIR', :numeric => '296', :continent => 'Europe', :region => [], :postal_code => /./i },
|
152
|
+
{ :name => 'Korea, Democratic People\'s Republic of', :alpha2 => 'KP', :alpha3 => 'PRK', :numeric => '408', :continent => 'Europe', :region => [], :postal_code => /./i },
|
153
|
+
{ :name => 'Korea, Republic of', :alpha2 => 'KR', :alpha3 => 'KOR', :numeric => '410', :continent => 'Europe', :region => [], :postal_code => /./i },
|
154
|
+
{ :name => 'Kuwait', :alpha2 => 'KW', :alpha3 => 'KWT', :numeric => '414', :continent => 'Europe', :region => [], :postal_code => /./i },
|
155
|
+
{ :name => 'Kyrgyzstan', :alpha2 => 'KG', :alpha3 => 'KGZ', :numeric => '417', :continent => 'Europe', :region => [], :postal_code => /./i },
|
156
|
+
{ :name => 'Lao People\'s Democratic Republic', :alpha2 => 'LA', :alpha3 => 'LAO', :numeric => '418', :continent => 'Europe', :region => [], :postal_code => /./i },
|
157
|
+
{ :name => 'Latvia', :alpha2 => 'LV', :alpha3 => 'LVA', :numeric => '428', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /(LV-)?\d{4}^$/i },
|
158
|
+
{ :name => 'Lebanon', :alpha2 => 'LB', :alpha3 => 'LBN', :numeric => '422', :continent => 'Europe', :region => [], :postal_code => /./i },
|
159
|
+
{ :name => 'Lesotho', :alpha2 => 'LS', :alpha3 => 'LSO', :numeric => '426', :continent => 'Europe', :region => [], :postal_code => /./i },
|
160
|
+
{ :name => 'Liberia', :alpha2 => 'LR', :alpha3 => 'LBR', :numeric => '430', :continent => 'Europe', :region => [], :postal_code => /./i },
|
161
|
+
{ :name => 'Libyan Arab Jamahiriya', :alpha2 => 'LY', :alpha3 => 'LBY', :numeric => '434', :continent => 'Europe', :region => [], :postal_code => /./i },
|
162
|
+
{ :name => 'Liechtenstein', :alpha2 => 'LI', :alpha3 => 'LIE', :numeric => '438', :continent => 'Europe', :region => [], :postal_code => /./i },
|
163
|
+
{ :name => 'Lithuania', :alpha2 => 'LT', :alpha3 => 'LTU', :numeric => '440', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^(LT-)?\d{5}$/i },
|
164
|
+
{ :name => 'Luxembourg', :alpha2 => 'LU', :alpha3 => 'LUX', :numeric => '442', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => postal4 },
|
165
|
+
{ :name => 'Macao', :alpha2 => 'MO', :alpha3 => 'MAC', :numeric => '446', :continent => 'Europe', :region => [], :postal_code => /./i },
|
166
|
+
{ :name => 'Macedonia, the Former Yugoslav Republic of', :alpha2 => 'MK', :alpha3 => 'MKD', :numeric => '807', :continent => 'Europe', :region => [], :postal_code => /./i },
|
167
|
+
{ :name => 'Madagascar', :alpha2 => 'MG', :alpha3 => 'MDG', :numeric => '450', :continent => 'Europe', :region => [], :postal_code => /./i },
|
168
|
+
{ :name => 'Malawi', :alpha2 => 'MW', :alpha3 => 'MWI', :numeric => '454', :continent => 'Europe', :region => [], :postal_code => /./i },
|
169
|
+
{ :name => 'Malaysia', :alpha2 => 'MY', :alpha3 => 'MYS', :numeric => '458', :continent => 'Europe', :region => [], :postal_code => /./i },
|
170
|
+
{ :name => 'Maldives', :alpha2 => 'MV', :alpha3 => 'MDV', :numeric => '462', :continent => 'Europe', :region => [], :postal_code => /./i },
|
171
|
+
{ :name => 'Mali', :alpha2 => 'ML', :alpha3 => 'MLI', :numeric => '466', :continent => 'Europe', :region => [], :postal_code => /./i },
|
172
|
+
{ :name => 'Malta', :alpha2 => 'MT', :alpha3 => 'MLT', :numeric => '470', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^[A-Z]{3}(\s)?\d{4}$/i },
|
173
|
+
{ :name => 'Marshall Islands', :alpha2 => 'MH', :alpha3 => 'MHL', :numeric => '584', :continent => 'Europe', :region => [], :postal_code => /./i },
|
174
|
+
{ :name => 'Martinique', :alpha2 => 'MQ', :alpha3 => 'MTQ', :numeric => '474', :continent => 'Europe', :region => [], :postal_code => /./i },
|
175
|
+
{ :name => 'Mauritania', :alpha2 => 'MR', :alpha3 => 'MRT', :numeric => '478', :continent => 'Europe', :region => [], :postal_code => /./i },
|
176
|
+
{ :name => 'Mauritius', :alpha2 => 'MU', :alpha3 => 'MUS', :numeric => '480', :continent => 'Europe', :region => [], :postal_code => /./i },
|
177
|
+
{ :name => 'Mexico', :alpha2 => 'MX', :alpha3 => 'MEX', :numeric => '484', :continent => 'Europe', :region => [], :postal_code => /./i },
|
178
|
+
{ :name => 'Micronesia, Federated States of', :alpha2 => 'FM', :alpha3 => 'FSM', :numeric => '583', :continent => 'Europe', :region => [], :postal_code => /./i },
|
179
|
+
{ :name => 'Moldova, Republic of', :alpha2 => 'MD', :alpha3 => 'MDA', :numeric => '498', :continent => 'Europe', :region => [], :postal_code => /./i },
|
180
|
+
{ :name => 'Monaco', :alpha2 => 'MC', :alpha3 => 'MCO', :numeric => '492', :continent => 'Europe', :region => [], :postal_code => /./i },
|
181
|
+
{ :name => 'Mongolia', :alpha2 => 'MN', :alpha3 => 'MNG', :numeric => '496', :continent => 'Europe', :region => [], :postal_code => /./i },
|
182
|
+
{ :name => 'Montserrat', :alpha2 => 'MS', :alpha3 => 'MSR', :numeric => '500', :continent => 'Europe', :region => [], :postal_code => /./i },
|
183
|
+
{ :name => 'Morocco', :alpha2 => 'MA', :alpha3 => 'MAR', :numeric => '504', :continent => 'Europe', :region => [], :postal_code => /./i },
|
184
|
+
{ :name => 'Mozambique', :alpha2 => 'MZ', :alpha3 => 'MOZ', :numeric => '508', :continent => 'Europe', :region => [], :postal_code => /./i },
|
185
|
+
{ :name => 'Myanmar', :alpha2 => 'MM', :alpha3 => 'MMR', :numeric => '104', :continent => 'Europe', :region => [], :postal_code => /./i },
|
186
|
+
{ :name => 'Namibia', :alpha2 => 'NA', :alpha3 => 'NAM', :numeric => '516', :continent => 'Europe', :region => [], :postal_code => /./i },
|
187
|
+
{ :name => 'Nauru', :alpha2 => 'NR', :alpha3 => 'NRU', :numeric => '520', :continent => 'Europe', :region => [], :postal_code => /./i },
|
188
|
+
{ :name => 'Nepal', :alpha2 => 'NP', :alpha3 => 'NPL', :numeric => '524', :continent => 'Europe', :region => [], :postal_code => /./i },
|
189
|
+
{ :name => 'Netherlands', :alpha2 => 'NL', :alpha3 => 'NLD', :numeric => '528', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^\d{4}(\s)?[A-Z]{2}(\s)?(\d*)?$/ },
|
190
|
+
{ :name => 'Netherlands Antilles', :alpha2 => 'AN', :alpha3 => 'ANT', :numeric => '530', :continent => 'Europe', :region => [], :postal_code => /./i },
|
191
|
+
{ :name => 'New Caledonia', :alpha2 => 'NC', :alpha3 => 'NCL', :numeric => '540', :continent => 'Europe', :region => [], :postal_code => /./i },
|
192
|
+
{ :name => 'New Zealand', :alpha2 => 'NZ', :alpha3 => 'NZL', :numeric => '554', :continent => 'Europe', :region => [], :postal_code => /./i },
|
193
|
+
{ :name => 'Nicaragua', :alpha2 => 'NI', :alpha3 => 'NIC', :numeric => '558', :continent => 'Europe', :region => [], :postal_code => /./i },
|
194
|
+
{ :name => 'Niger', :alpha2 => 'NE', :alpha3 => 'NER', :numeric => '562', :continent => 'Europe', :region => [], :postal_code => /./i },
|
195
|
+
{ :name => 'Nigeria', :alpha2 => 'NG', :alpha3 => 'NGA', :numeric => '566', :continent => 'Europe', :region => [], :postal_code => /./i },
|
196
|
+
{ :name => 'Niue', :alpha2 => 'NU', :alpha3 => 'NIU', :numeric => '570', :continent => 'Europe', :region => [], :postal_code => /./i },
|
197
|
+
{ :name => 'Norfolk Island', :alpha2 => 'NF', :alpha3 => 'NFK', :numeric => '574', :continent => 'Europe', :region => [], :postal_code => /./i },
|
198
|
+
{ :name => 'Northern Mariana Islands', :alpha2 => 'MP', :alpha3 => 'MNP', :numeric => '580', :continent => 'Europe', :region => [], :postal_code => /./i },
|
199
|
+
{ :name => 'Norway', :alpha2 => 'NO', :alpha3 => 'NOR', :numeric => '578', :continent => 'Europe', :region => [], :postal_code => /./i },
|
200
|
+
{ :name => 'Oman', :alpha2 => 'OM', :alpha3 => 'OMN', :numeric => '512', :continent => 'Europe', :region => [], :postal_code => /./i },
|
201
|
+
{ :name => 'Pakistan', :alpha2 => 'PK', :alpha3 => 'PAK', :numeric => '586', :continent => 'Europe', :region => [], :postal_code => /./i },
|
202
|
+
{ :name => 'Palau', :alpha2 => 'PW', :alpha3 => 'PLW', :numeric => '585', :continent => 'Europe', :region => [], :postal_code => /./i },
|
203
|
+
{ :name => 'Panama', :alpha2 => 'PA', :alpha3 => 'PAN', :numeric => '591', :continent => 'North America', :region => [], :postal_code => /./i },
|
204
|
+
{ :name => 'Papua New Guinea', :alpha2 => 'PG', :alpha3 => 'PNG', :numeric => '598', :continent => 'Europe', :region => [], :postal_code => /./i },
|
205
|
+
{ :name => 'Paraguay', :alpha2 => 'PY', :alpha3 => 'PRY', :numeric => '600', :continent => 'Europe', :region => [], :postal_code => /./i },
|
206
|
+
{ :name => 'Peru', :alpha2 => 'PE', :alpha3 => 'PER', :numeric => '604', :continent => 'Europe', :region => [], :postal_code => /./i },
|
207
|
+
{ :name => 'Philippines', :alpha2 => 'PH', :alpha3 => 'PHL', :numeric => '608', :continent => 'Europe', :region => [], :postal_code => /./i },
|
208
|
+
{ :name => 'Pitcairn', :alpha2 => 'PN', :alpha3 => 'PCN', :numeric => '612', :continent => 'Europe', :region => [], :postal_code => /./i },
|
209
|
+
{ :name => 'Poland', :alpha2 => 'PL', :alpha3 => 'POL', :numeric => '616', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^\d{2}[\-\s]?\d{3}$/ },
|
210
|
+
{ :name => 'Portugal', :alpha2 => 'PT', :alpha3 => 'PRT', :numeric => '620', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^\d{4}[\-\s]?\d{3}$/ },
|
211
|
+
{ :name => 'Puerto Rico', :alpha2 => 'PR', :alpha3 => 'PRI', :numeric => '630', :continent => 'Europe', :region => [], :postal_code => /./i },
|
212
|
+
{ :name => 'Qatar', :alpha2 => 'QA', :alpha3 => 'QAT', :numeric => '634', :continent => 'Europe', :region => [], :postal_code => /./i },
|
213
|
+
{ :name => 'Reunion', :alpha2 => 'RE', :alpha3 => 'REU', :numeric => '638', :continent => 'Europe', :region => [], :postal_code => /./i },
|
214
|
+
{ :name => 'Romania', :alpha2 => 'RO', :alpha3 => 'ROM', :numeric => '642', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^\d{6}$/ },
|
215
|
+
{ :name => 'Russian Federation', :alpha2 => 'RU', :alpha3 => 'RUS', :numeric => '643', :continent => 'Europe', :region => [], :postal_code => /./i },
|
216
|
+
{ :name => 'Rwanda', :alpha2 => 'RW', :alpha3 => 'RWA', :numeric => '646', :continent => 'Europe', :region => [], :postal_code => /./i },
|
217
|
+
{ :name => 'Saint Helena', :alpha2 => 'SH', :alpha3 => 'SHN', :numeric => '654', :continent => 'Europe', :region => [], :postal_code => /./i },
|
218
|
+
{ :name => 'Saint Kitts and Nevis', :alpha2 => 'KN', :alpha3 => 'KNA', :numeric => '659', :continent => 'Europe', :region => [], :postal_code => /./i },
|
219
|
+
{ :name => 'Saint Lucia', :alpha2 => 'LC', :alpha3 => 'LCA', :numeric => '662', :continent => 'Europe', :region => [], :postal_code => /./i },
|
220
|
+
{ :name => 'Saint Pierre and Miquelon', :alpha2 => 'PM', :alpha3 => 'SPM', :numeric => '666', :continent => 'Europe', :region => [], :postal_code => /./i },
|
221
|
+
{ :name => 'Saint Vincent and the Grenadines', :alpha2 => 'VC', :alpha3 => 'VCT', :numeric => '670', :continent => 'Europe', :region => [], :postal_code => /./i },
|
222
|
+
{ :name => 'Samoa', :alpha2 => 'WS', :alpha3 => 'WSM', :numeric => '882', :continent => 'Europe', :region => [], :postal_code => /./i },
|
223
|
+
{ :name => 'San Marino', :alpha2 => 'SM', :alpha3 => 'SMR', :numeric => '674', :continent => 'Europe', :region => [], :postal_code => /./i },
|
224
|
+
{ :name => 'Sao Tome and Principe', :alpha2 => 'ST', :alpha3 => 'STP', :numeric => '678', :continent => 'Europe', :region => [], :postal_code => /./i },
|
225
|
+
{ :name => 'Saudi Arabia', :alpha2 => 'SA', :alpha3 => 'SAU', :numeric => '682', :continent => 'Europe', :region => [], :postal_code => /./i },
|
226
|
+
{ :name => 'Senegal', :alpha2 => 'SN', :alpha3 => 'SEN', :numeric => '686', :continent => 'Europe', :region => [], :postal_code => /./i },
|
227
|
+
{ :name => 'Seychelles', :alpha2 => 'SC', :alpha3 => 'SYC', :numeric => '690', :continent => 'Europe', :region => [], :postal_code => /./i },
|
228
|
+
{ :name => 'Sierra Leone', :alpha2 => 'SL', :alpha3 => 'SLE', :numeric => '694', :continent => 'Europe', :region => [], :postal_code => /./i },
|
229
|
+
{ :name => 'Singapore', :alpha2 => 'SG', :alpha3 => 'SGP', :numeric => '702', :continent => 'Europe', :region => [], :postal_code => /./i },
|
230
|
+
{ :name => 'Slovakia', :alpha2 => 'SK', :alpha3 => 'SVK', :numeric => '703', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^(SK-)?\d{3}(\s)?\d{2}$/ },
|
231
|
+
{ :name => 'Slovenia', :alpha2 => 'SI', :alpha3 => 'SVN', :numeric => '705', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^(SL-)?\d{4}$/i },
|
232
|
+
{ :name => 'Solomon Islands', :alpha2 => 'SB', :alpha3 => 'SLB', :numeric => '090', :continent => 'Europe', :region => [], :postal_code => /./i },
|
233
|
+
{ :name => 'Somalia', :alpha2 => 'SO', :alpha3 => 'SOM', :numeric => '706', :continent => 'Europe', :region => [], :postal_code => /./i },
|
234
|
+
{ :name => 'South Africa', :alpha2 => 'ZA', :alpha3 => 'ZAF', :numeric => '710', :continent => 'Europe', :region => [], :postal_code => /./i },
|
235
|
+
{ :name => 'Spain', :alpha2 => 'ES', :alpha3 => 'ESP', :numeric => '724', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => postal5 },
|
236
|
+
{ :name => 'Sri Lanka', :alpha2 => 'LK', :alpha3 => 'LKA', :numeric => '144', :continent => 'Europe', :region => [], :postal_code => /./i },
|
237
|
+
{ :name => 'Sudan', :alpha2 => 'SD', :alpha3 => 'SDN', :numeric => '736', :continent => 'Europe', :region => [], :postal_code => /./i },
|
238
|
+
{ :name => 'Suriname', :alpha2 => 'SR', :alpha3 => 'SUR', :numeric => '740', :continent => 'Europe', :region => [], :postal_code => /./i },
|
239
|
+
{ :name => 'Svalbard and Jan Mayen', :alpha2 => 'SJ', :alpha3 => 'SJM', :numeric => '744', :continent => 'Europe', :region => [], :postal_code => /./i },
|
240
|
+
{ :name => 'Swaziland', :alpha2 => 'SZ', :alpha3 => 'SWZ', :numeric => '748', :continent => 'Europe', :region => [], :postal_code => /./i },
|
241
|
+
{ :name => 'Sweden', :alpha2 => 'SE', :alpha3 => 'SWE', :numeric => '752', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^\d{3}(\s)?\d{2}$/ },
|
242
|
+
{ :name => 'Switzerland', :alpha2 => 'CH', :alpha3 => 'CHE', :numeric => '756', :continent => 'Europe', :region => [], :postal_code => /./i },
|
243
|
+
{ :name => 'Syrian Arab Republic', :alpha2 => 'SY', :alpha3 => 'SYR', :numeric => '760', :continent => 'Europe', :region => [], :postal_code => /./i },
|
244
|
+
{ :name => 'Taiwan, Province of China', :alpha2 => 'TW', :alpha3 => 'TWN', :numeric => '158', :continent => 'Europe', :region => [], :postal_code => /./i },
|
245
|
+
{ :name => 'Tajikistan', :alpha2 => 'TJ', :alpha3 => 'TJK', :numeric => '762', :continent => 'Europe', :region => [], :postal_code => /./i },
|
246
|
+
{ :name => 'Tanzania, United Republic of', :alpha2 => 'TZ', :alpha3 => 'TZA', :numeric => '834', :continent => 'Europe', :region => [], :postal_code => /./i },
|
247
|
+
{ :name => 'Thailand', :alpha2 => 'TH', :alpha3 => 'THA', :numeric => '764', :continent => 'Europe', :region => [], :postal_code => /./i },
|
248
|
+
{ :name => 'Togo', :alpha2 => 'TG', :alpha3 => 'TGO', :numeric => '768', :continent => 'Europe', :region => [], :postal_code => /./i },
|
249
|
+
{ :name => 'Tokelau', :alpha2 => 'TK', :alpha3 => 'TKL', :numeric => '772', :continent => 'Europe', :region => [], :postal_code => /./i },
|
250
|
+
{ :name => 'Tonga', :alpha2 => 'TO', :alpha3 => 'TON', :numeric => '776', :continent => 'Europe', :region => [], :postal_code => /./i },
|
251
|
+
{ :name => 'Trinidad and Tobago', :alpha2 => 'TT', :alpha3 => 'TTO', :numeric => '780', :continent => 'Europe', :region => [], :postal_code => /./i },
|
252
|
+
{ :name => 'Tunisia', :alpha2 => 'TN', :alpha3 => 'TUN', :numeric => '788', :continent => 'Europe', :region => [], :postal_code => /./i },
|
253
|
+
{ :name => 'Turkey', :alpha2 => 'TR', :alpha3 => 'TUR', :numeric => '792', :continent => 'Europe', :region => [], :postal_code => /./i },
|
254
|
+
{ :name => 'Turkmenistan', :alpha2 => 'TM', :alpha3 => 'TKM', :numeric => '795', :continent => 'Europe', :region => [], :postal_code => /./i },
|
255
|
+
{ :name => 'Turks and Caicos Islands', :alpha2 => 'TC', :alpha3 => 'TCA', :numeric => '796', :continent => 'Europe', :region => [], :postal_code => /./i },
|
256
|
+
{ :name => 'Tuvalu', :alpha2 => 'TV', :alpha3 => 'TUV', :numeric => '798', :continent => 'Europe', :region => [], :postal_code => /./i },
|
257
|
+
{ :name => 'Uganda', :alpha2 => 'UG', :alpha3 => 'UGA', :numeric => '800', :continent => 'Europe', :region => [], :postal_code => /./i },
|
258
|
+
{ :name => 'Ukraine', :alpha2 => 'UA', :alpha3 => 'UKR', :numeric => '804', :continent => 'Europe', :region => [], :postal_code => /./i },
|
259
|
+
{ :name => 'United Arab Emirates', :alpha2 => 'AE', :alpha3 => 'ARE', :numeric => '784', :continent => 'Europe', :region => [], :postal_code => /./i },
|
260
|
+
{ :name => 'United Kingdom', :alpha2 => 'GB', :alpha3 => 'GBR', :numeric => '826', :continent => 'Europe', :region => ['Northern Hemisphere', 'Eastern Hemisphere', 'EU'], :postal_code => /^[\dA-Z]{2,4}(\s)?[\dA-Z]{3}$/i },
|
261
|
+
{ :name => 'United States', :alpha2 => 'US', :alpha3 => 'USA', :numeric => '840', :continent => 'North America', :region => ['Northern Hemisphere', 'Western Hemisphere', 'North America'], :postal_code => /^\d{5}([\-\s]?\d{4})?$/ },
|
262
|
+
{ :name => 'United States Minor Outlying Islands', :alpha2 => 'UM', :alpha3 => 'UMI', :numeric => '849', :continent => 'North America', :region => ['Northern Hemisphere', 'Western Hemisphere', 'North America'], :postal_code => /^\d{5}([\-\s]?\d{4})?$/ },
|
263
|
+
{ :name => 'Uruguay', :alpha2 => 'UY', :alpha3 => 'URY', :numeric => '858', :continent => 'Europe', :region => [], :postal_code => /./i },
|
264
|
+
{ :name => 'Uzbekistan', :alpha2 => 'UZ', :alpha3 => 'UZB', :numeric => '860', :continent => 'Europe', :region => [], :postal_code => /./i },
|
265
|
+
{ :name => 'Vanuatu', :alpha2 => 'VU', :alpha3 => 'VUT', :numeric => '548', :continent => 'Europe', :region => [], :postal_code => /./i },
|
266
|
+
{ :name => 'Venezuela', :alpha2 => 'VE', :alpha3 => 'VEN', :numeric => '862', :continent => 'Europe', :region => [], :postal_code => /./i },
|
267
|
+
{ :name => 'Viet Nam', :alpha2 => 'VN', :alpha3 => 'VNM', :numeric => '704', :continent => 'Europe', :region => [], :postal_code => /./i },
|
268
|
+
{ :name => 'Virgin Islands, British', :alpha2 => 'VG', :alpha3 => 'VGB', :numeric => '092', :continent => 'Europe', :region => [], :postal_code => /./i },
|
269
|
+
{ :name => 'Virgin Islands, U.S.', :alpha2 => 'VI', :alpha3 => 'VIR', :numeric => '850', :continent => 'Europe', :region => [], :postal_code => /./i },
|
270
|
+
{ :name => 'Wallis and Futuna', :alpha2 => 'WF', :alpha3 => 'WLF', :numeric => '876', :continent => 'Europe', :region => [], :postal_code => /./i },
|
271
|
+
{ :name => 'Western Sahara', :alpha2 => 'EH', :alpha3 => 'ESH', :numeric => '732', :continent => 'Europe', :region => [], :postal_code => /./i },
|
272
|
+
{ :name => 'Yemen', :alpha2 => 'YE', :alpha3 => 'YEM', :numeric => '887', :continent => 'Europe', :region => [], :postal_code => /./i },
|
273
|
+
{ :name => 'Zambia', :alpha2 => 'ZM', :alpha3 => 'ZMB', :numeric => '894', :continent => 'Europe', :region => [], :postal_code => /./i },
|
274
|
+
{ :name => 'Zimbabwe', :alpha2 => 'ZW', :alpha3 => 'ZWE', :numeric => '716', :continent => 'Europe', :region => [], :postal_code => /./i }
|
275
|
+
]
|
276
|
+
|
277
|
+
searchable_config do |c|
|
278
|
+
# c.list = COUNTRIES
|
279
|
+
c.list = PRIVATE_COUNTRIES
|
280
|
+
c.attributes = [:name, :numeric, :alpha2, :alpha3, :continent, :region]
|
281
|
+
c.aliases = [
|
282
|
+
{:abbr => [:alpha2, :alpha3] },
|
283
|
+
{:abbreviation => [:alpha2, :alpha3] },
|
284
|
+
{:iso => :numeric },
|
285
|
+
{:iso_code => :numeric },
|
286
|
+
{:code => :numeric}
|
287
|
+
]
|
288
|
+
end
|
289
|
+
|
290
|
+
def self.countries
|
291
|
+
PRIVATE_COUNTRIES
|
292
|
+
end
|
293
|
+
|
294
|
+
def self.names(_cty=self.countries)
|
295
|
+
_cty.collect{|c| c[:name]}
|
296
|
+
end
|
297
|
+
|
298
|
+
def self.abbreviations(_cty=self.countries)
|
299
|
+
_cty.collect{|c| [c[:alpha2], c[:alpha3]] }
|
300
|
+
end
|
301
|
+
|
302
|
+
def self.iso_codes(_cty=self.countries)
|
303
|
+
_cty.collect{|c| c[:numeric]}
|
304
|
+
end
|
305
|
+
|
306
|
+
def self.north_america
|
307
|
+
find_all('North America', :region)
|
308
|
+
end
|
309
|
+
|
310
|
+
def self.north_america?(cty)
|
311
|
+
in_this_region?(cty, :north_america)
|
312
|
+
end
|
313
|
+
|
314
|
+
def self.eu
|
315
|
+
find_all('EU', :region)
|
316
|
+
end
|
317
|
+
|
318
|
+
def self.eu?(cty)
|
319
|
+
in_this_region?(cty, :eu)
|
320
|
+
end
|
321
|
+
|
322
|
+
def self.where_is_zip_valid(zip)
|
323
|
+
countries.select{|c| zip =~ c[:postal_code] } # .sort{|a,b| a[:priority] <=> b[:priority] }
|
324
|
+
end
|
325
|
+
|
326
|
+
def self.region(cty)
|
327
|
+
if in_this_region?(cty, :north_america)
|
328
|
+
:north_america
|
329
|
+
elsif in_this_region?(cty, :eu)
|
330
|
+
:eu
|
331
|
+
else
|
332
|
+
nil
|
333
|
+
end
|
334
|
+
end
|
335
|
+
|
336
|
+
|
337
|
+
protected
|
338
|
+
|
339
|
+
def self.in_this_region?(cty, region)
|
340
|
+
cty = cty.is_a?(Hash) ? cty[:name] : cty
|
341
|
+
send(region).collect{|c| c[:name]}.include?(cty)
|
342
|
+
end
|
343
|
+
|
344
|
+
end
|
345
|
+
end
|
346
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Validatious
|
2
|
+
module Addresses
|
3
|
+
module Provinces
|
4
|
+
include Searchable
|
5
|
+
|
6
|
+
PROVINCES = [
|
7
|
+
{:name => 'ALBERTA', :alpha => 'AB'},
|
8
|
+
{:name => 'BRITISH COLUMBIA', :alpha => 'BC'},
|
9
|
+
{:name => 'MANITOBA', :alpha => 'MT'},
|
10
|
+
{:name => 'NEW BRUNSWICK', :alpha => 'NB'},
|
11
|
+
{:name => 'NEWFOUNDLAND AND LABRADOR', :alpha => 'NL'},
|
12
|
+
{:name => 'NORTHWEST TERRITORIES', :alpha => 'NT'},
|
13
|
+
{:name => 'NOVA SCOTIA', :alpha => 'NS'},
|
14
|
+
{:name => 'NUNAVUT', :alpha => 'NV'},
|
15
|
+
{:name => 'ONTARIO', :alpha => 'ON'},
|
16
|
+
{:name => 'PRINCE EDWARD ISLAND', :alpha => 'PE'},
|
17
|
+
{:name => 'QUEBEC', :alpha => 'QB'},
|
18
|
+
{:name => 'SASKATCHEWAN', :alpha => 'SK'},
|
19
|
+
{:name => 'YUKON', :alpha => 'YK'}
|
20
|
+
]
|
21
|
+
|
22
|
+
searchable_config do |c|
|
23
|
+
c.list = PROVINCES
|
24
|
+
c.attributes = [:name, :alpha]
|
25
|
+
c.aliases = [ {:abbr => :alpha}, {:abbreviation => :alpha} ]
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.provinces
|
29
|
+
PROVINCES.dup
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.names(_cty=self.provinces)
|
33
|
+
_cty.collect{|c| c[:name]}
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.abbreviations(_cty=self.provinces)
|
37
|
+
_cty.collect{|c| c[:alpha] }
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
module Validatious
|
2
|
+
module Addresses
|
3
|
+
module Searchable
|
4
|
+
|
5
|
+
def self.included(base)
|
6
|
+
base.extend(ClassMethods)
|
7
|
+
end
|
8
|
+
|
9
|
+
module ClassMethods
|
10
|
+
def self.extended(object)
|
11
|
+
object.class_eval{
|
12
|
+
@attributes = []
|
13
|
+
@aliases = []
|
14
|
+
@list = []
|
15
|
+
}
|
16
|
+
|
17
|
+
class << object
|
18
|
+
attr_accessor :attributes, :aliases, :list
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def searchable_config(&block)
|
23
|
+
# just send the object back to the block for configuration -- it might be good to create methods to update configuration
|
24
|
+
yield self
|
25
|
+
end
|
26
|
+
|
27
|
+
def find(term, field=:name)
|
28
|
+
search(:find, term, field)
|
29
|
+
end
|
30
|
+
|
31
|
+
def find_all(term, field=:name)
|
32
|
+
search(:find_all, term, field)
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
protected
|
37
|
+
|
38
|
+
def method_missing(method, *args, &block)
|
39
|
+
m = method.to_s.match(/^(find_all)_by_(.+)$/i)
|
40
|
+
m ||= method.to_s.match(/^(find)_by_(.+)$/i)
|
41
|
+
|
42
|
+
return super unless m && args.length == 1
|
43
|
+
send(m.captures.first.to_sym, args.first, m.captures.last.to_sym)
|
44
|
+
end
|
45
|
+
|
46
|
+
def define_search_field(field)
|
47
|
+
if field.is_a?(Array)
|
48
|
+
multiple_fields = []
|
49
|
+
field.each do |v|
|
50
|
+
unless @attributes.include?(v)
|
51
|
+
new_field = []
|
52
|
+
@aliases.each{|al|
|
53
|
+
new_field << al[al.keys.first] if al.keys.first.to_s.downcase == v.to_s.downcase
|
54
|
+
}
|
55
|
+
else
|
56
|
+
new_field = v
|
57
|
+
end
|
58
|
+
multiple_fields << new_field if new_field
|
59
|
+
end
|
60
|
+
return multiple_fields.flatten.uniq
|
61
|
+
elsif !@attributes.include?(field)
|
62
|
+
field = @aliases.find{|a| a.keys.first.to_s.downcase == field.to_s.downcase}
|
63
|
+
field = field.values.first
|
64
|
+
end
|
65
|
+
field
|
66
|
+
end
|
67
|
+
|
68
|
+
def search(method, term, field)
|
69
|
+
field = define_search_field(field)
|
70
|
+
|
71
|
+
if field.is_a?(Array)
|
72
|
+
@list.send(method){|c|
|
73
|
+
found = false
|
74
|
+
field.each do |key|
|
75
|
+
next if found
|
76
|
+
found = c[key].is_a?(Array) ? c[key].map(&:upcase).include?(term.to_s.upcase) : (c[key].upcase == term.to_s.upcase)
|
77
|
+
end
|
78
|
+
found
|
79
|
+
}
|
80
|
+
else
|
81
|
+
@list.send(method){|c|
|
82
|
+
c[field].is_a?(Array) ? c[field].map(&:upcase).include?(term.to_s.upcase) : (c[field].upcase == term.to_s.upcase)
|
83
|
+
}
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
module Validatious
|
2
|
+
module Addresses
|
3
|
+
module States
|
4
|
+
include Validatious::Addresses::Searchable
|
5
|
+
|
6
|
+
# TODO: Titlecase state names (instead of uppercase)
|
7
|
+
STATES = [
|
8
|
+
{ :name => 'ALABAMA', :alpha => 'AL' },
|
9
|
+
{ :name => 'ALASKA', :alpha => 'AK' },
|
10
|
+
{ :name => 'AMERICAN SAMOA', :alpha => 'AS' },
|
11
|
+
{ :name => 'ARIZONA', :alpha => 'AZ' },
|
12
|
+
{ :name => 'ARKANSAS', :alpha => 'AR' },
|
13
|
+
{ :name => 'CALIFORNIA', :alpha => 'CA' },
|
14
|
+
{ :name => 'COLORADO', :alpha => 'CO' },
|
15
|
+
{ :name => 'CONNECTICUT', :alpha => 'CT' },
|
16
|
+
{ :name => 'DELAWARE', :alpha => 'DE' },
|
17
|
+
{ :name => 'DISTRICT OF COLUMBIA', :alpha => 'DC' },
|
18
|
+
{ :name => 'FEDERATED STATES OF MICRONESIA', :alpha => 'FM' },
|
19
|
+
{ :name => 'FLORIDA', :alpha => 'FL' },
|
20
|
+
{ :name => 'GEORGIA', :alpha => 'GA' },
|
21
|
+
{ :name => 'GUAM', :alpha => 'GU' },
|
22
|
+
{ :name => 'HAWAII', :alpha => 'HI' },
|
23
|
+
{ :name => 'IDAHO', :alpha => 'ID' },
|
24
|
+
{ :name => 'ILLINOIS', :alpha => 'IL' },
|
25
|
+
{ :name => 'INDIANA', :alpha => 'IN' },
|
26
|
+
{ :name => 'IOWA', :alpha => 'IA' },
|
27
|
+
{ :name => 'KANSAS', :alpha => 'KS' },
|
28
|
+
{ :name => 'KENTUCKY', :alpha => 'KY' },
|
29
|
+
{ :name => 'LOUISIANA', :alpha => 'LA' },
|
30
|
+
{ :name => 'MAINE', :alpha => 'ME' },
|
31
|
+
{ :name => 'MARSHALL ISLANDS', :alpha => 'MH' },
|
32
|
+
{ :name => 'MARYLAND', :alpha => 'MD' },
|
33
|
+
{ :name => 'MASSACHUSETTS', :alpha => 'MA' },
|
34
|
+
{ :name => 'MICHIGAN', :alpha => 'MI' },
|
35
|
+
{ :name => 'MINNESOTA', :alpha => 'MN' },
|
36
|
+
{ :name => 'MISSISSIPPI', :alpha => 'MS' },
|
37
|
+
{ :name => 'MISSOURI', :alpha => 'MO' },
|
38
|
+
{ :name => 'MONTANA', :alpha => 'MT' },
|
39
|
+
{ :name => 'NEBRASKA', :alpha => 'NE' },
|
40
|
+
{ :name => 'NEVADA', :alpha => 'NV' },
|
41
|
+
{ :name => 'NEW HAMPSHIRE', :alpha => 'NH' },
|
42
|
+
{ :name => 'NEW JERSEY', :alpha => 'NJ' },
|
43
|
+
{ :name => 'NEW MEXICO', :alpha => 'NM' },
|
44
|
+
{ :name => 'NEW YORK', :alpha => 'NY' },
|
45
|
+
{ :name => 'NORTH CAROLINA', :alpha => 'NC' },
|
46
|
+
{ :name => 'NORTH DAKOTA', :alpha => 'ND' },
|
47
|
+
{ :name => 'NORTHERN MARIANA ISLANDS', :alpha => 'MP' },
|
48
|
+
{ :name => 'OHIO', :alpha => 'OH' },
|
49
|
+
{ :name => 'OKLAHOMA', :alpha => 'OK' },
|
50
|
+
{ :name => 'OREGON', :alpha => 'OR' },
|
51
|
+
{ :name => 'PALAU', :alpha => 'PW' },
|
52
|
+
{ :name => 'PENNSYLVANIA', :alpha => 'PA' },
|
53
|
+
{ :name => 'PUERTO RICO', :alpha => 'PR' },
|
54
|
+
{ :name => 'RHODE ISLAND', :alpha => 'RI' },
|
55
|
+
{ :name => 'SOUTH CAROLINA', :alpha => 'SC' },
|
56
|
+
{ :name => 'SOUTH DAKOTA', :alpha => 'SD' },
|
57
|
+
{ :name => 'TENNESSEE', :alpha => 'TN' },
|
58
|
+
{ :name => 'TEXAS', :alpha => 'TX' },
|
59
|
+
{ :name => 'UTAH', :alpha => 'UT' },
|
60
|
+
{ :name => 'VERMONT', :alpha => 'VT' },
|
61
|
+
{ :name => 'VIRGIN ISLANDS', :alpha => 'VI' },
|
62
|
+
{ :name => 'VIRGINIA', :alpha => 'VA' },
|
63
|
+
{ :name => 'WASHINGTON', :alpha => 'WA' },
|
64
|
+
{ :name => 'WEST VIRGINIA', :alpha => 'WV' },
|
65
|
+
{ :name => 'WISCONSIN', :alpha => 'WI' },
|
66
|
+
{ :name => 'WYOMING', :alpha => 'WY' }
|
67
|
+
]
|
68
|
+
|
69
|
+
searchable_config do |c|
|
70
|
+
c.list = STATES
|
71
|
+
c.attributes = [:name, :alpha]
|
72
|
+
c.aliases = [ {:abbr => :alpha}, {:abbreviation => :alpha} ]
|
73
|
+
end
|
74
|
+
|
75
|
+
def self.states
|
76
|
+
STATES.dup
|
77
|
+
end
|
78
|
+
|
79
|
+
def self.names(_cty=self.states)
|
80
|
+
_cty.collect{|c| c[:name]}
|
81
|
+
end
|
82
|
+
|
83
|
+
def self.abbreviations(_cty=self.states)
|
84
|
+
_cty.collect{|c| c[:alpha] }
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
protected
|
89
|
+
|
90
|
+
def self.find_collection(terms, field=:name)
|
91
|
+
terms = terms.is_a?(Array) ? terms : terms.to_a
|
92
|
+
results =[]
|
93
|
+
terms.each do |term|
|
94
|
+
r = find(term, field)
|
95
|
+
results << r if r
|
96
|
+
end
|
97
|
+
results
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -10,6 +10,10 @@ module ActiveModel
|
|
10
10
|
validates_with EmailValidator, _merge_attributes(attr_names)
|
11
11
|
end
|
12
12
|
|
13
|
+
def validates_postal_code_format_of(*attr_names)
|
14
|
+
validates_with PostalCodeValidator, _merge_attributes(attr_names)
|
15
|
+
end
|
16
|
+
|
13
17
|
def validates_text_content_of(*attr_names)
|
14
18
|
validates_with TextContentValidator, _merge_attributes(attr_names)
|
15
19
|
end
|
@@ -2,5 +2,6 @@ en:
|
|
2
2
|
errors:
|
3
3
|
messages:
|
4
4
|
invalid_url: "is not a valid URL"
|
5
|
+
invalid_postal_code: "is not a valid postal code"
|
5
6
|
invalid_email: "is not a valid email address"
|
6
7
|
invalid_text_content: "has incorrect capitalization and punctuation. (ie: All sentences should begin with a capital letter and end with a punctuation mark, etc.)"
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Validatious
|
2
|
+
module Validators
|
3
|
+
|
4
|
+
# == Active Model Postal Code Validator
|
5
|
+
class PostalCodeValidator < ActiveModel::EachValidator
|
6
|
+
|
7
|
+
def validate_each(record, attribute, value)
|
8
|
+
countries = options[:country].is_a?(Array) ? options[:country] : [options[:country]]
|
9
|
+
|
10
|
+
countries = countries.map do |name|
|
11
|
+
country = case
|
12
|
+
when name.is_a?(Symbol)
|
13
|
+
record.send name
|
14
|
+
when name.is_a?(Hash)
|
15
|
+
c_obj = record.send(name.keys.first)
|
16
|
+
c_obj ? c_obj.send(name[name.keys.first]) : nil
|
17
|
+
else
|
18
|
+
name.blank? ? 'USA' : name
|
19
|
+
end
|
20
|
+
|
21
|
+
regex = nil
|
22
|
+
Validatious::Addresses::Countries.countries.each do |config|
|
23
|
+
if country =~ /^(#{config[:name]}|#{config[:alpha2]}|#{config[:alpha3]})$/i
|
24
|
+
regex = config[:postal_code]
|
25
|
+
break
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
regex
|
30
|
+
end.compact
|
31
|
+
|
32
|
+
if countries.empty?
|
33
|
+
record.errors.add :base, "A valid country must be provided for " +
|
34
|
+
"#{attribute.to_s.humanize.downcase} validation."
|
35
|
+
else
|
36
|
+
valid = countries.map do |regex|
|
37
|
+
!(value.to_s =~ /^#{regex}$/i).nil? ? true : nil
|
38
|
+
end.compact
|
39
|
+
|
40
|
+
record.errors.add attribute, :invalid_postal_code, options if valid.empty?
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# Compatibility with ActiveModel validates method which matches option keys to their validator class
|
49
|
+
ActiveModel::Validations::PostalCodeValidator = Validatious::Validators::PostalCodeValidator
|
data/lib/validatious/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Validatious::Addresses::Countries do
|
4
|
+
|
5
|
+
describe ".find_by_name" do
|
6
|
+
it "should return proper country" do
|
7
|
+
subject.find_by_name('United States')[:name].should == 'United States'
|
8
|
+
subject.find_by_name('France')[:numeric].should == "249"
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should be case insensitive" do
|
12
|
+
subject.find_by_name('CzEcH REPublIC')[:alpha3].should == 'CZE'
|
13
|
+
subject.find_by_name('SLOvakia')[:alpha2].should == 'SK'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe ".find_by_alpha2" do
|
18
|
+
it { subject.find_by_alpha2('US')[:alpha3].should == 'USA' }
|
19
|
+
end
|
20
|
+
|
21
|
+
describe ".find_by_alpha3" do
|
22
|
+
it { subject.find_by_alpha3('USA')[:alpha2].should == 'US' }
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "the regular old find method with multiple field search" do
|
26
|
+
it { subject.find('United States', [:name, :alpha2, :alpha3])[:alpha2].should == 'US' }
|
27
|
+
it { subject.find('AU', [:name, :alpha2, :alpha3])[:alpha2].should == 'AU' }
|
28
|
+
it { subject.find('249', [:iso_code, :name])[:name].should == 'France' }
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "find_by methods return same object" do
|
32
|
+
it { subject.find_by_alpha2('US').should == subject.find_by_alpha3('USA') }
|
33
|
+
it { subject.find_by_name('United States').should == subject.find_by_abbr('US') }
|
34
|
+
it { subject.find_by_abbr('USA').should == subject.find_by_iso_code('840') }
|
35
|
+
end
|
36
|
+
|
37
|
+
describe ".where_is_zip_valid" do
|
38
|
+
it { subject.where_is_zip_valid('123KKK9093450').length.should == 191 }
|
39
|
+
it { subject.where_is_zip_valid('67013').should include(subject.find_by_abbr('USA')) }
|
40
|
+
end
|
41
|
+
|
42
|
+
describe ".eu?" do
|
43
|
+
it { subject.eu?('France').should be_true }
|
44
|
+
it { subject.eu?('Czech Republic').should be_true }
|
45
|
+
it { subject.eu?(subject.find_by_name('United Kingdom')).should be_true }
|
46
|
+
it { subject.eu?('United States').should be_false }
|
47
|
+
it { subject.eu?(subject.find_by_name('Canada')).should be_false }
|
48
|
+
end
|
49
|
+
|
50
|
+
describe ".north_america?" do
|
51
|
+
it { subject.north_america?('Canada').should be_true }
|
52
|
+
it { subject.north_america?('United States').should be_true }
|
53
|
+
it { subject.north_america?(subject.find_by_name('United States')).should be_true }
|
54
|
+
it { subject.north_america?('United Kingdom').should be_false }
|
55
|
+
it { subject.north_america?(subject.find_by_name('France')).should be_false }
|
56
|
+
end
|
57
|
+
|
58
|
+
describe ".find_by_abbr" do
|
59
|
+
it { subject.find_by_abbr('USA')[:alpha3].should == 'USA' }
|
60
|
+
it { subject.find_by_abbr('US')[:alpha2].should == 'US' }
|
61
|
+
it { subject.find_by_abbr('ESP')[:alpha3].should == 'ESP' }
|
62
|
+
it { subject.find_by_abbr('ES')[:alpha2].should == 'ES' }
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "regional shortcuts" do
|
66
|
+
it { subject.north_america.length.should == 3 }
|
67
|
+
it { subject.eu.length.should == 27 }
|
68
|
+
end
|
69
|
+
|
70
|
+
describe ".find_all_by_region" do
|
71
|
+
it { subject.find_all_by_region('North America').length.should == 3 }
|
72
|
+
it { subject.find_all_by_region('EU').length.should == 27 }
|
73
|
+
it { subject.find_all_by_region('Northern Hemisphere').length.should == 40 }
|
74
|
+
it { subject.find_all_by_region('Western Hemisphere').length.should == 8 }
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Validatious::Addresses::States do
|
4
|
+
|
5
|
+
describe ".find_by_name" do
|
6
|
+
it "should return proper results" do
|
7
|
+
subject.find_by_name('Kansas')[:name].should == 'KANSAS'
|
8
|
+
subject.find_by_name('Washington')[:name].should == 'WASHINGTON'
|
9
|
+
subject.find_by_name('Arkansas')[:name].should == 'ARKANSAS'
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should be case insensitive" do
|
13
|
+
subject.find_by_name('KaNSaS')[:name].should == 'KANSAS'
|
14
|
+
subject.find_by_name('ARKansAS')[:name].should == 'ARKANSAS'
|
15
|
+
subject.find_by_name('texAs')[:name].should == 'TEXAS'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe ".find_by_abbr" do
|
20
|
+
it "should return proper results" do
|
21
|
+
subject.find_by_abbr('KS')[:name].should == 'KANSAS'
|
22
|
+
subject.find_by_abbr('AR')[:name].should == 'ARKANSAS'
|
23
|
+
subject.find_by_abbr('AK')[:name].should == 'ALASKA'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -5,6 +5,7 @@ describe Validatious, 'HelperMethods' do
|
|
5
5
|
it 'should define class validation methods' do
|
6
6
|
Post.should respond_to(:validates_url_format_of)
|
7
7
|
Post.should respond_to(:validates_email_format_of)
|
8
|
+
Post.should respond_to(:validates_postal_code_format_of)
|
8
9
|
Post.should respond_to(:validates_text_content_of)
|
9
10
|
end
|
10
11
|
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
|
5
|
+
describe Validatious::Validators::PostalCodeValidator do
|
6
|
+
|
7
|
+
describe '12345' do
|
8
|
+
it "should be valid" do
|
9
|
+
Person.validates_postal_code_format_of(:postal_code, :country => ["US", 'CA'])
|
10
|
+
p = Person.new :postal_code => 10001
|
11
|
+
p.should be_valid
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
metadata
CHANGED
@@ -1,50 +1,45 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: validatious
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.4.0
|
4
5
|
prerelease:
|
5
|
-
version: 0.3.0
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Joel Moss
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
dependencies:
|
16
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-01-20 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
17
15
|
name: activemodel
|
18
|
-
|
19
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70131390007220 !ruby/object:Gem::Requirement
|
20
17
|
none: false
|
21
|
-
requirements:
|
22
|
-
- -
|
23
|
-
- !ruby/object:Gem::Version
|
24
|
-
version:
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
25
22
|
type: :runtime
|
26
|
-
version_requirements: *id001
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rspec
|
29
23
|
prerelease: false
|
30
|
-
|
24
|
+
version_requirements: *70131390007220
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rspec
|
27
|
+
requirement: &70131390006740 !ruby/object:Gem::Requirement
|
31
28
|
none: false
|
32
|
-
requirements:
|
33
|
-
- -
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
version:
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
36
33
|
type: :development
|
37
|
-
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70131390006740
|
38
36
|
description: A collection of delicious Rails validators
|
39
|
-
email:
|
37
|
+
email:
|
40
38
|
- joel@developwithstyle.com
|
41
39
|
executables: []
|
42
|
-
|
43
40
|
extensions: []
|
44
|
-
|
45
41
|
extra_rdoc_files: []
|
46
|
-
|
47
|
-
files:
|
42
|
+
files:
|
48
43
|
- .gitignore
|
49
44
|
- .rspec
|
50
45
|
- Gemfile
|
@@ -52,55 +47,64 @@ files:
|
|
52
47
|
- README.md
|
53
48
|
- Rakefile
|
54
49
|
- lib/validatious.rb
|
50
|
+
- lib/validatious/addresses/countries.rb
|
51
|
+
- lib/validatious/addresses/provinces.rb
|
52
|
+
- lib/validatious/addresses/searchable.rb
|
53
|
+
- lib/validatious/addresses/states.rb
|
55
54
|
- lib/validatious/helper_methods.rb
|
56
55
|
- lib/validatious/locale/en.yml
|
57
56
|
- lib/validatious/validators/email_validator.rb
|
57
|
+
- lib/validatious/validators/postal_code_validator.rb
|
58
58
|
- lib/validatious/validators/text_content_validator.rb
|
59
59
|
- lib/validatious/validators/url_validator.rb
|
60
60
|
- lib/validatious/version.rb
|
61
61
|
- spec/spec_helper.rb
|
62
62
|
- spec/support/deferred_garbage_collection.rb
|
63
|
+
- spec/support/models/person.rb
|
63
64
|
- spec/support/models/post.rb
|
64
65
|
- spec/support/models/topic.rb
|
66
|
+
- spec/validatious/addresses/countries_spec.rb
|
67
|
+
- spec/validatious/addresses/states_spec.rb
|
65
68
|
- spec/validatious/helper_methods_spec.rb
|
66
69
|
- spec/validatious/validators/email_validator_spec.rb
|
70
|
+
- spec/validatious/validators/postal_code_validator_spec.rb
|
67
71
|
- spec/validatious/validators/text_content_validator_spec.rb
|
68
72
|
- spec/validatious/validators/url_validator_spec.rb
|
69
73
|
- validatious.gemspec
|
70
|
-
has_rdoc: true
|
71
74
|
homepage: https://github.com/joelmoss/validatious
|
72
75
|
licenses: []
|
73
|
-
|
74
76
|
post_install_message:
|
75
77
|
rdoc_options: []
|
76
|
-
|
77
|
-
require_paths:
|
78
|
+
require_paths:
|
78
79
|
- lib
|
79
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
80
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
80
81
|
none: false
|
81
|
-
requirements:
|
82
|
-
- -
|
83
|
-
- !ruby/object:Gem::Version
|
84
|
-
version:
|
85
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
86
87
|
none: false
|
87
|
-
requirements:
|
88
|
-
- -
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
version:
|
88
|
+
requirements:
|
89
|
+
- - ! '>='
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
91
92
|
requirements: []
|
92
|
-
|
93
93
|
rubyforge_project:
|
94
|
-
rubygems_version: 1.
|
94
|
+
rubygems_version: 1.8.15
|
95
95
|
signing_key:
|
96
96
|
specification_version: 3
|
97
97
|
summary: A collection of delicious Rails validators
|
98
|
-
test_files:
|
98
|
+
test_files:
|
99
99
|
- spec/spec_helper.rb
|
100
100
|
- spec/support/deferred_garbage_collection.rb
|
101
|
+
- spec/support/models/person.rb
|
101
102
|
- spec/support/models/post.rb
|
102
103
|
- spec/support/models/topic.rb
|
104
|
+
- spec/validatious/addresses/countries_spec.rb
|
105
|
+
- spec/validatious/addresses/states_spec.rb
|
103
106
|
- spec/validatious/helper_methods_spec.rb
|
104
107
|
- spec/validatious/validators/email_validator_spec.rb
|
108
|
+
- spec/validatious/validators/postal_code_validator_spec.rb
|
105
109
|
- spec/validatious/validators/text_content_validator_spec.rb
|
106
110
|
- spec/validatious/validators/url_validator_spec.rb
|