rails_language_select 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c0116d225f2e2792658cebe7c7d7be4d01ce04ed
4
- data.tar.gz: abd750ed8ae9f3cb934feacc10c47e9391bcfcd0
3
+ metadata.gz: fc15627b7ee27b37f8a8e46b12879ca9e144aa9b
4
+ data.tar.gz: 980a6a6d3a9ca81360acc680ceeb728d582f8812
5
5
  SHA512:
6
- metadata.gz: 67b6dbeddaf542690039e0c930b5fc7725e0c741a9e898eaa61a65c571844cbcef449c25995c07cea006ac1e9687a112e503799a2c728c6271b2556a118de405
7
- data.tar.gz: 6dc819530af66219692b6e143a2962aa97d18403faff09bc2ba26b11a38d81b1333ed49420a293383918f43dbbc1c8cec13f55792481f3f3c3ccc2129c5af231
6
+ metadata.gz: 7627ab704a37e9bb1184403d7f82be9b64d60857f3772586d6551629e14ec8581952ad58f1368ca6d9228ccf5147e73ce13939edc85ec43b87616fa89b0dfc57
7
+ data.tar.gz: ddd705452a0440081429625b4eaab26abfa48775654da436c2cba995fa067ec2ef876cee98550be49091d90aa3317ab01cdc107e90bb475630246c6ddf04bc91
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rails_language_select (0.1.2)
4
+ rails_language_select (0.2.0)
5
5
  i18n_data (~> 0.7.0)
6
6
  sort_alphabetical (~> 1.0)
7
7
 
@@ -39,7 +39,9 @@ GEM
39
39
  coderay (~> 1.1.0)
40
40
  method_source (~> 0.8.1)
41
41
  slop (~> 3.4)
42
- psych (2.2.2)
42
+ pry-nav (0.2.4)
43
+ pry (>= 0.9.10, < 0.11.0)
44
+ psych (2.2.3)
43
45
  racc (1.4.14)
44
46
  rack (1.4.7)
45
47
  rack-cache (1.7.0)
@@ -280,6 +282,7 @@ PLATFORMS
280
282
  DEPENDENCIES
281
283
  actionpack (~> 3)
282
284
  pry (~> 0)
285
+ pry-nav
283
286
  psych
284
287
  racc
285
288
  rails_language_select!
data/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # Rails Language Select
2
2
 
3
- Provides a simple helper to get a localised `<select>` of languages using the ISO 369 standard.
3
+ Helper for displaying a localised `<select>` of languages using the ISO 369 standard or your own custom data source.
4
4
 
5
- Based on the code of https://github.com/stefanpenner/country_select
5
+ Based on the code of: https://github.com/stefanpenner/country_select
6
6
 
7
- Uses language data from https://github.com/grosser/i18n_data
7
+ By default uses language data from: https://github.com/grosser/i18n_data
8
8
 
9
9
  ## Installation
10
10
 
@@ -63,14 +63,59 @@ Supplying additional html options:
63
63
  language_select("user", "language", { priority_languages: ["EN", "FR"], selected: "EN" }, { class: 'form-control', data: { attribute: "value" } })
64
64
  ```
65
65
 
66
+ ### Using a custom data source
67
+
68
+ You can override the default data source, or define a new custom data source which will receive `code_or_name`
69
+ ```ruby
70
+ # config/initializers/language_select.rb
71
+
72
+ # example overriding default data source
73
+ RailsLanguageSelect::DATA_SOURCE[:default] = lambda do |code_or_name|
74
+ languages = I18nData.languages(I18n.locale.to_s).slice("EN", "FR", "ES")
75
+ if code_or_name.nil?
76
+ languages.keys
77
+ else
78
+ if (language = languages[code_or_name.to_s.upcase])
79
+ code = code_or_name
80
+ elsif (code = I18nData.language_code(code_or_name))
81
+ language = languages[code]
82
+ end
83
+ return language, code
84
+ end
85
+ end
86
+
87
+ # example defining a new custom data source
88
+ RailsLanguageSelect::DATA_SOURCE[:custom_data] = lambda do |code_or_name|
89
+ custom_data = {yay: "YAY!", wii: 'Yippii!'}
90
+ if code_or_name.nil?
91
+ custom_data.keys
92
+ else
93
+ if (language = custom_data[code_or_name])
94
+ code = code_or_name
95
+ elsif (code = custom_data.key(code_or_name))
96
+ language = code_or_name
97
+ end
98
+ return language, code
99
+ end
100
+ end
101
+ ```
102
+
103
+ ```ruby
104
+ language_select("user", "language", data_source: :custom_data)
105
+ ```
106
+
66
107
  ### Using a custom formatter
67
108
 
68
109
  You can override the default formatter, or define a new custom formatter which will receive `language` (localised language name) and `code`
69
110
  ```ruby
70
111
  # config/initializers/language_select.rb
112
+
113
+ # example overriding default formatter
71
114
  RailsLanguageSelect::FORMATS[:default] = lambda do |language, code|
72
115
  [language, code.downcase] # use lower case code instead of upper case
73
116
  end
117
+
118
+ # example defining a new custom formatter
74
119
  RailsLanguageSelect::FORMATS[:with_code] = lambda do |language, code|
75
120
  "#{language} (#{code})"
76
121
  end
@@ -4,6 +4,7 @@ require 'i18n_data'
4
4
  require 'sort_alphabetical'
5
5
 
6
6
  require 'rails_language_select/version'
7
+ require 'rails_language_select/data_source'
7
8
  require 'rails_language_select/formats'
8
9
  require 'rails_language_select/tag_helper'
9
10
 
@@ -0,0 +1,17 @@
1
+ module RailsLanguageSelect
2
+ DATA_SOURCE = {}
3
+
4
+ DATA_SOURCE[:default] = lambda do |code_or_name = nil|
5
+ languages = I18nData.languages(I18n.locale.to_s)
6
+ if code_or_name.nil?
7
+ languages.keys
8
+ else
9
+ if (language = languages[code_or_name.to_s.upcase])
10
+ code = code_or_name
11
+ elsif (code = I18nData.language_code(code_or_name))
12
+ language = languages[code]
13
+ end
14
+ return language, code
15
+ end
16
+ end
17
+ end
@@ -47,12 +47,16 @@ module RailsLanguageSelect
47
47
  @options[:format] || :default
48
48
  end
49
49
 
50
+ def data_source
51
+ @options[:data_source] || :default
52
+ end
53
+
50
54
  def language_options
51
55
  language_options_for(all_language_codes, true)
52
56
  end
53
57
 
54
58
  def all_language_codes
55
- codes = I18nData.languages.keys
59
+ codes = ::RailsLanguageSelect::DATA_SOURCE[data_source].call
56
60
 
57
61
  if only_language_codes.present?
58
62
  codes & only_language_codes.map{|code| code.to_s.upcase}
@@ -66,11 +70,7 @@ module RailsLanguageSelect
66
70
  def language_options_for(language_codes, sorted=true)
67
71
  I18n.with_locale(locale) do
68
72
  language_list = language_codes.map do |code_or_name|
69
- if language = I18nData.languages(I18n.locale.to_s)[code_or_name.to_s.upcase]
70
- code = code_or_name
71
- elsif code = I18nData.language_code(code_or_name)
72
- language = code_or_name
73
- end
73
+ language, code = ::RailsLanguageSelect::DATA_SOURCE[data_source].call(code_or_name)
74
74
 
75
75
  unless language.present?
76
76
  msg = "Could not find Language with string '#{code_or_name}'"
@@ -1,3 +1,3 @@
1
1
  module RailsLanguageSelect
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
10
10
  s.email = ["kasparsj@gmail.com"]
11
11
  s.homepage = "https://github.com/kasparsj/rails_language_select"
12
12
  s.summary = "Helper for displaying a localised <select> of languages"
13
- s.description = "Helper for displaying a localised <select> of languages using the ISO 369 standard."
13
+ s.description = "Helper for displaying a localised <select> of languages using the ISO 369 standard or your own custom data source."
14
14
 
15
15
  s.files = `git ls-files`.split("\n")
16
16
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -21,6 +21,7 @@ Gem::Specification.new do |s|
21
21
 
22
22
  s.add_development_dependency 'actionpack', '~> 3'
23
23
  s.add_development_dependency 'pry', '~> 0'
24
+ s.add_development_dependency 'pry-nav'
24
25
  s.add_development_dependency 'rake'
25
26
  s.add_development_dependency 'rspec', '~> 3'
26
27
  s.add_development_dependency 'wwtd'
@@ -147,7 +147,7 @@ describe "RailsLanguageSelect" do
147
147
  it "supports the language names as provided by default in Formtastic" do
148
148
  tag = options_for_select([
149
149
  ["Dzongkha", "DZ"],
150
- ["Spanish", "ES"],
150
+ ["Spanish; Castilian", "ES"],
151
151
  ["Danish", "DA"],
152
152
  ["English", "EN"]
153
153
  ])
@@ -202,4 +202,27 @@ describe "RailsLanguageSelect" do
202
202
  expect(t).to include(tag)
203
203
  end
204
204
  end
205
+
206
+ describe "custom data source" do
207
+ it "accepts a custom data source" do
208
+ ::RailsLanguageSelect::DATA_SOURCE[:custom_data] = lambda do |code_or_name = nil|
209
+ custom_data = {yay: "YAY!", wii: 'Yippii!'}
210
+ if code_or_name.nil?
211
+ custom_data.keys
212
+ else
213
+ if (language = custom_data[code_or_name])
214
+ code = code_or_name
215
+ elsif (code = custom_data.key(code_or_name))
216
+ language = code_or_name
217
+ end
218
+ return language, code
219
+ end
220
+ end
221
+
222
+ tag = options_for_select([['YAY!', 'yay'], ['Yippii!', 'wii']], 'wii')
223
+ walrus.language_code = 'wii'
224
+ t = builder.language_select(:language_code, data_source: :custom_data)
225
+ expect(t).to include(tag)
226
+ end
227
+ end
205
228
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_language_select
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kaspars Jaudzems
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry-nav
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -109,7 +123,7 @@ dependencies:
109
123
  - !ruby/object:Gem::Version
110
124
  version: '1.0'
111
125
  description: Helper for displaying a localised <select> of languages using the ISO
112
- 369 standard.
126
+ 369 standard or your own custom data source.
113
127
  email:
114
128
  - kasparsj@gmail.com
115
129
  executables: []
@@ -124,6 +138,7 @@ files:
124
138
  - README.md
125
139
  - Rakefile
126
140
  - lib/rails_language_select.rb
141
+ - lib/rails_language_select/data_source.rb
127
142
  - lib/rails_language_select/formats.rb
128
143
  - lib/rails_language_select/language_select_helper.rb
129
144
  - lib/rails_language_select/rails3/language_select_helper.rb