carmen 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,51 @@
1
+ ---
2
+ - - Autonomous Republic of Crimea
3
+ - CR
4
+ - - Cherkashchyna
5
+ - CK
6
+ - - Chernihivshchyna
7
+ - CN
8
+ - - Chernivechchyna
9
+ - CV
10
+ - - Dnipropetrovshchyna
11
+ - DP
12
+ - - Donechchyna
13
+ - DN
14
+ - - Ivano-Frankivshchyna
15
+ - IF
16
+ - - Kharkivshchyna
17
+ - KH
18
+ - - Khersonshchyna
19
+ - KS
20
+ - - Khmel'nychchyna
21
+ - KM
22
+ - - Kyivshchyna
23
+ - KV
24
+ - - Kirovohradshchyna
25
+ - KR
26
+ - - Luhanshchyna
27
+ - LG
28
+ - - L'vivshchyna
29
+ - LV
30
+ - - Mykolaivshchyna
31
+ - MK
32
+ - - Odeshchyna
33
+ - OD
34
+ - - Poltavshchyna
35
+ - PL
36
+ - - Rivnenshchyna
37
+ - RV
38
+ - - Sumshchyna
39
+ - SM
40
+ - - Ternopil'shchyna
41
+ - TAS
42
+ - - Vinnychchyna
43
+ - VN
44
+ - - Volyn'
45
+ - VOLYN
46
+ - - Zakarpattia
47
+ - ZK
48
+ - - Zaporizhzhia
49
+ - ZP
50
+ - - Zhytomyrshchyna
51
+ - ZT
@@ -0,0 +1,124 @@
1
+ # from http://www.usps.com/ncsc/lookups/usps_abbreviations.html
2
+ ---
3
+ - - Alabama
4
+ - AL
5
+ - - Alaska
6
+ - AK
7
+ - - Arizona
8
+ - AZ
9
+ - - Arkansas
10
+ - AR
11
+ - - California
12
+ - CA
13
+ - - Colorado
14
+ - CO
15
+ - - Connecticut
16
+ - CT
17
+ - - Delaware
18
+ - DE
19
+ - - District Of Columbia
20
+ - DC
21
+ - - Florida
22
+ - FL
23
+ - - Georgia
24
+ - GA
25
+ - - Hawaii
26
+ - HI
27
+ - - Idaho
28
+ - ID
29
+ - - Illinois
30
+ - IL
31
+ - - Indiana
32
+ - IN
33
+ - - Iowa
34
+ - IA
35
+ - - Kansas
36
+ - KS
37
+ - - Kentucky
38
+ - KY
39
+ - - Louisiana
40
+ - LA
41
+ - - Maine
42
+ - ME
43
+ - - Maryland
44
+ - MD
45
+ - - Massachusetts
46
+ - MA
47
+ - - Michigan
48
+ - MI
49
+ - - Minnesota
50
+ - MN
51
+ - - Mississippi
52
+ - MS
53
+ - - Missouri
54
+ - MO
55
+ - - Montana
56
+ - MT
57
+ - - Nebraska
58
+ - NE
59
+ - - Nevada
60
+ - NV
61
+ - - New Hampshire
62
+ - NH
63
+ - - New Jersey
64
+ - NJ
65
+ - - New Mexico
66
+ - NM
67
+ - - New York
68
+ - NY
69
+ - - North Carolina
70
+ - NC
71
+ - - North Dakota
72
+ - ND
73
+ - - Ohio
74
+ - OH
75
+ - - Oklahoma
76
+ - OK
77
+ - - Oregon
78
+ - OR
79
+ - - Pennsylvania
80
+ - PA
81
+ - - Rhode Island
82
+ - RI
83
+ - - South Carolina
84
+ - SC
85
+ - - South Dakota
86
+ - SD
87
+ - - Tennessee
88
+ - TN
89
+ - - Texas
90
+ - TX
91
+ - - Utah
92
+ - UT
93
+ - - Vermont
94
+ - VT
95
+ - - Virginia
96
+ - VA
97
+ - - Washington
98
+ - WA
99
+ - - West Virginia
100
+ - WV
101
+ - - Wisconsin
102
+ - WI
103
+ - - Wyoming
104
+ - WY
105
+ - - Federated States of Micronesia
106
+ - FM
107
+ - - Guam
108
+ - GU
109
+ - - Marshall Islands
110
+ - MH
111
+ - - Northern Mariana Islands
112
+ - MP
113
+ - - Palau
114
+ - PW
115
+ - - Puerto Rico
116
+ - PR
117
+ - - Virgin Islands
118
+ - VI
119
+ - - Armed Forces Americas (except Canada)
120
+ - AA
121
+ - - Armed Forces Europe, Armed Forces Canada, Armed Forces Africa, or Armed Forces Middle East
122
+ - AE
123
+ - - Armed Forces Pacific
124
+ - AP
@@ -0,0 +1,105 @@
1
+ require 'yaml'
2
+ begin
3
+ require 'ftools'
4
+ rescue LoadError
5
+ require 'fileutils' # ftools is now fileutils in Ruby 1.9
6
+ end
7
+
8
+ module Carmen
9
+
10
+ class << self
11
+ attr_accessor :default_country
12
+ end
13
+
14
+ self.default_country = 'US'
15
+
16
+ data_path = File.join(File.dirname(__FILE__), '../data')
17
+
18
+ COUNTRIES = YAML.load_file(File.join(data_path, 'countries.yml'))
19
+
20
+ STATES = Dir[data_path + '/states/*.yml'].map do |file_name|
21
+ [File::basename(file_name, '.yml').upcase, YAML.load_file(file_name)]
22
+ end
23
+
24
+ # Raised when attempting to retrieve states for an unsupported country
25
+ class StatesNotSupported < RuntimeError; end
26
+
27
+ # Raised when attempting to work with a country not in the data set
28
+ class NonexistentCountry < RuntimeError; end
29
+
30
+ # Returns the country name corresponding to the supplied country code
31
+ # Carmen::country_name('TV') => 'Tuvalu'
32
+ def self.country_name(country_code)
33
+ search_collection(COUNTRIES, country_code, 1, 0)
34
+ end
35
+
36
+ # Returns the country code corresponding to the supplied country name
37
+ # Carmen::country_code('Canada') => 'CA'
38
+ def self.country_code(country_name)
39
+ search_collection(COUNTRIES, country_name, 0, 1)
40
+ end
41
+
42
+ # Returns an array of all country codes
43
+ # Carmen::country_codes => ['AF', 'AX', 'AL', ... ]
44
+ def self.country_codes
45
+ COUNTRIES.map {|c| c[1] }
46
+ end
47
+
48
+ # Returns an array of all country codes
49
+ # Carmen::country_name => ['Afghanistan', 'Aland Islands', 'Albania', ... ]
50
+ def self.country_names
51
+ COUNTRIES.map {|c| c[0] }
52
+ end
53
+
54
+ # Returns the state name corresponding to the supplied state code within the specified country
55
+ # Carmen::state_code('New Hampshire') => 'NH'
56
+ def self.state_name(state_code, country_code = Carmen.default_country)
57
+ search_collection(self.states(country_code), state_code, 1, 0)
58
+ end
59
+
60
+ # Returns the state code corresponding to the supplied state name within the specified country
61
+ # Carmen::state_code('IL', 'US') => Illinois
62
+ def self.state_code(state_name, country_code = Carmen.default_country)
63
+ search_collection(self.states(country_code), state_name, 0, 1)
64
+ end
65
+
66
+ # Returns an array of state names within the specified country code
67
+ # Carmen::state_names('US') => ['Alabama', 'Arkansas', ... ]
68
+ def self.state_names(country_code = Carmen.default_country)
69
+ self.states(country_code).map{|name, code| name}
70
+ end
71
+
72
+ # Returns an array of state codes within the specified country code
73
+ # Carmen::state_codes('US') => ['AL', 'AR', ... ]
74
+ def self.state_codes(country_code = Carmen.default_country)
75
+ self.states(country_code).map{|name, code| code}
76
+ end
77
+
78
+ # Returns an array structure of state names and codes within the specified country code
79
+ # Carmen::states('US') => [['Alabama', 'AL'], ['Arkansas', 'AR'], ... ]
80
+ def self.states(country_code = Carmen.default_country)
81
+ raise NonexistentCountry unless country_codes.include?(country_code)
82
+ raise StatesNotSupported unless states?(country_code)
83
+ search_collection(STATES, country_code, 0, 1)
84
+ end
85
+
86
+ # Returns whether states are supported for the given country code
87
+ # Carmen::states?('US') => true
88
+ # Carmen::states?('ZZ') => false
89
+ def self.states?(country_code)
90
+ STATES.any? do |array| k,v = array
91
+ k == country_code
92
+ end
93
+ end
94
+
95
+ protected
96
+
97
+ def self.search_collection(collection, value, index_to_match, index_to_retrieve)
98
+ return nil if collection.nil?
99
+ collection.each do |m|
100
+ return m[index_to_retrieve] if m[index_to_match] == value
101
+ end
102
+ nil
103
+ end
104
+
105
+ end
@@ -0,0 +1,68 @@
1
+ module ActionView
2
+ module Helpers
3
+ module FormOptionsHelper
4
+
5
+ # Return select and option tags for the given object and method, using state_options_for_select to generate the list of option tags.
6
+ def state_select(object, method, country = Carmen.default_country, options={}, html_options={})
7
+ InstanceTag.new(object, method, self, options.delete(:object)).to_state_select_tag(country, options, html_options)
8
+ end
9
+
10
+ # Return select and option tags for the given object and method, using country_options_for_select to generate the list of option tags.
11
+ def country_select(object, method, priority_countries = nil, options = {}, html_options = {})
12
+ InstanceTag.new(object, method, self, options.delete(:object)).to_country_select_tag(priority_countries, options, html_options)
13
+ end
14
+
15
+ # Returns a string of option tags containing the state names and codes for the specified country code, or nil
16
+ # if the states are not know for that country. Supply a state code as +selected+ to have it marked as the selected option tag.
17
+ def state_options_for_select(selected = nil, country = Carmen.default_country)
18
+ options_for_select(Carmen.states(country), selected)
19
+ end
20
+
21
+ # Returns a string of option tags for pretty much any country in the world. Supply a country name as +selected+ to
22
+ # have it marked as the selected option tag. You can also supply a list of country codes as additional parameters, so
23
+ # that they will be listed above the rest of the (long) list.
24
+ def country_options_for_select(selected = nil, *priority_country_codes)
25
+ country_options = ""
26
+
27
+ unless priority_country_codes.empty?
28
+ priority_countries = Carmen::COUNTRIES.select do |pair| name, code = pair
29
+ priority_country_codes.include?(code)
30
+ end
31
+ unless priority_countries.empty?
32
+ country_options += options_for_select(priority_countries, selected)
33
+ country_options += "\n<option value=\"\" disabled=\"disabled\">-------------</option>\n"
34
+ end
35
+ end
36
+
37
+ return country_options + options_for_select(Carmen::COUNTRIES, priority_country_codes.include?(selected) ? nil : selected)
38
+ end
39
+ end
40
+
41
+ class InstanceTag
42
+ def to_country_select_tag(priority_countries, options, html_options)
43
+ html_options = html_options.stringify_keys
44
+ add_default_name_and_id(html_options)
45
+ value = value(object)
46
+ opts = add_options(country_options_for_select(value, *priority_countries), options, value)
47
+ content_tag("select", opts, html_options)
48
+ end
49
+
50
+ def to_state_select_tag(country, options, html_options)
51
+ html_options = html_options.stringify_keys
52
+ add_default_name_and_id(html_options)
53
+ value = value(object)
54
+ opts = add_options(state_options_for_select(value, country), options, value)
55
+ content_tag("select", opts, html_options)
56
+ end
57
+ end
58
+
59
+ class FormBuilder
60
+ def country_select(method, priority_countries = nil, options = {}, html_options = {})
61
+ @template.country_select(@object_name, method, priority_countries, options.merge(:object => @object), html_options)
62
+ end
63
+ def state_select(method, country_code = Carmen.default_country, options = {}, html_options = {})
64
+ @template.state_select(@object_name, method, country_code, options.merge(:object => @object), html_options)
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,2 @@
1
+ require 'carmen'
2
+ require 'carmen/action_view_helpers'
@@ -0,0 +1,73 @@
1
+ require 'test/unit'
2
+ require File.join(File.dirname(__FILE__), '../lib/carmen')
3
+
4
+ class TestCarmen < Test::Unit::TestCase
5
+
6
+ def test_country_name
7
+ assert_equal 'United States', Carmen.country_name('US')
8
+ end
9
+
10
+ def test_country_code
11
+ assert_equal 'CA', Carmen.country_code('Canada')
12
+ end
13
+
14
+ def test_country_codes
15
+ assert_equal 'AF', Carmen.country_codes.first
16
+ assert_equal 243, Carmen.country_codes.length
17
+ end
18
+
19
+ def test_country_names
20
+ assert_equal 'Afghanistan', Carmen.country_names.first
21
+ assert_equal 243, Carmen.country_names.length
22
+ end
23
+
24
+ def test_state_name
25
+ assert_equal 'IL', Carmen.state_code('Illinois')
26
+ assert_equal 'MB', Carmen.state_code('Manitoba', 'CA')
27
+ end
28
+
29
+ def test_state_code
30
+ assert_equal 'Arizona', Carmen.state_name('AZ')
31
+ assert_equal 'Prince Edward Island', Carmen.state_name('PE', 'CA')
32
+ end
33
+
34
+ def test_states
35
+ assert_equal 61, Carmen.states.length
36
+ assert_equal ['Alabama', 'AL'], Carmen.states.first
37
+ assert_equal 13, Carmen.states('CA').length
38
+ assert_equal ['Alberta', 'AB'], Carmen.states('CA').first
39
+ end
40
+
41
+ def test_state_names
42
+ assert_equal 61, Carmen::state_names.length
43
+ assert_equal 'Alabama', Carmen::state_names.first
44
+ assert_equal 13, Carmen.state_names('CA').length
45
+ assert_equal 'Alberta', Carmen.state_names('CA').first
46
+ end
47
+
48
+ def test_state_codes
49
+ assert_equal 61, Carmen::state_codes.length
50
+ assert_equal 'AL', Carmen::state_codes.first
51
+ assert_equal 13, Carmen.state_codes('CA').length
52
+ assert_equal 'AB', Carmen.state_codes('CA').first
53
+ end
54
+
55
+ def test_supported_states
56
+ assert Carmen::states?('US')
57
+ assert_equal Carmen::states?('ZZ'), false
58
+ end
59
+
60
+ def test_invalid_country_exception
61
+ assert_raises Carmen::NonexistentCountry do
62
+ Carmen::state_codes('ZZ')
63
+ end
64
+ end
65
+
66
+ def test_unsupported_states_exception
67
+ assert_raises Carmen::StatesNotSupported do
68
+ Carmen::state_codes('ID')
69
+ end
70
+ end
71
+
72
+
73
+ end
@@ -0,0 +1,43 @@
1
+ require 'rubygems'
2
+ require 'active_support'
3
+ require 'action_view'
4
+ require 'action_controller'
5
+ require 'action_view/test_case'
6
+ require 'mocha'
7
+ require File.join(File.dirname(__FILE__), '../lib/carmen')
8
+ require File.join(File.dirname(__FILE__), '../lib/carmen/action_view_helpers')
9
+
10
+ class CarmenViewHelperTest < ActionView::TestCase
11
+
12
+ include ActionView::Helpers::FormOptionsHelper
13
+
14
+ def setup
15
+ @address = stub(:state => 'IL', :country => 'US', :to_s => 'address')
16
+ end
17
+
18
+ def test_state_select_for_us
19
+ @address.stubs(:state => 'nil')
20
+ assert_equal US_STATE_SELECT_HTML.chomp, state_select(@address, :state, 'US')
21
+ end
22
+
23
+ def test_state_select_for_canada
24
+ @address.stubs(:state => 'nil')
25
+ assert_equal CANADA_STATE_SELECT_HTML.chomp, state_select(@address, :state, 'CA')
26
+ end
27
+
28
+ def test_country_options_for_select_with_priorities
29
+ assert_equal COUNTRY_SELECT_OPTIONS_HTML.chomp, country_options_for_select('US', 'US')
30
+ end
31
+
32
+ def test_selected_option
33
+ @address.stubs(:state => 'ON')
34
+ assert_match /<option value="ON" selected="selected">Ontario<\/option>/, state_select(@address, :state, 'CA')
35
+ end
36
+
37
+ COUNTRY_SELECT_OPTIONS_HTML = "<option value=\"US\" selected=\"selected\">United States</option>\n<option value=\"\" disabled=\"disabled\">-------------</option>\n<option value=\"AF\">Afghanistan</option>\n<option value=\"AX\">Aland Islands</option>\n<option value=\"AL\">Albania</option>\n<option value=\"DZ\">Algeria</option>\n<option value=\"AS\">American Samoa</option>\n<option value=\"AD\">Andorra</option>\n<option value=\"AO\">Angola</option>\n<option value=\"AI\">Anguilla</option>\n<option value=\"AQ\">Antarctica</option>\n<option value=\"AG\">Antigua and Barbuda</option>\n<option value=\"AR\">Argentina</option>\n<option value=\"AM\">Armenia</option>\n<option value=\"AW\">Aruba</option>\n<option value=\"AU\">Australia</option>\n<option value=\"AT\">Austria</option>\n<option value=\"AZ\">Azerbaijan</option>\n<option value=\"BS\">Bahamas</option>\n<option value=\"BH\">Bahrain</option>\n<option value=\"BD\">Bangladesh</option>\n<option value=\"BB\">Barbados</option>\n<option value=\"BY\">Belarus</option>\n<option value=\"BE\">Belgium</option>\n<option value=\"BZ\">Belize</option>\n<option value=\"BJ\">Benin</option>\n<option value=\"BM\">Bermuda</option>\n<option value=\"BT\">Bhutan</option>\n<option value=\"BO\">Bolivia</option>\n<option value=\"BA\">Bosnia and Herzegovina</option>\n<option value=\"BW\">Botswana</option>\n<option value=\"BV\">Bouvet Island</option>\n<option value=\"BR\">Brazil</option>\n<option value=\"IO\">British Indian Ocean Territory</option>\n<option value=\"BN\">Brunei Darussalam</option>\n<option value=\"BG\">Bulgaria</option>\n<option value=\"BF\">Burkina Faso</option>\n<option value=\"BI\">Burundi</option>\n<option value=\"KH\">Cambodia</option>\n<option value=\"CM\">Cameroon</option>\n<option value=\"CA\">Canada</option>\n<option value=\"CV\">Cape Verde</option>\n<option value=\"KY\">Cayman Islands</option>\n<option value=\"CF\">Central African Republic</option>\n<option value=\"TD\">Chad</option>\n<option value=\"CL\">Chile</option>\n<option value=\"CN\">China</option>\n<option value=\"CX\">Christmas Island</option>\n<option value=\"CC\">Cocos (Keeling) Islands</option>\n<option value=\"CO\">Colombia</option>\n<option value=\"KM\">Comoros</option>\n<option value=\"CG\">Congo</option>\n<option value=\"CD\">Congo, the Democratic Republic of the</option>\n<option value=\"CK\">Cook Islands</option>\n<option value=\"CR\">Costa Rica</option>\n<option value=\"CI\">Cote D'ivoire</option>\n<option value=\"HR\">Croatia</option>\n<option value=\"CU\">Cuba</option>\n<option value=\"CY\">Cyprus</option>\n<option value=\"CZ\">Czech Republic</option>\n<option value=\"DK\">Denmark</option>\n<option value=\"DJ\">Djibouti</option>\n<option value=\"DM\">Dominica</option>\n<option value=\"DO\">Dominican Republic</option>\n<option value=\"EC\">Ecuador</option>\n<option value=\"EG\">Egypt</option>\n<option value=\"SV\">El Salvador</option>\n<option value=\"GQ\">Equatorial Guinea</option>\n<option value=\"ER\">Eritrea</option>\n<option value=\"EE\">Estonia</option>\n<option value=\"ET\">Ethiopia</option>\n<option value=\"FK\">Falkland Islands (Malvinas)</option>\n<option value=\"FO\">Faroe Islands</option>\n<option value=\"FJ\">Fiji</option>\n<option value=\"FI\">Finland</option>\n<option value=\"FR\">France</option>\n<option value=\"GF\">French Guiana</option>\n<option value=\"PF\">French Polynesia</option>\n<option value=\"TF\">French Southern Territories</option>\n<option value=\"GA\">Gabon</option>\n<option value=\"GM\">Gambia</option>\n<option value=\"GE\">Georgia</option>\n<option value=\"DE\">Germany</option>\n<option value=\"GH\">Ghana</option>\n<option value=\"GI\">Gibraltar</option>\n<option value=\"GR\">Greece</option>\n<option value=\"GL\">Greenland</option>\n<option value=\"GD\">Grenada</option>\n<option value=\"GP\">Guadeloupe</option>\n<option value=\"GU\">Guam</option>\n<option value=\"GT\">Guatemala</option>\n<option value=\"GG\">Guernsey</option>\n<option value=\"GN\">Guinea</option>\n<option value=\"GW\">Guinea-Bissau</option>\n<option value=\"GY\">Guyana</option>\n<option value=\"HT\">Haiti</option>\n<option value=\"HM\">Heard Island and Mcdonald Islands</option>\n<option value=\"VA\">Holy See (Vatican City State)</option>\n<option value=\"HN\">Honduras</option>\n<option value=\"HK\">Hong Kong</option>\n<option value=\"HU\">Hungary</option>\n<option value=\"IS\">Iceland</option>\n<option value=\"IN\">India</option>\n<option value=\"ID\">Indonesia</option>\n<option value=\"IR\">Iran, Islamic Republic of</option>\n<option value=\"IQ\">Iraq</option>\n<option value=\"IE\">Ireland</option>\n<option value=\"IM\">Isle of Man</option>\n<option value=\"IL\">Israel</option>\n<option value=\"IT\">Italy</option>\n<option value=\"JM\">Jamaica</option>\n<option value=\"JP\">Japan</option>\n<option value=\"JE\">Jersey</option>\n<option value=\"JO\">Jordan</option>\n<option value=\"KZ\">Kazakhstan</option>\n<option value=\"KE\">Kenya</option>\n<option value=\"KI\">Kiribati</option>\n<option value=\"KP\">Korea, Democratic People's Republic of</option>\n<option value=\"KR\">Korea, Republic of</option>\n<option value=\"KW\">Kuwait</option>\n<option value=\"KG\">Kyrgyzstan</option>\n<option value=\"LA\">Lao People's Democratic Republic</option>\n<option value=\"LV\">Latvia</option>\n<option value=\"LB\">Lebanon</option>\n<option value=\"LS\">Lesotho</option>\n<option value=\"LR\">Liberia</option>\n<option value=\"LY\">Libyan Arab Jamahiriya</option>\n<option value=\"LI\">Liechtenstein</option>\n<option value=\"LT\">Lithuania</option>\n<option value=\"LU\">Luxembourg</option>\n<option value=\"MO\">Macao</option>\n<option value=\"MK\">Macedonia, the Former Yugoslav Republic of</option>\n<option value=\"MG\">Madagascar</option>\n<option value=\"MW\">Malawi</option>\n<option value=\"MY\">Malaysia</option>\n<option value=\"MV\">Maldives</option>\n<option value=\"ML\">Mali</option>\n<option value=\"MT\">Malta</option>\n<option value=\"MH\">Marshall Islands</option>\n<option value=\"MQ\">Martinique</option>\n<option value=\"MR\">Mauritania</option>\n<option value=\"MU\">Mauritius</option>\n<option value=\"YT\">Mayotte</option>\n<option value=\"MX\">Mexico</option>\n<option value=\"FM\">Micronesia, Federated States of</option>\n<option value=\"MD\">Moldova, Republic of</option>\n<option value=\"MC\">Monaco</option>\n<option value=\"MN\">Mongolia</option>\n<option value=\"MS\">Montserrat</option>\n<option value=\"MA\">Morocco</option>\n<option value=\"MZ\">Mozambique</option>\n<option value=\"MM\">Myanmar</option>\n<option value=\"NA\">Namibia</option>\n<option value=\"NR\">Nauru</option>\n<option value=\"NP\">Nepal</option>\n<option value=\"NL\">Netherlands</option>\n<option value=\"AN\">Netherlands Antilles</option>\n<option value=\"NC\">New Caledonia</option>\n<option value=\"NZ\">New Zealand</option>\n<option value=\"NI\">Nicaragua</option>\n<option value=\"NE\">Niger</option>\n<option value=\"NG\">Nigeria</option>\n<option value=\"NU\">Niue</option>\n<option value=\"NF\">Norfolk Island</option>\n<option value=\"MP\">Northern Mariana Islands</option>\n<option value=\"NO\">Norway</option>\n<option value=\"OM\">Oman</option>\n<option value=\"PK\">Pakistan</option>\n<option value=\"PW\">Palau</option>\n<option value=\"PS\">Palestinian Territory, Occupied</option>\n<option value=\"PA\">Panama</option>\n<option value=\"PG\">Papua New Guinea</option>\n<option value=\"PY\">Paraguay</option>\n<option value=\"PE\">Peru</option>\n<option value=\"PH\">Philippines</option>\n<option value=\"PN\">Pitcairn</option>\n<option value=\"PL\">Poland</option>\n<option value=\"PT\">Portugal</option>\n<option value=\"PR\">Puerto Rico</option>\n<option value=\"QA\">Qatar</option>\n<option value=\"RE\">Reunion</option>\n<option value=\"RO\">Romania</option>\n<option value=\"RU\">Russian Federation</option>\n<option value=\"RW\">Rwanda</option>\n<option value=\"SH\">Saint Helena</option>\n<option value=\"KN\">Saint Kitts and Nevis</option>\n<option value=\"LC\">Saint Lucia</option>\n<option value=\"PM\">Saint Pierre and Miquelon</option>\n<option value=\"VC\">Saint Vincent and the Grenadines</option>\n<option value=\"WS\">Samoa</option>\n<option value=\"SM\">San Marino</option>\n<option value=\"ST\">Sao Tome and Principe</option>\n<option value=\"SA\">Saudi Arabia</option>\n<option value=\"SN\">Senegal</option>\n<option value=\"CS\">Serbia and Montenegro</option>\n<option value=\"SC\">Seychelles</option>\n<option value=\"SL\">Sierra Leone</option>\n<option value=\"SG\">Singapore</option>\n<option value=\"SK\">Slovakia</option>\n<option value=\"SI\">Slovenia</option>\n<option value=\"SB\">Solomon Islands</option>\n<option value=\"SO\">Somalia</option>\n<option value=\"ZA\">South Africa</option>\n<option value=\"GS\">South Georgia and the South Sandwich Islands</option>\n<option value=\"ES\">Spain</option>\n<option value=\"LK\">Sri Lanka</option>\n<option value=\"SD\">Sudan</option>\n<option value=\"SR\">Suriname</option>\n<option value=\"SJ\">Svalbard and Jan Mayen</option>\n<option value=\"SZ\">Swaziland</option>\n<option value=\"SE\">Sweden</option>\n<option value=\"CH\">Switzerland</option>\n<option value=\"SY\">Syrian Arab Republic</option>\n<option value=\"TW\">Taiwan, Province of China</option>\n<option value=\"TJ\">Tajikistan</option>\n<option value=\"TZ\">Tanzania, United Republic of</option>\n<option value=\"TH\">Thailand</option>\n<option value=\"TL\">Timor-Leste</option>\n<option value=\"TG\">Togo</option>\n<option value=\"TK\">Tokelau</option>\n<option value=\"TO\">Tonga</option>\n<option value=\"TT\">Trinidad and Tobago</option>\n<option value=\"TN\">Tunisia</option>\n<option value=\"TR\">Turkey</option>\n<option value=\"TM\">Turkmenistan</option>\n<option value=\"TC\">Turks and Caicos Islands</option>\n<option value=\"TV\">Tuvalu</option>\n<option value=\"UG\">Uganda</option>\n<option value=\"UA\">Ukraine</option>\n<option value=\"AE\">United Arab Emirates</option>\n<option value=\"GB\">United Kingdom</option>\n<option value=\"US\">United States</option>\n<option value=\"UM\">United States Minor Outlying Islands</option>\n<option value=\"UY\">Uruguay</option>\n<option value=\"UZ\">Uzbekistan</option>\n<option value=\"VU\">Vanuatu</option>\n<option value=\"VE\">Venezuela</option>\n<option value=\"VN\">Viet Nam</option>\n<option value=\"VG\">Virgin Islands, British</option>\n<option value=\"VI\">Virgin Islands, U.S.</option>\n<option value=\"WF\">Wallis and Futuna</option>\n<option value=\"EH\">Western Sahara</option>\n<option value=\"YE\">Yemen</option>\n<option value=\"ZM\">Zambia</option>\n<option value=\"ZW\">Zimbabwe</option>"
38
+
39
+ US_STATE_SELECT_HTML = "<select id=\"address_state\" name=\"address[state]\"><option value=\"AL\">Alabama</option>\n<option value=\"AK\">Alaska</option>\n<option value=\"AZ\">Arizona</option>\n<option value=\"AR\">Arkansas</option>\n<option value=\"CA\">California</option>\n<option value=\"CO\">Colorado</option>\n<option value=\"CT\">Connecticut</option>\n<option value=\"DE\">Delaware</option>\n<option value=\"DC\">District Of Columbia</option>\n<option value=\"FL\">Florida</option>\n<option value=\"GA\">Georgia</option>\n<option value=\"HI\">Hawaii</option>\n<option value=\"ID\">Idaho</option>\n<option value=\"IL\">Illinois</option>\n<option value=\"IN\">Indiana</option>\n<option value=\"IA\">Iowa</option>\n<option value=\"KS\">Kansas</option>\n<option value=\"KY\">Kentucky</option>\n<option value=\"LA\">Louisiana</option>\n<option value=\"ME\">Maine</option>\n<option value=\"MD\">Maryland</option>\n<option value=\"MA\">Massachusetts</option>\n<option value=\"MI\">Michigan</option>\n<option value=\"MN\">Minnesota</option>\n<option value=\"MS\">Mississippi</option>\n<option value=\"MO\">Missouri</option>\n<option value=\"MT\">Montana</option>\n<option value=\"NE\">Nebraska</option>\n<option value=\"NV\">Nevada</option>\n<option value=\"NH\">New Hampshire</option>\n<option value=\"NJ\">New Jersey</option>\n<option value=\"NM\">New Mexico</option>\n<option value=\"NY\">New York</option>\n<option value=\"NC\">North Carolina</option>\n<option value=\"ND\">North Dakota</option>\n<option value=\"OH\">Ohio</option>\n<option value=\"OK\">Oklahoma</option>\n<option value=\"OR\">Oregon</option>\n<option value=\"PA\">Pennsylvania</option>\n<option value=\"RI\">Rhode Island</option>\n<option value=\"SC\">South Carolina</option>\n<option value=\"SD\">South Dakota</option>\n<option value=\"TN\">Tennessee</option>\n<option value=\"TX\">Texas</option>\n<option value=\"UT\">Utah</option>\n<option value=\"VT\">Vermont</option>\n<option value=\"VA\">Virginia</option>\n<option value=\"WA\">Washington</option>\n<option value=\"WV\">West Virginia</option>\n<option value=\"WI\">Wisconsin</option>\n<option value=\"WY\">Wyoming</option>\n<option value=\"FM\">Federated States of Micronesia</option>\n<option value=\"GU\">Guam</option>\n<option value=\"MH\">Marshall Islands</option>\n<option value=\"MP\">Northern Mariana Islands</option>\n<option value=\"PW\">Palau</option>\n<option value=\"PR\">Puerto Rico</option>\n<option value=\"VI\">Virgin Islands</option>\n<option value=\"AA\">Armed Forces Americas (except Canada)</option>\n<option value=\"AE\">Armed Forces Europe, Armed Forces Canada, Armed Forces Africa, or Armed Forces Middle East</option>\n<option value=\"AP\">Armed Forces Pacific</option></select>"
40
+
41
+ CANADA_STATE_SELECT_HTML = "<select id=\"address_state\" name=\"address[state]\"><option value=\"AB\">Alberta</option>\n<option value=\"BC\">British Columbia</option>\n<option value=\"MB\">Manitoba</option>\n<option value=\"NB\">New Brunswick</option>\n<option value=\"NL\">Newfoundland and Labrador</option>\n<option value=\"NT\">Northwest Territories</option>\n<option value=\"NS\">Nova Scotia</option>\n<option value=\"NU\">Nunavut</option>\n<option value=\"ON\">Ontario</option>\n<option value=\"PE\">Prince Edward Island</option>\n<option value=\"QC\">Quebec</option>\n<option value=\"SK\">Saskatchewan</option>\n<option value=\"YT\">Yukon</option></select>"
42
+
43
+ end