simonmenke-localized_country_select 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008 [name of plugin creator]
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,43 @@
1
+ = LocalizedCountrySelect
2
+
3
+ Rails plugin to provide support for localized <tt><select></tt> menu with country names and for
4
+ storing country information as country _code_ (eg. 'es'), not _name_ (eg. 'Spain'), in the database.
5
+
6
+ Uses the Rails internationalization framework (I18n, http://rails-i18n.org) for translating the names of countries.
7
+ Requires Rails 2.2 (released November 21st, 2008) or later versions.
8
+ Country names are loaded from hashes in plugin directory, according to <tt>I18n.locale</tt> value.
9
+
10
+ You can easily translate country codes in your application like this:
11
+
12
+ <%= I18n.t @user.country, :scope => 'countries' %>
13
+
14
+ Comes with a Rake task <tt>rake import:country_select 'de'</tt> for importing country names
15
+ from Unicode.org's CLDR repository (http://www.unicode.org/cldr/data/charts/summary/root.html)
16
+ Don't forget to restart the application when you add new locale.
17
+
18
+ ActionView helper code is adapted from Rails' default +country_select+ plugin (previously in core).
19
+ See http://github.com/rails/country_select/tree/master/lib/country_select.rb
20
+
21
+ == Example
22
+
23
+ <%= localized_country_select(:user, :country, [], :include_blank => 'Please choose...') %>
24
+
25
+ will become:
26
+
27
+ <select name="user[country]" id="user_country">
28
+ <option value="">Please choose...</option>
29
+ <option disabled="disabled" value="">-------------</option>
30
+ <option value="AF">Afghanistan</option>
31
+ ...
32
+ <option value="ZW">Zimbabwe</option>
33
+ </select>
34
+
35
+ for the <tt>en</tt> locale.
36
+
37
+ == Other resources
38
+
39
+ * http://github.com/rails/country_select (Default Rails plugin)
40
+ * http://github.com/russ/country_code_select (Stores country code, not name)
41
+
42
+
43
+ Copyright (c) 2008 Karel Minarik (www.karmi.cz), released under the MIT license
@@ -0,0 +1,24 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+
5
+ load File.join(File.dirname(__FILE__), 'tasks', 'localized_country_select_tasks.rake')
6
+
7
+ desc 'Default: run unit tests.'
8
+ task :default => :test
9
+
10
+ desc 'Test the localized_country_select plugin.'
11
+ Rake::TestTask.new(:test) do |t|
12
+ t.libs << 'lib'
13
+ t.pattern = 'test/**/*_test.rb'
14
+ t.verbose = true
15
+ end
16
+
17
+ desc 'Generate documentation for the localized_country_select plugin.'
18
+ Rake::RDocTask.new(:rdoc) do |rdoc|
19
+ rdoc.rdoc_dir = 'rdoc'
20
+ rdoc.title = 'LocalizedCountrySelect'
21
+ rdoc.options << '--line-numbers' << '--inline-source'
22
+ rdoc.rdoc_files.include('README.rdoc')
23
+ rdoc.rdoc_files.include('lib/**/*.rb')
24
+ end
@@ -0,0 +1,98 @@
1
+ # = LocalizedCountrySelect
2
+ #
3
+ # View helper for displaying select list with countries:
4
+ #
5
+ # localized_country_select(:user, :country)
6
+ #
7
+ # Works just like the default Rails' +country_select+ plugin, but stores countries as
8
+ # country *codes*, not *names*, in the database.
9
+ #
10
+ # You can easily translate country codes in your application like this:
11
+ # <%= I18n.t @user.country, :scope => 'countries' %>
12
+ #
13
+ # Uses the Rails internationalization framework (I18n) for translating the names of countries.
14
+ #
15
+ # Use Rake task <tt>rake import:country_select 'de'</tt> for importing country names
16
+ # from Unicode.org's CLDR repository (http://www.unicode.org/cldr/data/charts/summary/root.html)
17
+ #
18
+ # Code adapted from Rails' default +country_select+ plugin (previously in core)
19
+ # See http://github.com/rails/country_select/tree/master/lib/country_select.rb
20
+ #
21
+ module LocalizedCountrySelect
22
+ class << self
23
+ # Returns array with codes and localized country names (according to <tt>I18n.locale</tt>)
24
+ # for <tt><option></tt> tags
25
+ def localized_countries_array
26
+ I18n.translate(:countries).map { |key, value| [value, key.to_s.upcase] }.sort
27
+ end
28
+ # Return array with codes and localized country names for array of country codes passed as argument
29
+ # == Example
30
+ # priority_countries_array([:TW, :CN])
31
+ # # => [ ['Taiwan', 'TW'], ['China', 'CN'] ]
32
+ def priority_countries_array(country_codes=[])
33
+ countries = I18n.translate(:countries)
34
+ country_codes.map { |code| [countries[code], code.to_s.upcase] }
35
+ end
36
+ end
37
+ end
38
+
39
+ module ActionView
40
+ module Helpers
41
+
42
+ module FormOptionsHelper
43
+
44
+ # Return select and option tags for the given object and method, using +localized_country_options_for_select+
45
+ # to generate the list of option tags. Uses <b>country code</b>, not name as option +value+.
46
+ # Country codes listed as an array of symbols in +priority_countries+ argument will be listed first
47
+ # TODO : Implement pseudo-named args with a hash, not the "somebody said PHP?" multiple args sillines
48
+ def localized_country_select(object, method, priority_countries = nil, options = {}, html_options = {})
49
+ InstanceTag.new(object, method, self, options.delete(:object)).
50
+ to_localized_country_select_tag(priority_countries, options, html_options)
51
+ end
52
+
53
+ # Return "named" select and option tags according to given arguments.
54
+ # Use +selected_value+ for setting initial value
55
+ # It behaves likes older object-binded brother +localized_country_select+ otherwise
56
+ # TODO : Implement pseudo-named args with a hash, not the "somebody said PHP?" multiple args sillines
57
+ def localized_country_select_tag(name, selected_value = nil, priority_countries = nil, html_options = {})
58
+ content_tag :select,
59
+ localized_country_options_for_select(selected_value, priority_countries),
60
+ { "name" => name, "id" => name }.update(html_options.stringify_keys)
61
+ end
62
+
63
+ # Returns a string of option tags for countries according to locale. Supply the country code in upper-case ('US', 'DE')
64
+ # as +selected+ to have it marked as the selected option tag.
65
+ # Country codes listed as an array of symbols in +priority_countries+ argument will be listed first
66
+ def localized_country_options_for_select(selected = nil, priority_countries = nil)
67
+ country_options = ""
68
+ if priority_countries
69
+ country_options += options_for_select(LocalizedCountrySelect::priority_countries_array(priority_countries), selected)
70
+ country_options += "<option value=\"\" disabled=\"disabled\">-------------</option>\n"
71
+ end
72
+ return country_options + options_for_select(LocalizedCountrySelect::localized_countries_array, selected)
73
+ end
74
+
75
+ end
76
+
77
+ class InstanceTag
78
+ def to_localized_country_select_tag(priority_countries, options, html_options)
79
+ html_options = html_options.stringify_keys
80
+ add_default_name_and_id(html_options)
81
+ value = value(object)
82
+ content_tag("select",
83
+ add_options(
84
+ localized_country_options_for_select(value, priority_countries),
85
+ options, value
86
+ ), html_options
87
+ )
88
+ end
89
+ end
90
+
91
+ class FormBuilder
92
+ def localized_country_select(method, priority_countries = nil, options = {}, html_options = {})
93
+ @template.localized_country_select(@object_name, method, priority_countries, options.merge(:object => @object), html_options)
94
+ end
95
+ end
96
+
97
+ end
98
+ end
@@ -0,0 +1,275 @@
1
+ { :en => {
2
+
3
+ :countries => {
4
+ :AD => "Andorra",
5
+ :AE => "United Arab Emirates",
6
+ :AF => "Afghanistan",
7
+ :AG => "Antigua and Barbuda",
8
+ :AI => "Anguilla",
9
+ :AL => "Albania",
10
+ :AM => "Armenia",
11
+ :AN => "Netherlands Antilles",
12
+ :AO => "Angola",
13
+ :AQ => "Antarctica",
14
+ :AR => "Argentina",
15
+ :AS => "American Samoa",
16
+ :AT => "Austria",
17
+ :AU => "Australia",
18
+ :AW => "Aruba",
19
+ :AX => "Aland Islands",
20
+ :AZ => "Azerbaijan",
21
+ :BA => "Bosnia and Herzegovina",
22
+ :BB => "Barbados",
23
+ :BD => "Bangladesh",
24
+ :BE => "Belgium",
25
+ :BF => "Burkina Faso",
26
+ :BG => "Bulgaria",
27
+ :BH => "Bahrain",
28
+ :BI => "Burundi",
29
+ :BJ => "Benin",
30
+ :BL => "Saint Barthélemy",
31
+ :BM => "Bermuda",
32
+ :BN => "Brunei",
33
+ :BO => "Bolivia",
34
+ :BQ => "British Antarctic Territory",
35
+ :BR => "Brazil",
36
+ :BS => "Bahamas",
37
+ :BT => "Bhutan",
38
+ :BV => "Bouvet Island",
39
+ :BW => "Botswana",
40
+ :BY => "Belarus",
41
+ :BZ => "Belize",
42
+ :CA => "Canada",
43
+ :CC => "Cocos Islands",
44
+ :CD => "Congo - Kinshasa",
45
+ :CF => "Central African Republic",
46
+ :CG => "Congo - Brazzaville",
47
+ :CH => "Switzerland",
48
+ :CI => "Ivory Coast",
49
+ :CK => "Cook Islands",
50
+ :CL => "Chile",
51
+ :CM => "Cameroon",
52
+ :CN => "China",
53
+ :CO => "Colombia",
54
+ :CR => "Costa Rica",
55
+ :CS => "Serbia and Montenegro",
56
+ :CT => "Canton and Enderbury Islands",
57
+ :CU => "Cuba",
58
+ :CV => "Cape Verde",
59
+ :CX => "Christmas Island",
60
+ :CY => "Cyprus",
61
+ :CZ => "Czech Republic",
62
+ :DD => "East Germany",
63
+ :DE => "Germany",
64
+ :DJ => "Djibouti",
65
+ :DK => "Denmark",
66
+ :DM => "Dominica",
67
+ :DO => "Dominican Republic",
68
+ :DZ => "Algeria",
69
+ :EC => "Ecuador",
70
+ :EE => "Estonia",
71
+ :EG => "Egypt",
72
+ :EH => "Western Sahara",
73
+ :ER => "Eritrea",
74
+ :ES => "Spain",
75
+ :ET => "Ethiopia",
76
+ :FI => "Finland",
77
+ :FJ => "Fiji",
78
+ :FK => "Falkland Islands",
79
+ :FM => "Micronesia",
80
+ :FO => "Faroe Islands",
81
+ :FQ => "French Southern and Antarctic Territories",
82
+ :FR => "France",
83
+ :FX => "Metropolitan France",
84
+ :GA => "Gabon",
85
+ :GB => "United Kingdom",
86
+ :GD => "Grenada",
87
+ :GE => "Georgia",
88
+ :GF => "French Guiana",
89
+ :GG => "Guernsey",
90
+ :GH => "Ghana",
91
+ :GI => "Gibraltar",
92
+ :GL => "Greenland",
93
+ :GM => "Gambia",
94
+ :GN => "Guinea",
95
+ :GP => "Guadeloupe",
96
+ :GQ => "Equatorial Guinea",
97
+ :GR => "Greece",
98
+ :GS => "South Georgia and the South Sandwich Islands",
99
+ :GT => "Guatemala",
100
+ :GU => "Guam",
101
+ :GW => "Guinea-Bissau",
102
+ :GY => "Guyana",
103
+ :HK => "Hong Kong SAR China",
104
+ :HK => "Hong Kong",
105
+ :HM => "Heard Island and McDonald Islands",
106
+ :HN => "Honduras",
107
+ :HR => "Croatia",
108
+ :HT => "Haiti",
109
+ :HU => "Hungary",
110
+ :ID => "Indonesia",
111
+ :IE => "Ireland",
112
+ :IL => "Israel",
113
+ :IM => "Isle of Man",
114
+ :IN => "India",
115
+ :IO => "British Indian Ocean Territory",
116
+ :IQ => "Iraq",
117
+ :IR => "Iran",
118
+ :IS => "Iceland",
119
+ :IT => "Italy",
120
+ :JE => "Jersey",
121
+ :JM => "Jamaica",
122
+ :JO => "Jordan",
123
+ :JP => "Japan",
124
+ :JT => "Johnston Island",
125
+ :KE => "Kenya",
126
+ :KG => "Kyrgyzstan",
127
+ :KH => "Cambodia",
128
+ :KI => "Kiribati",
129
+ :KM => "Comoros",
130
+ :KN => "Saint Kitts and Nevis",
131
+ :KP => "North Korea",
132
+ :KR => "South Korea",
133
+ :KW => "Kuwait",
134
+ :KY => "Cayman Islands",
135
+ :KZ => "Kazakhstan",
136
+ :LA => "Laos",
137
+ :LB => "Lebanon",
138
+ :LC => "Saint Lucia",
139
+ :LI => "Liechtenstein",
140
+ :LK => "Sri Lanka",
141
+ :LR => "Liberia",
142
+ :LS => "Lesotho",
143
+ :LT => "Lithuania",
144
+ :LU => "Luxembourg",
145
+ :LV => "Latvia",
146
+ :LY => "Libya",
147
+ :MA => "Morocco",
148
+ :MC => "Monaco",
149
+ :MD => "Moldova",
150
+ :ME => "Montenegro",
151
+ :MF => "Saint Martin",
152
+ :MG => "Madagascar",
153
+ :MH => "Marshall Islands",
154
+ :MI => "Midway Islands",
155
+ :MK => "Macedonia",
156
+ :ML => "Mali",
157
+ :MM => "Myanmar",
158
+ :MN => "Mongolia",
159
+ :MO => "Macau SAR China",
160
+ :MO => "Macau",
161
+ :MP => "Northern Mariana Islands",
162
+ :MQ => "Martinique",
163
+ :MR => "Mauritania",
164
+ :MS => "Montserrat",
165
+ :MT => "Malta",
166
+ :MU => "Mauritius",
167
+ :MV => "Maldives",
168
+ :MW => "Malawi",
169
+ :MX => "Mexico",
170
+ :MY => "Malaysia",
171
+ :MZ => "Mozambique",
172
+ :NA => "Namibia",
173
+ :NC => "New Caledonia",
174
+ :NE => "Niger",
175
+ :NF => "Norfolk Island",
176
+ :NG => "Nigeria",
177
+ :NI => "Nicaragua",
178
+ :NL => "Netherlands",
179
+ :NO => "Norway",
180
+ :NP => "Nepal",
181
+ :NQ => "Dronning Maud Land",
182
+ :NR => "Nauru",
183
+ :NT => "Neutral Zone",
184
+ :NU => "Niue",
185
+ :NZ => "New Zealand",
186
+ :OM => "Oman",
187
+ :PA => "Panama",
188
+ :PC => "Pacific Islands Trust Territory",
189
+ :PE => "Peru",
190
+ :PF => "French Polynesia",
191
+ :PG => "Papua New Guinea",
192
+ :PH => "Philippines",
193
+ :PK => "Pakistan",
194
+ :PL => "Poland",
195
+ :PM => "Saint Pierre and Miquelon",
196
+ :PN => "Pitcairn",
197
+ :PR => "Puerto Rico",
198
+ :PS => "Palestinian Territory",
199
+ :PT => "Portugal",
200
+ :PU => "U.S. Miscellaneous Pacific Islands",
201
+ :PW => "Palau",
202
+ :PY => "Paraguay",
203
+ :PZ => "Panama Canal Zone",
204
+ :QA => "Qatar",
205
+ :QO => "Outlying Oceania",
206
+ :QU => "European Union",
207
+ :RE => "Reunion",
208
+ :RO => "Romania",
209
+ :RS => "Serbia",
210
+ :RU => "Russia",
211
+ :RW => "Rwanda",
212
+ :SA => "Saudi Arabia",
213
+ :SB => "Solomon Islands",
214
+ :SC => "Seychelles",
215
+ :SD => "Sudan",
216
+ :SE => "Sweden",
217
+ :SG => "Singapore",
218
+ :SH => "Saint Helena",
219
+ :SI => "Slovenia",
220
+ :SJ => "Svalbard and Jan Mayen",
221
+ :SK => "Slovakia",
222
+ :SL => "Sierra Leone",
223
+ :SM => "San Marino",
224
+ :SN => "Senegal",
225
+ :SO => "Somalia",
226
+ :SR => "Suriname",
227
+ :ST => "Sao Tome and Principe",
228
+ :SU => "Union of Soviet Socialist Republics",
229
+ :SV => "El Salvador",
230
+ :SY => "Syria",
231
+ :SZ => "Swaziland",
232
+ :TC => "Turks and Caicos Islands",
233
+ :TD => "Chad",
234
+ :TF => "French Southern Territories",
235
+ :TG => "Togo",
236
+ :TH => "Thailand",
237
+ :TJ => "Tajikistan",
238
+ :TK => "Tokelau",
239
+ :TL => "East Timor",
240
+ :TM => "Turkmenistan",
241
+ :TN => "Tunisia",
242
+ :TO => "Tonga",
243
+ :TR => "Turkey",
244
+ :TT => "Trinidad and Tobago",
245
+ :TV => "Tuvalu",
246
+ :TW => "Taiwan",
247
+ :TZ => "Tanzania",
248
+ :UA => "Ukraine",
249
+ :UG => "Uganda",
250
+ :UM => "United States Minor Outlying Islands",
251
+ :US => "United States",
252
+ :UY => "Uruguay",
253
+ :UZ => "Uzbekistan",
254
+ :VA => "Vatican",
255
+ :VC => "Saint Vincent and the Grenadines",
256
+ :VD => "North Vietnam",
257
+ :VE => "Venezuela",
258
+ :VG => "British Virgin Islands",
259
+ :VI => "U.S. Virgin Islands",
260
+ :VN => "Vietnam",
261
+ :VU => "Vanuatu",
262
+ :WF => "Wallis and Futuna",
263
+ :WK => "Wake Island",
264
+ :WS => "Samoa",
265
+ :YD => "People's Democratic Republic of Yemen",
266
+ :YE => "Yemen",
267
+ :YT => "Mayotte",
268
+ :ZA => "South Africa",
269
+ :ZM => "Zambia",
270
+ :ZW => "Zimbabwe",
271
+ :ZZ => "Unknown or Invalid Region",
272
+ }
273
+
274
+ }
275
+ }
@@ -0,0 +1,3 @@
1
+
2
+ # Load locales for countries from +locale+ directory into Rails
3
+ I18n.load_path += Dir[ File.join(File.dirname(__FILE__), '..', 'locale', '*.{rb,yml}') ]
@@ -0,0 +1,86 @@
1
+ require 'rubygems'
2
+ require 'hpricot'
3
+ require 'open-uri'
4
+
5
+ # Rake task for importing country names from Unicode.org's CLDR repository
6
+ # (http://www.unicode.org/cldr/data/charts/summary/root.html).
7
+ #
8
+ # It parses a HTML file from Unicode.org for given locale and saves the
9
+ # Rails' I18n hash in the plugin +locale+ directory
10
+ #
11
+ # Don't forget to restart the application when you add new locale to load it into Rails!
12
+ #
13
+ # == Example
14
+ # rake import:country_select 'de'
15
+ #
16
+ # The code is deliberately procedural and simple, so it's easily
17
+ # understandable by beginners as an introduction to Rake tasks power.
18
+ # See http://github.com/joshmh/cldr/tree/master/converter.rb for much more robust solution
19
+
20
+ namespace :import do
21
+
22
+ desc "Import country codes and names for various languages from the Unicode.org CLDR archive. Depends on Hpricot gem."
23
+ task :country_select do
24
+
25
+ # TODO : Implement locale import chooser from CLDR root via Highline
26
+
27
+ # Setup variables
28
+ locale = ARGV[1]
29
+ unless locale
30
+ puts "\n[!] Usage: rake import:country_select de\n\n"
31
+ exit 0
32
+ end
33
+
34
+ # ----- Get the CLDR HTML --------------------------------------------------
35
+ begin
36
+ puts "... getting the HTML file for locale '#{locale}'"
37
+ doc = Hpricot( open("http://www.unicode.org/cldr/data/charts/summary/#{locale}.html") )
38
+ rescue => e
39
+ puts "[!] Invalid locale name '#{locale}'! Not found in CLDR (#{e})"
40
+ exit 0
41
+ end
42
+
43
+
44
+ # ----- Parse the HTML with Hpricot ----------------------------------------
45
+ puts "... parsing the HTML file"
46
+ countries = []
47
+ doc.search("//tr").each do |row|
48
+ if row.search("td[@class='n']") &&
49
+ row.search("td[@class='n']").inner_html =~ /^namesterritory$/ &&
50
+ row.search("td[@class='g']").inner_html =~ /^[A-Z]{2}/
51
+ code = row.search("td[@class='g']").inner_text
52
+ code = code[-code.size, 2]
53
+ name = row.search("td[@class='v']").inner_text
54
+ countries << { :code => code.to_sym, :name => name.to_s }
55
+ print " ... #{name}"
56
+ end
57
+ end
58
+
59
+
60
+ # ----- Prepare the output format ------------------------------------------
61
+ output =<<HEAD
62
+ { :#{locale} => {
63
+
64
+ :countries => {
65
+ HEAD
66
+ countries.each do |country|
67
+ output << "\t\t\t:#{country[:code]} => \"#{country[:name]}\",\n"
68
+ end
69
+ output <<<<TAIL
70
+ }
71
+
72
+ }
73
+ }
74
+ TAIL
75
+
76
+
77
+ # ----- Write the parsed values into file ---------------------------------
78
+ puts "\n... writing the output"
79
+ filename = File.join(File.dirname(__FILE__), '..', 'locale', "#{locale}.rb")
80
+ filename += '.NEW' if File.exists?(filename) # Append 'NEW' if file exists
81
+ File.open(filename, 'w+') { |f| f << output }
82
+ puts "\n---\nWritten values for the '#{locale}' into file: #{filename}\n"
83
+ # ------------------------------------------------------------------------------
84
+ end
85
+
86
+ end
@@ -0,0 +1,90 @@
1
+ require 'test/unit'
2
+
3
+ require 'rubygems'
4
+ require 'active_support'
5
+ require 'action_controller'
6
+ require 'action_controller/test_process'
7
+ require 'action_view'
8
+ require 'action_view/helpers/tag_helper'
9
+ require 'i18n'
10
+
11
+ require 'localized_country_select'
12
+
13
+ class LocalizedCountrySelectTest < Test::Unit::TestCase
14
+
15
+ include ActionView::Helpers::FormOptionsHelper
16
+ include ActionView::Helpers::TagHelper
17
+
18
+ def test_action_view_should_include_helper_for_object
19
+ assert ActionView::Helpers::FormBuilder.instance_methods.include?('localized_country_select')
20
+ assert ActionView::Helpers::FormOptionsHelper.instance_methods.include?('localized_country_select')
21
+ end
22
+
23
+ def test_action_view_should_include_helper_tag
24
+ assert ActionView::Helpers::FormOptionsHelper.instance_methods.include?('localized_country_select_tag')
25
+ end
26
+
27
+ def test_should_return_select_tag_with_proper_name_for_object
28
+ # puts localized_country_select(:user, :country)
29
+ assert localized_country_select(:user, :country) =~
30
+ Regexp.new(Regexp.escape('<select id="user_country" name="user[country]">')),
31
+ "Should have proper name for object"
32
+ end
33
+
34
+ def test_should_return_select_tag_with_proper_name
35
+ # puts localized_country_select_tag( "competition_submission[data][citizenship]", nil)
36
+ assert localized_country_select_tag( "competition_submission[data][citizenship]", nil) =~
37
+ Regexp.new(
38
+ Regexp.escape('<select id="competition_submission[data][citizenship]" name="competition_submission[data][citizenship]">') ),
39
+ "Should have proper name"
40
+ end
41
+
42
+ def test_should_return_option_tags
43
+ assert localized_country_select(:user, :country) =~ Regexp.new(Regexp.escape('<option value="ES">Spain</option>'))
44
+ end
45
+
46
+ def test_should_return_localized_option_tags
47
+ I18n.locale = 'cz'
48
+ assert localized_country_select(:user, :country) =~ Regexp.new(Regexp.escape('<option value="ES">Španělsko</option>'))
49
+ end
50
+
51
+ def test_should_return_priority_countries_first
52
+ assert localized_country_options_for_select(nil, [:ES, :CZ]) =~ Regexp.new(
53
+ Regexp.escape("<option value=\"ES\">Spain</option>\n<option value=\"CZ\">Czech Republic</option><option value=\"\" disabled=\"disabled\">-------------</option>\n<option value=\"AF\">Afghanistan</option>\n"))
54
+ end
55
+
56
+ def test_i18n_should_know_about_countries
57
+ assert_equal 'Spain', I18n.t('ES', :scope => 'countries')
58
+ I18n.locale = 'cz'
59
+ assert_equal 'Španělsko', I18n.t('ES', :scope => 'countries')
60
+ end
61
+
62
+ def test_localized_countries_array_returns_correctly
63
+ assert_nothing_raised { LocalizedCountrySelect::localized_countries_array() }
64
+ # puts LocalizedCountrySelect::localized_countries_array.inspect
65
+ I18n.locale = 'en'
66
+ assert_equal 266, LocalizedCountrySelect::localized_countries_array.size
67
+ assert_equal 'Afghanistan', LocalizedCountrySelect::localized_countries_array.first[0]
68
+ I18n.locale = 'cz'
69
+ assert_equal 250, LocalizedCountrySelect::localized_countries_array.size
70
+ assert_equal 'Afghánistán', LocalizedCountrySelect::localized_countries_array.first[0]
71
+ end
72
+
73
+ def test_priority_countries_returns_correctly_and_in_correct_order
74
+ assert_nothing_raised { LocalizedCountrySelect::priority_countries_array([:TW, :CN]) }
75
+ I18n.locale = 'en'
76
+ assert_equal [ ['Taiwan', 'TW'], ['China', 'CN'] ], LocalizedCountrySelect::priority_countries_array([:TW, :CN])
77
+ end
78
+
79
+ private
80
+
81
+ def setup
82
+ ['cz', 'en'].each do |locale|
83
+ # I18n.load_translations( File.join(File.dirname(__FILE__), '..', 'locale', "#{locale}.rb") ) # <-- Old style! :)
84
+ I18n.load_path += Dir[ File.join(File.dirname(__FILE__), '..', 'locale', "#{locale}.rb") ]
85
+ end
86
+ # I18n.locale = I18n.default_locale
87
+ I18n.locale = 'en'
88
+ end
89
+
90
+ end
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: simonmenke-localized_country_select
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Karel Minarik
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-08-10 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Rails plugin for localized "country_select" helper with Rake task for downloading locales from Unicode.org's CLDR
17
+ email: karel.minarik@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - lib/localized_country_select.rb
26
+ - rails/init.rb
27
+ - tasks/localized_country_select_tasks.rake
28
+ - test/localized_country_select_test.rb
29
+ - locale/en.rb
30
+ - MIT-LICENSE
31
+ - Rakefile
32
+ - README.rdoc
33
+ has_rdoc: false
34
+ homepage: http://www.restafari.org/localized-country-select.html
35
+ post_install_message:
36
+ rdoc_options: []
37
+
38
+ require_paths:
39
+ - lib
40
+ required_ruby_version: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: "0"
45
+ version:
46
+ required_rubygems_version: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: "0"
51
+ version:
52
+ requirements: []
53
+
54
+ rubyforge_project:
55
+ rubygems_version: 1.2.0
56
+ signing_key:
57
+ specification_version: 3
58
+ summary: Rails plugin for localized "country_select" helper with Rake task for downloading locales from Unicode.org's CLDR
59
+ test_files:
60
+ - test/localized_country_select_test.rb