localized_country_select 0.9.2 → 0.9.3

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.
@@ -18,24 +18,24 @@ Don't forget to restart the application when you add new locale.
18
18
  ActionView helper code is adapted from Rails' default +country_select+ plugin (previously in core).
19
19
  See http://github.com/rails/country_select/tree/master/lib/country_select.rb
20
20
 
21
- == Rails 3
21
+ == Rails 3 / Rails 4
22
22
 
23
23
  In your Gemfile add:
24
24
 
25
- gem 'localized_country_select', '>= 0.9.2'
25
+ gem 'localized_country_select', '>= 0.9.3'
26
26
 
27
27
  == Rails 2.3
28
28
 
29
29
  No longer supported, but you can still use old version of gem.
30
30
  In environment.rb add
31
31
 
32
- config.gem 'localized_country_select, , :version => '0.0.1'
32
+ config.gem 'localized_country_select', :version => '0.0.1'
33
33
 
34
34
  == Example
35
35
 
36
36
  Show full country names:
37
37
 
38
- <%= localized_country_select(:user, :country, [], {:include_blank => 'Please choose...')} %>
38
+ <%= localized_country_select(:user, :country, [], {:include_blank => 'Please choose...'}) %>
39
39
 
40
40
  will become:
41
41
 
@@ -50,7 +50,7 @@ will become:
50
50
 
51
51
  Show only country codes:
52
52
 
53
- <%= localized_country_select(:user, :country, [], {:include_blank => 'Please choose...', :description => :abbreviated)}
53
+ <%= localized_country_select(:user, :country, [], {:include_blank => 'Please choose...', :description => :abbreviated}) %>
54
54
 
55
55
  will become:
56
56
 
@@ -66,6 +66,11 @@ will become:
66
66
  for the <tt>en</tt> locale.
67
67
 
68
68
 
69
+ You can exclude countries by code using the exclude option (a single code or an array of country codes):
70
+
71
+ localized_country_select(:user, :country, [], {:exclude => [:ZZ, :US]})
72
+
73
+
69
74
  == Formtastic and SimpleForm
70
75
 
71
76
  Gem supports (via alias_method) both formtastic and simple_form :country input
@@ -24,13 +24,13 @@ module LocalizedCountrySelect
24
24
  # Returns array with codes and localized country names (according to <tt>I18n.locale</tt>)
25
25
  # for <tt><option></tt> tags
26
26
  def localized_countries_array(options={})
27
+ exclude = Array(options[:exclude]).map {|code| code.to_s.upcase }
28
+
27
29
  if(options[:description]==:abbreviated)
28
- I18n.translate(:countries).map { |key, value| [key.to_s.upcase] }.
29
- sort_by { |country| country.first.parameterize }
30
+ I18n.translate(:countries).map { |key, value| [key.to_s.upcase] if !exclude.include?(key.to_s.upcase) }
30
31
  else
31
- I18n.translate(:countries).map { |key, value| [value, key.to_s.upcase] }.
32
- sort_by { |country| country.first.parameterize }
33
- end
32
+ I18n.translate(:countries).map { |key, value| [value, key.to_s.upcase] if !exclude.include?(key.to_s.upcase) }
33
+ end.compact.sort_by { |country| country.first.parameterize }
34
34
  end
35
35
  # Return array with codes and localized country names for array of country codes passed as argument
36
36
  # == Example
@@ -57,8 +57,15 @@ module ActionView
57
57
  # Country codes listed as an array of symbols in +priority_countries+ argument will be listed first
58
58
  # TODO : Implement pseudo-named args with a hash, not the "somebody said PHP?" multiple args sillines
59
59
  def localized_country_select(object, method, priority_countries = nil, options = {}, html_options = {})
60
- InstanceTag.new(object, method, self, options.delete(:object)).
61
- to_localized_country_select_tag(priority_countries, options, html_options)
60
+ tag = if defined?(ActionView::Helpers::InstanceTag) &&
61
+ ActionView::Helpers::InstanceTag.instance_method(:initialize).arity != 0
62
+
63
+ InstanceTag.new(object, method, self, options.delete(:object))
64
+ else
65
+ CountrySelect.new(object, method, self, options)
66
+ end
67
+
68
+ tag.to_localized_country_select_tag(priority_countries, options, html_options)
62
69
  end
63
70
  alias_method :country_select, :localized_country_select
64
71
 
@@ -88,7 +95,7 @@ module ActionView
88
95
 
89
96
  end
90
97
 
91
- class InstanceTag
98
+ module ToCountrySelectTag
92
99
  def to_localized_country_select_tag(priority_countries, options, html_options)
93
100
  html_options = html_options.stringify_keys
94
101
  add_default_name_and_id(html_options)
@@ -102,6 +109,17 @@ module ActionView
102
109
  end
103
110
  end
104
111
 
112
+ if defined?(ActionView::Helpers::InstanceTag) &&
113
+ ActionView::Helpers::InstanceTag.instance_method(:initialize).arity != 0
114
+ class InstanceTag
115
+ include ToCountrySelectTag
116
+ end
117
+ else
118
+ class CountrySelect < Tags::Base
119
+ include ToCountrySelectTag
120
+ end
121
+ end
122
+
105
123
  class FormBuilder
106
124
  def localized_country_select(method, priority_countries = nil, options = {}, html_options = {})
107
125
  @template.localized_country_select(@object_name, method, priority_countries, options.merge(:object => @object), html_options)
@@ -1,3 +1,3 @@
1
1
  module LocalizedCountrySelect
2
- VERSION = "0.9.2"
2
+ VERSION = "0.9.3"
3
3
  end
@@ -9,12 +9,18 @@ require 'open-uri'
9
9
  #
10
10
  # Don't forget to restart the application when you add new locale to load it into Rails!
11
11
  #
12
- # == Example
13
- # rake import:country_select 'de'
12
+ # == Parameters
13
+ # LOCALE (required): Sets the locale to use. Output file name will include this.
14
+ # FORMAT (optional): Output format, either 'rb' or 'yml'. Defaults to 'rb' if not specified.
15
+ # WEB_LOCALE (optional): Forces a locale code to use when querying the Unicode.org CLDR archive.
16
+ #
17
+ # == Examples
18
+ # rake import:country_select LOCALE=de
19
+ # rake import:country_select LOCALE=pt-BR WEB_LOCALE=pt FORMAT=yml
14
20
  #
15
21
  # The code is deliberately procedural and simple, so it's easily
16
22
  # understandable by beginners as an introduction to Rake tasks power.
17
- # See http://github.com/joshmh/cldr/tree/master/converter.rb for much more robust solution
23
+ # See https://github.com/svenfuchs/ruby-cldr for much more robust solution
18
24
 
19
25
  namespace :import do
20
26
 
@@ -36,12 +42,18 @@ namespace :import do
36
42
  exit 0
37
43
  end
38
44
 
45
+ # convert locale code to Unicode.org CLDR acceptable code
46
+ web_locale = if ENV['WEB_LOCALE'] then ENV['WEB_LOCALE']
47
+ elsif %w(zht zhtw).include?(locale.downcase.gsub(/[-_]/,'')) then 'zh_Hant'
48
+ elsif %w(zhs zhcn).include?(locale.downcase.gsub(/[-_]/,'')) then 'zh_Hans'
49
+ else locale.underscore.split('_')[0] end
50
+
39
51
  # ----- Get the CLDR HTML --------------------------------------------------
40
52
  begin
41
- puts "... getting the HTML file for locale '#{locale}'"
42
- doc = Hpricot( open("http://www.unicode.org/cldr/data/charts/summary/#{locale}.html") )
53
+ puts "... getting the HTML file for locale '#{web_locale}'"
54
+ doc = Hpricot( open("http://www.unicode.org/cldr/data/charts/summary/#{web_locale}.html") )
43
55
  rescue => e
44
- puts "[!] Invalid locale name '#{locale}'! Not found in CLDR (#{e})"
56
+ puts "[!] Invalid locale name '#{web_locale}'! Not found in CLDR (#{e})"
45
57
  exit 0
46
58
  end
47
59
 
@@ -63,6 +75,25 @@ namespace :import do
63
75
 
64
76
 
65
77
  # ----- Prepare the output format ------------------------------------------
78
+
79
+ format = if ENV['FORMAT'].nil?||%(rb ruby).include?(ENV['FORMAT'].downcase) then :rb
80
+ elsif %(yml yaml).include?(ENV['FORMAT'].downcase) then :yml end
81
+
82
+ unless format
83
+ puts "\n[!] FORMAT must be either 'rb' or 'yml'\n\n"
84
+ exit 0
85
+ end
86
+
87
+ if format==:yml
88
+ output =<<HEAD
89
+ #{locale}:
90
+ countries:
91
+ HEAD
92
+ countries.each do |country|
93
+ output << " #{country[:code]}: \"#{country[:name]}\"\n"
94
+ end
95
+
96
+ else # rb format
66
97
  output = "#encoding: UTF-8\n"
67
98
  output <<<<HEAD
68
99
  { :#{locale} => {
@@ -78,11 +109,11 @@ HEAD
78
109
  }
79
110
  }
80
111
  TAIL
112
+ end
81
113
 
82
-
83
114
  # ----- Write the parsed values into file ---------------------------------
84
115
  puts "\n... writing the output"
85
- filename = Rails.root.join('config', 'locales', "country_select_#{locale.downcase}.rb")
116
+ filename = Rails.root.join('config', 'locales', "countries.#{locale}.#{format}")
86
117
  if filename.exist?
87
118
  filename = Pathname.new("#{filename.to_s}.NEW")
88
119
  end
@@ -68,6 +68,18 @@ class LocalizedCountrySelectTest < Test::Unit::TestCase
68
68
  assert_equal 'Španělsko', I18n.t('ES', :scope => 'countries')
69
69
  end
70
70
 
71
+ def test_excludes_countries
72
+ assert_nothing_raised { LocalizedCountrySelect::localized_countries_array(:exclude => :ZZ) }
73
+
74
+ assert_block do
75
+ not LocalizedCountrySelect::localized_countries_array(:exclude => :ZZ).any? {|country| country.last == "ZZ"}
76
+ end
77
+
78
+ assert_block do
79
+ not LocalizedCountrySelect::localized_countries_array(:exclude => [:ZZ, :US]).any? {|country| country.last == "ZZ" or country.last == "US"}
80
+ end
81
+ end
82
+
71
83
  def test_localized_countries_array_returns_correctly
72
84
  assert_nothing_raised { LocalizedCountrySelect::localized_countries_array() }
73
85
  # puts LocalizedCountrySelect::localized_countries_array.inspect
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: localized_country_select
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.9.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -15,7 +15,7 @@ authors:
15
15
  autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
- date: 2013-01-15 00:00:00.000000000 Z
18
+ date: 2013-07-02 00:00:00.000000000 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: actionpack
@@ -106,10 +106,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
106
  version: '0'
107
107
  requirements: []
108
108
  rubyforge_project:
109
- rubygems_version: 1.8.24
109
+ rubygems_version: 1.8.23
110
110
  signing_key:
111
111
  specification_version: 3
112
112
  summary: Localized "country_select" helper with Rake task for downloading locales
113
113
  from Unicode.org's CLDR
114
114
  test_files:
115
115
  - test/localized_country_select_test.rb
116
+ has_rdoc: