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.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +2 -2
- data/README.en.md +174 -0
- data/README.ja.md +180 -0
- data/README.md +1 -0
- data/lib/wovnrb.rb +15 -4
- data/lib/wovnrb/headers.rb +25 -41
- data/lib/wovnrb/lang.rb +77 -40
- data/lib/wovnrb/railtie.rb +1 -1
- data/lib/wovnrb/services/html_converter.rb +5 -10
- data/lib/wovnrb/services/html_replace_marker.rb +7 -1
- data/lib/wovnrb/settings.rb +9 -1
- data/lib/wovnrb/store.rb +1 -1
- data/lib/wovnrb/version.rb +1 -1
- data/test/lib/headers_test.rb +72 -25
- data/test/lib/lang_test.rb +10 -40
- data/test/lib/services/html_converter_test.rb +41 -15
- data/test/lib/services/html_replace_marker_test.rb +81 -5
- data/test/lib/store_test.rb +1 -0
- data/test/lib/wovnrb_test.rb +140 -1
- data/test/test_helper.rb +4 -2
- data/wovnrb.gemspec +1 -1
- metadata +9 -7
- data/README.md +0 -170
data/lib/wovnrb/lang.rb
CHANGED
@@ -3,46 +3,83 @@ require 'addressable'
|
|
3
3
|
module Wovnrb
|
4
4
|
class Lang
|
5
5
|
LANG = {
|
6
|
-
|
7
|
-
'
|
8
|
-
'
|
9
|
-
'
|
10
|
-
'
|
11
|
-
'
|
12
|
-
'zh-CHS' => { name: '简体中文',
|
13
|
-
'zh-
|
14
|
-
'
|
15
|
-
'
|
16
|
-
'
|
17
|
-
'
|
18
|
-
'
|
19
|
-
'
|
20
|
-
'
|
21
|
-
'
|
22
|
-
'
|
23
|
-
'
|
24
|
-
'
|
25
|
-
'
|
26
|
-
'
|
27
|
-
'
|
28
|
-
'
|
29
|
-
'
|
30
|
-
'
|
31
|
-
'
|
32
|
-
'
|
33
|
-
'
|
34
|
-
'
|
35
|
-
'
|
36
|
-
'
|
37
|
-
'
|
38
|
-
'
|
39
|
-
'
|
40
|
-
'
|
41
|
-
'
|
42
|
-
'
|
43
|
-
'
|
44
|
-
'
|
45
|
-
'
|
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.
|
data/lib/wovnrb/railtie.rb
CHANGED
@@ -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.
|
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
|
-
|
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
|
|
data/lib/wovnrb/settings.rb
CHANGED
@@ -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
data/lib/wovnrb/version.rb
CHANGED
data/test/lib/headers_test.rb
CHANGED
@@ -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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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)
|
data/test/lib/lang_test.rb
CHANGED
@@ -7,7 +7,7 @@ module Wovnrb
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def test_langs_length
|
10
|
-
assert_equal(
|
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
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
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
|