wovnrb 2.2.0 → 2.5.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.
data/lib/wovnrb/lang.rb CHANGED
@@ -3,46 +3,83 @@ require 'addressable'
3
3
  module Wovnrb
4
4
  class Lang
5
5
  LANG = {
6
- # http://msdn.microsoft.com/en-us/library/hh456380.aspx
7
- 'ar' => { name: 'العربية', code: 'ar', en: 'Arabic' },
8
- 'eu' => { name: 'Euskara', code: 'eu', en: 'Basque' },
9
- 'bn' => { name: 'বাংলা ভাষা', code: 'bn', en: 'Bengali' },
10
- 'bg' => { name: 'Български', code: 'bg', en: 'Bulgarian' },
11
- 'ca' => { name: 'Català', code: 'ca', en: 'Catalan' },
12
- 'zh-CHS' => { name: '简体中文', code: 'zh-CHS', en: 'Simp Chinese' },
13
- 'zh-CHT' => { name: '繁體中文', code: 'zh-CHT', en: 'Trad Chinese' },
14
- 'da' => { name: 'Dansk', code: 'da', en: 'Danish' },
15
- 'nl' => { name: 'Nederlands', code: 'nl', en: 'Dutch' },
16
- 'en' => { name: 'English', code: 'en', en: 'English' },
17
- 'fi' => { name: 'Suomi', code: 'fi', en: 'Finnish' },
18
- 'fr' => { name: 'Français', code: 'fr', en: 'French' },
19
- 'gl' => { name: 'Galego', code: 'gl', en: 'Galician' },
20
- 'de' => { name: 'Deutsch', code: 'de', en: 'German' },
21
- 'el' => { name: 'Ελληνικά', code: 'el', en: 'Greek' },
22
- 'he' => { name: 'עברית', code: 'he', en: 'Hebrew' },
23
- 'hu' => { name: 'Magyar', code: 'hu', en: 'Hungarian' },
24
- 'id' => { name: 'Bahasa Indonesia', code: 'id', en: 'Indonesian' },
25
- 'it' => { name: 'Italiano', code: 'it', en: 'Italian' },
26
- 'ja' => { name: '日本語', code: 'ja', en: 'Japanese' },
27
- 'ko' => { name: '한국어', code: 'ko', en: 'Korean' },
28
- 'lv' => { name: 'Latviešu', code: 'lv', en: 'Latvian' },
29
- 'ms' => { name: 'Bahasa Melayu', code: 'ms', en: 'Malay' },
30
- 'my' => { name: 'ဗမာစာ', code: 'my', en: 'Burmese' },
31
- 'ne' => { name: 'नेपाली भाषा', code: 'ne', en: 'Nepali' },
32
- 'fa' => { name: 'زبان_فارسی', code: 'fa', en: 'Persian' },
33
- 'no' => { name: 'Norsk', code: 'no', en: 'Norwegian' },
34
- 'pl' => { name: 'Polski', code: 'pl', en: 'Polish' },
35
- 'pt' => { name: 'Português', code: 'pt', en: 'Portuguese' },
36
- 'ru' => { name: 'Русский', code: 'ru', en: 'Russian' },
37
- 'es' => { name: 'Español', code: 'es', en: 'Spanish' },
38
- 'sw' => { name: 'Kiswahili', code: 'sw', en: 'Swahili' },
39
- 'sv' => { name: 'Svensk', code: 'sv', en: 'Swedish' },
40
- 'th' => { name: 'ภาษาไทย', code: 'th', en: 'Thai' },
41
- 'hi' => { name: 'हिन्दी', code: 'hi', en: 'Hindi' },
42
- 'tr' => { name: 'Türkçe', code: 'tr', en: 'Turkish' },
43
- 'uk' => { name: 'Українська', code: 'uk', en: 'Ukrainian' },
44
- 'ur' => { name: 'اردو', code: 'ur', en: 'Urdu' },
45
- 'vi' => { name: 'Tiếng Việt', code: 'vi', en: 'Vietnamese' }
6
+ 'ar' => { name: 'العربية', code: 'ar', en: 'Arabic' },
7
+ 'eu' => { name: 'Euskara', code: 'eu', en: 'Basque' },
8
+ 'bn' => { name: 'বাংলা ভাষা', code: 'bn', en: 'Bengali' },
9
+ 'bg' => { name: 'Български', code: 'bg', en: 'Bulgarian' },
10
+ 'ca' => { name: 'Català', code: 'ca', en: 'Catalan' },
11
+ 'zh-CN' => { name: '简体中文(中国)', code: 'zh-CN', en: 'Simp Chinese (China)' },
12
+ 'zh-CHS' => { name: '简体中文', code: 'zh-CHS', en: 'Simp Chinese' },
13
+ 'zh-Hant-HK' => { name: '繁體中文(香港)', code: 'zh-Hant-HK', en: 'Trad Chinese (Hong Kong)' },
14
+ 'zh-Hant-TW' => { name: '繁體中文(台湾)', code: 'zh-Hant-TW', en: 'Trad Chinese (Taiwan)' },
15
+ 'zh-CHT' => { name: '繁體中文', code: 'zh-CHT', en: 'Trad Chinese' },
16
+ 'da' => { name: 'Dansk', code: 'da', en: 'Danish' },
17
+ 'nl' => { name: 'Nederlands', code: 'nl', en: 'Dutch' },
18
+ 'en' => { name: 'English', code: 'en', en: 'English' },
19
+ 'en-AU' => { name: 'English (Australia)', code: 'en-AU', en: 'English (Australia)' },
20
+ 'en-CA' => { name: 'English (Canada)', code: 'en-CA', en: 'English (Canada)' },
21
+ 'en-IN' => { name: 'English (India)', code: 'en-IN', en: 'English (India)' },
22
+ 'en-NZ' => { name: 'English (New Zealand)', code: 'en-NZ', en: 'English (New Zealand)' },
23
+ 'en-ZA' => { name: 'English (South Africa)', code: 'en-ZA', en: 'English (South Africa)' },
24
+ 'en-GB' => { name: 'English (United Kingdom)', code: 'en-GB', en: 'English (United Kingdom)' },
25
+ 'en-SG' => { name: 'English (Singapore)', code: 'en-SG', en: 'English (Singapore)' },
26
+ 'en-US' => { name: 'English (United States)', code: 'en-US', en: 'English (United States)' },
27
+ 'fi' => { name: 'Suomi', code: 'fi', en: 'Finnish' },
28
+ 'fr' => { name: 'Français', code: 'fr', en: 'French' },
29
+ 'fr-CA' => { name: 'Français (Canada)', code: 'fr-CA', en: 'French (Canada)' },
30
+ 'fr-FR' => { name: 'Français (France)', code: 'fr-FR', en: 'French (France)' },
31
+ 'fr-CH' => { name: 'Français (Suisse)', code: 'fr-CH', en: 'French (Switzerland)' },
32
+ 'gl' => { name: 'Galego', code: 'gl', en: 'Galician' },
33
+ 'de' => { name: 'Deutsch', code: 'de', en: 'German' },
34
+ 'de-AT' => { name: 'Deutsch (Österreich)', code: 'de-AT', en: 'German (Austria)' },
35
+ 'de-DE' => { name: 'Deutsch (Deutschland)', code: 'de-DE', en: 'German (Germany)' },
36
+ 'de-LI' => { name: 'Deutsch (Liechtenstien)', code: 'de-LI', en: 'German (Liechtenstien)' },
37
+ 'de-CH' => { name: 'Deutsch (Schweiz)', code: 'de-CH', en: 'German (Switzerland)' },
38
+ 'el' => { name: 'Ελληνικά', code: 'el', en: 'Greek' },
39
+ 'he' => { name: 'עברית', code: 'he', en: 'Hebrew' },
40
+ 'hu' => { name: 'Magyar', code: 'hu', en: 'Hungarian' },
41
+ 'id' => { name: 'Bahasa Indonesia', code: 'id', en: 'Indonesian' },
42
+ 'it' => { name: 'Italiano', code: 'it', en: 'Italian' },
43
+ 'it-IT' => { name: 'Italiano (Italia)', code: 'it-IT', en: 'Italian (Italy)' },
44
+ 'it-CH' => { name: 'Italiano (Svizzera)', code: 'it-CH', en: 'Italian (Switzerland)' },
45
+ 'ja' => { name: '日本語', code: 'ja', en: 'Japanese' },
46
+ 'ko' => { name: '한국어', code: 'ko', en: 'Korean' },
47
+ 'lv' => { name: 'Latviešu', code: 'lv', en: 'Latvian' },
48
+ 'ms' => { name: 'Bahasa Melayu', code: 'ms', en: 'Malay' },
49
+ 'my' => { name: 'ဗမာစာ', code: 'my', en: 'Burmese' },
50
+ 'ne' => { name: 'नेपाली भाषा', code: 'ne', en: 'Nepali' },
51
+ 'no' => { name: 'Norsk', code: 'no', en: 'Norwegian' },
52
+ 'fa' => { name: 'زبان_فارسی', code: 'fa', en: 'Persian' },
53
+ 'pl' => { name: 'Polski', code: 'pl', en: 'Polish' },
54
+ 'pt' => { name: 'Português', code: 'pt', en: 'Portuguese' },
55
+ 'pt-BR' => { name: 'Português (Brasil)', code: 'pt-BR', en: 'Portuguese (Brazil)' },
56
+ 'pt-PT' => { name: 'Português (Portugal)', code: 'pt-PT', en: 'Portuguese (Portugal)' },
57
+ 'ru' => { name: 'Русский', code: 'ru', en: 'Russian' },
58
+ 'es' => { name: 'Español', code: 'es', en: 'Spanish' },
59
+ 'es-RA' => { name: 'Español (Argentina)', code: 'es-RA', en: 'Spanish (Argentina)' },
60
+ 'es-CL' => { name: 'Español (Chile)', code: 'es-CL', en: 'Spanish (Chile)' },
61
+ 'es-CO' => { name: 'Español (Colombia)', code: 'es-CO', en: 'Spanish (Colombia)' },
62
+ 'es-CR' => { name: 'Español (Costa Rica)', code: 'es-CR', en: 'Spanish (Costa Rica)' },
63
+ 'es-HN' => { name: 'Español (Honduras)', code: 'es-HN', en: 'Spanish (Honduras)' },
64
+ 'es-419' => { name: 'Español (Latinoamérica)', code: 'es-419', en: 'Spanish (Latin America)' },
65
+ 'es-MX' => { name: 'Español (México)', code: 'es-MX', en: 'Spanish (Mexico)' },
66
+ 'es-PE' => { name: 'Español (Perú)', code: 'es-PE', en: 'Spanish (Peru)' },
67
+ 'es-ES' => { name: 'Español (España)', code: 'es-ES', en: 'Spanish (Spain)' },
68
+ 'es-US' => { name: 'Español (Estados Unidos)', code: 'es-US', en: 'Spanish (United States)' },
69
+ 'es-UY' => { name: 'Español (Uruguay)', code: 'es-UY', en: 'Spanish (Uruguay)' },
70
+ 'es-VE' => { name: 'Español (Venezuela)', code: 'es-VE', en: 'Spanish (Venezuela)' },
71
+ 'sw' => { name: 'Kiswahili', code: 'sw', en: 'Swahili' },
72
+ 'sv' => { name: 'Svensk', code: 'sv', en: 'Swedish' },
73
+ 'tl' => { name: 'Tagalog', code: 'tl', en: 'Tagalog' },
74
+ 'th' => { name: 'ภาษาไทย', code: 'th', en: 'Thai' },
75
+ 'hi' => { name: 'हिन्दी', code: 'hi', en: 'Hindi' },
76
+ 'tr' => { name: 'Türkçe', code: 'tr', en: 'Turkish' },
77
+ 'uk' => { name: 'Українська', code: 'uk', en: 'Ukrainian' },
78
+ 'ur' => { name: 'اردو', code: 'ur', en: 'Urdu' },
79
+ 'vi' => { name: 'Tiếng Việt', code: 'vi', en: 'Vietnamese' },
80
+ 'km' => { name: 'ភាសាខ្មែរ', code: 'km', en: 'Khmer' },
81
+ 'ta' => { name: 'தமிழ்', code: 'ta', en: 'Tamil' },
82
+ 'si' => { name: 'සිංහල', code: 'si', en: 'Sinhala' }
46
83
  }.freeze
47
84
 
48
85
  # Provides the ISO639-1 code for a given lang code.
@@ -1,7 +1,7 @@
1
1
  module Wovnrb
2
2
  def self.middleware_inserted?(app, middleware)
3
3
  app.middleware.send(:operations).each do |_, middlewares, _|
4
- return true if middlewares.include?(middleware)
4
+ return true if middlewares&.include?(middleware)
5
5
  end
6
6
 
7
7
  false
@@ -43,6 +43,7 @@ module Wovnrb
43
43
 
44
44
  insert_snippet(true)
45
45
  insert_hreflang_tags
46
+ inject_lang_html_tag
46
47
 
47
48
  html
48
49
  end
@@ -69,7 +70,7 @@ module Wovnrb
69
70
  return if original_text.nil?
70
71
  return if original_text.include?(HtmlReplaceMarker::KEY_PREFIX)
71
72
 
72
- node.set_attribute('value', marker.add_comment_value(original_text))
73
+ node.set_attribute('value', marker.add_value(original_text))
73
74
  end
74
75
  end
75
76
 
@@ -84,7 +85,7 @@ module Wovnrb
84
85
  end
85
86
 
86
87
  def strip_wovn_ignore(node, marker)
87
- put_replace_marker(node, marker) if node && node.get_attribute('wovn-ignore')
88
+ put_replace_marker(node, marker) if node && (node.get_attribute('wovn-ignore') || node.get_attribute('data-wovn-ignore'))
88
89
  end
89
90
 
90
91
  def put_replace_marker(node, marker)
@@ -108,15 +109,9 @@ module Wovnrb
108
109
  def inject_lang_html_tag
109
110
  root = @dom.at_css('html')
110
111
  return unless root
112
+ return if root['lang']
111
113
 
112
- current_lang = @headers.lang_code
113
- default_lang = @store.default_lang
114
-
115
- if current_lang != default_lang
116
- root['lang'] = current_lang
117
- else
118
- root.delete('lang')
119
- end
114
+ root['lang'] = @store.default_lang
120
115
  end
121
116
 
122
117
  def replace_hreflangs
@@ -15,6 +15,13 @@ module Wovnrb
15
15
  key
16
16
  end
17
17
 
18
+ def add_value(value)
19
+ key = generate_key
20
+ @mapped_values << [key, value]
21
+
22
+ key
23
+ end
24
+
18
25
  def revert(marked_html)
19
26
  i = @mapped_values.size
20
27
  while i > 0
@@ -22,7 +29,6 @@ module Wovnrb
22
29
  key, value = @mapped_values[i]
23
30
  marked_html = marked_html.sub(key, value)
24
31
  end
25
-
26
32
  marked_html
27
33
  end
28
34
 
@@ -7,7 +7,7 @@ module Wovnrb
7
7
 
8
8
  def [](key)
9
9
  return @dynamic_settings[key] if @dynamic_settings.key?(key)
10
- return ignore_globs if key == 'ignore_globs'
10
+ return IgnoreGlobsWrapper.new(ignore_globs) if key == 'ignore_globs'
11
11
 
12
12
  super(key)
13
13
  end
@@ -35,5 +35,13 @@ module Wovnrb
35
35
  'wovn_token' => 'project_token',
36
36
  'wovn_ignore_paths' => 'ignore_paths'
37
37
  }.freeze
38
+
39
+ class IgnoreGlobsWrapper < Array
40
+ def ignore?(uri)
41
+ path = Addressable::URI.parse(uri).path
42
+
43
+ any? { |glob| glob.match?(path) }
44
+ end
45
+ end
38
46
  end
39
47
  end
data/lib/wovnrb/store.rb CHANGED
@@ -185,7 +185,7 @@ module Wovnrb
185
185
 
186
186
  def wovn_host
187
187
  if @settings['wovn_dev_mode']
188
- 'dev-wovn.io:3000'
188
+ 'dev-wovn.io'
189
189
  else
190
190
  'wovn.io'
191
191
  end
@@ -1,3 +1,3 @@
1
1
  module Wovnrb
2
- VERSION = '2.2.0'.freeze
2
+ VERSION = '2.5.1'.freeze
3
3
  end
@@ -74,24 +74,6 @@ module Wovnrb
74
74
  assert_equal('localhost', env['SERVER_NAME'])
75
75
  end
76
76
 
77
- def test_initialize_without_query
78
- env = Wovnrb.get_env
79
- h = Wovnrb::Headers.new(env, Wovnrb.get_settings)
80
- assert_equal('wovn.io/dashboard', h.redis_url)
81
- end
82
-
83
- def test_initialize_with_query
84
- env = Wovnrb.get_env
85
- h = Wovnrb::Headers.new(env, Wovnrb.get_settings('query' => ['param']))
86
- assert_equal('wovn.io/dashboard?param=val', h.redis_url)
87
- end
88
-
89
- def test_initialize_with_not_matching_query
90
- env = Wovnrb.get_env
91
- h = Wovnrb::Headers.new(env, Wovnrb.get_settings('query' => ['aaa']))
92
- assert_equal('wovn.io/dashboard', h.redis_url)
93
- end
94
-
95
77
  def test_initialize_with_proto_header
96
78
  env = Wovnrb.get_env('url' => 'http://page.com', 'HTTP_X_FORWARDED_PROTO' => 'https')
97
79
  h = Wovnrb::Headers.new(env, Wovnrb.get_settings('query' => ['aaa']))
@@ -139,6 +121,28 @@ module Wovnrb
139
121
  assert_equal('/test/', headers.pathname_with_trailing_slash_if_present)
140
122
  end
141
123
 
124
+ def test_pathname_for_unencoded_url
125
+ h = Wovnrb::Headers.new(
126
+ Wovnrb.get_env('REQUEST_URI' => '/v0/download_html?url=https://wovn.io/'),
127
+ Store.instance.settings
128
+ )
129
+
130
+ assert_equal('/v0/download_html', h.pathname)
131
+ assert_equal('/v0/download_html', h.pathname_with_trailing_slash_if_present)
132
+ assert_equal('wovn.io/v0/download_html?url=https://wovn.io/', h.url)
133
+ end
134
+
135
+ def test_pathname_for_unencoded_url_with_http_scheme
136
+ h = Wovnrb::Headers.new(
137
+ Wovnrb.get_env('REQUEST_URI' => 'https://wovn.io/v0/download_html?url=https://wovn.io/'),
138
+ Store.instance.settings
139
+ )
140
+
141
+ assert_equal('/v0/download_html', h.pathname)
142
+ assert_equal('/v0/download_html', h.pathname_with_trailing_slash_if_present)
143
+ assert_equal('wovn.io/v0/download_html?url=https://wovn.io/', h.url)
144
+ end
145
+
142
146
  #########################
143
147
  # REDIRECT_LOCATION
144
148
  #########################
@@ -279,6 +283,49 @@ module Wovnrb
279
283
  assert_equal('http://wovn.io/test', env['HTTP_REFERER'])
280
284
  end
281
285
 
286
+ def test_out_should_add_lang_code_to_redirection
287
+ sut = Wovnrb::Headers.new(
288
+ Wovnrb.get_env(
289
+ 'SERVER_NAME' => 'wovn.io',
290
+ 'REQUEST_URI' => '/ja/test',
291
+ 'HTTP_REFERER' => 'http://wovn.io/ja/test'
292
+ ),
293
+ Wovnrb.get_settings(
294
+ 'default_lang' => 'en',
295
+ 'supported_langs' => %w[en ja],
296
+ 'url_pattern' => 'path',
297
+ 'url_pattern_reg' => '/(?<lang>[^/.?]+)'
298
+ )
299
+ )
300
+ headers = {
301
+ 'Location' => 'http://wovn.io/'
302
+ }
303
+
304
+ assert_equal('http://wovn.io/ja/', sut.out(headers)['Location'])
305
+ end
306
+
307
+ def test_out_should_not_add_lang_code_to_ignored_redirection
308
+ sut = Wovnrb::Headers.new(
309
+ Wovnrb.get_env(
310
+ 'SERVER_NAME' => 'wovn.io',
311
+ 'REQUEST_URI' => '/ja/test',
312
+ 'HTTP_REFERER' => 'http://wovn.io/ja/test'
313
+ ),
314
+ Wovnrb.get_settings(
315
+ 'default_lang' => 'en',
316
+ 'supported_langs' => %w[en ja],
317
+ 'url_pattern' => 'path',
318
+ 'url_pattern_reg' => '/(?<lang>[^/.?]+)',
319
+ 'ignore_paths' => ['/static/']
320
+ )
321
+ )
322
+ headers = {
323
+ 'Location' => 'http://wovn.io/static/'
324
+ }
325
+
326
+ assert_equal('http://wovn.io/static/', sut.out(headers)['Location'])
327
+ end
328
+
282
329
  def test_out_http_referer_subdomain_with_custom_lang_code
283
330
  Store.instance.update_settings('custom_lang_aliases' => { 'ja' => 'staging-ja' })
284
331
  h = Wovnrb::Headers.new(
@@ -6167,7 +6214,7 @@ module Wovnrb
6167
6214
  h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings)
6168
6215
 
6169
6216
  keys = Wovnrb::Lang::LANG.keys
6170
- assert_equal(39, keys.size)
6217
+ assert_equal(77, keys.size)
6171
6218
 
6172
6219
  for key in keys
6173
6220
  uri_without_scheme = h.remove_lang("wovn.io/#{key}", key)
@@ -6181,7 +6228,7 @@ module Wovnrb
6181
6228
  def test_remove_lang_path_with_nil_lang
6182
6229
  h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings)
6183
6230
  keys = Wovnrb::Lang::LANG.keys
6184
- assert_equal(39, keys.size)
6231
+ assert_equal(77, keys.size)
6185
6232
 
6186
6233
  uri_without_scheme = h.remove_lang('wovn.io', nil)
6187
6234
  assert_equal('wovn.io', uri_without_scheme)
@@ -6204,7 +6251,7 @@ module Wovnrb
6204
6251
  h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings('url_pattern' => 'query'))
6205
6252
 
6206
6253
  keys = Wovnrb::Lang::LANG.keys
6207
- assert_equal(39, keys.size)
6254
+ assert_equal(77, keys.size)
6208
6255
 
6209
6256
  for key in keys
6210
6257
  uri_without_scheme = h.remove_lang("wovn.io/?wovn=#{key}", key)
@@ -6219,7 +6266,7 @@ module Wovnrb
6219
6266
  sut = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings('url_pattern' => 'query', 'lang_param_name' => 'lang'))
6220
6267
 
6221
6268
  keys = Wovnrb::Lang::LANG.keys
6222
- assert_equal(39, keys.size)
6269
+ assert_equal(77, keys.size)
6223
6270
 
6224
6271
  for key in keys
6225
6272
  uri_without_custom_lang_param = "wovn.io/?wovn=#{key}"
@@ -6237,7 +6284,7 @@ module Wovnrb
6237
6284
  def test_remove_lang_query_with_nil_lang
6238
6285
  h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings('url_pattern' => 'query'))
6239
6286
  keys = Wovnrb::Lang::LANG.keys
6240
- assert_equal(39, keys.size)
6287
+ assert_equal(77, keys.size)
6241
6288
 
6242
6289
  uri_without_scheme = h.remove_lang('wovn.io', nil)
6243
6290
  assert_equal('wovn.io', uri_without_scheme)
@@ -6260,7 +6307,7 @@ module Wovnrb
6260
6307
  h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings('url_pattern' => 'subdomain'))
6261
6308
 
6262
6309
  keys = Wovnrb::Lang::LANG.keys
6263
- assert_equal(39, keys.size)
6310
+ assert_equal(77, keys.size)
6264
6311
 
6265
6312
  for key in keys
6266
6313
  uri_without_scheme = h.remove_lang("#{key.downcase}.wovn.io/", key)
@@ -6274,7 +6321,7 @@ module Wovnrb
6274
6321
  def test_remove_lang_subdomain_with_nil_lang
6275
6322
  h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings('url_pattern' => 'subdomain'))
6276
6323
  keys = Wovnrb::Lang::LANG.keys
6277
- assert_equal(39, keys.size)
6324
+ assert_equal(77, keys.size)
6278
6325
 
6279
6326
  uri_without_scheme = h.remove_lang('wovn.io', nil)
6280
6327
  assert_equal('wovn.io', uri_without_scheme)
@@ -7,7 +7,7 @@ module Wovnrb
7
7
  end
8
8
 
9
9
  def test_langs_length
10
- assert_equal(39, Wovnrb::Lang::LANG.length)
10
+ assert_equal(77, Wovnrb::Lang::LANG.length)
11
11
  end
12
12
 
13
13
  def test_keys_exist
@@ -20,45 +20,15 @@ module Wovnrb
20
20
  end
21
21
 
22
22
  def test_iso_639_1_normalization
23
- assert_equal('ar', Lang.iso_639_1_normalization('ar'))
24
- assert_equal('eu', Lang.iso_639_1_normalization('eu'))
25
- assert_equal('bn', Lang.iso_639_1_normalization('bn'))
26
- assert_equal('bg', Lang.iso_639_1_normalization('bg'))
27
- assert_equal('ca', Lang.iso_639_1_normalization('ca'))
28
- assert_equal('zh-Hans', Lang.iso_639_1_normalization('zh-CHS'))
29
- assert_equal('zh-Hant', Lang.iso_639_1_normalization('zh-CHT'))
30
- assert_equal('da', Lang.iso_639_1_normalization('da'))
31
- assert_equal('nl', Lang.iso_639_1_normalization('nl'))
32
- assert_equal('en', Lang.iso_639_1_normalization('en'))
33
- assert_equal('fi', Lang.iso_639_1_normalization('fi'))
34
- assert_equal('fr', Lang.iso_639_1_normalization('fr'))
35
- assert_equal('gl', Lang.iso_639_1_normalization('gl'))
36
- assert_equal('de', Lang.iso_639_1_normalization('de'))
37
- assert_equal('el', Lang.iso_639_1_normalization('el'))
38
- assert_equal('he', Lang.iso_639_1_normalization('he'))
39
- assert_equal('hu', Lang.iso_639_1_normalization('hu'))
40
- assert_equal('id', Lang.iso_639_1_normalization('id'))
41
- assert_equal('it', Lang.iso_639_1_normalization('it'))
42
- assert_equal('ja', Lang.iso_639_1_normalization('ja'))
43
- assert_equal('ko', Lang.iso_639_1_normalization('ko'))
44
- assert_equal('lv', Lang.iso_639_1_normalization('lv'))
45
- assert_equal('ms', Lang.iso_639_1_normalization('ms'))
46
- assert_equal('my', Lang.iso_639_1_normalization('my'))
47
- assert_equal('ne', Lang.iso_639_1_normalization('ne'))
48
- assert_equal('fa', Lang.iso_639_1_normalization('fa'))
49
- assert_equal('no', Lang.iso_639_1_normalization('no'))
50
- assert_equal('pl', Lang.iso_639_1_normalization('pl'))
51
- assert_equal('pt', Lang.iso_639_1_normalization('pt'))
52
- assert_equal('ru', Lang.iso_639_1_normalization('ru'))
53
- assert_equal('es', Lang.iso_639_1_normalization('es'))
54
- assert_equal('sw', Lang.iso_639_1_normalization('sw'))
55
- assert_equal('sv', Lang.iso_639_1_normalization('sv'))
56
- assert_equal('th', Lang.iso_639_1_normalization('th'))
57
- assert_equal('hi', Lang.iso_639_1_normalization('hi'))
58
- assert_equal('tr', Lang.iso_639_1_normalization('tr'))
59
- assert_equal('uk', Lang.iso_639_1_normalization('uk'))
60
- assert_equal('ur', Lang.iso_639_1_normalization('ur'))
61
- assert_equal('vi', Lang.iso_639_1_normalization('vi'))
23
+ Wovnrb::Lang::LANG.each do |_, l|
24
+ if l[:code] == 'zh-CHS'
25
+ assert_equal('zh-Hans', Lang.iso_639_1_normalization('zh-CHS'))
26
+ elsif l[:code] == 'zh-CHT'
27
+ assert_equal('zh-Hant', Lang.iso_639_1_normalization('zh-CHT'))
28
+ else
29
+ assert_equal(l[:code], Lang.iso_639_1_normalization(l[:code]))
30
+ end
31
+ end
62
32
  end
63
33
 
64
34
  def test_get_code_with_valid_code