wovnrb 2.2.1 → 2.6.0

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
@@ -147,10 +142,14 @@ module Wovnrb
147
142
  # Remove wovn snippet code from dom
148
143
  def strip_snippet
149
144
  @dom.xpath('//script').each do |script_node|
150
- script_node.remove if script_node['src'] && script_node['src'] =~ /^\/\/j.(dev-)?wovn.io(:3000)?\//
145
+ script_node.remove if (script_node['src'] && widget_urls.any? { |url| script_node['src'].include? url }) || script_node['data-wovnio'].present?
151
146
  end
152
147
  end
153
148
 
149
+ def widget_urls
150
+ [@store.settings['api_url'] + '/widget', 'j.wovn.io', 'j.dev-wovn.io:3000']
151
+ end
152
+
154
153
  def insert_snippet(adds_backend_error_mark = true)
155
154
  parent_node = @dom.at_css('head') || @dom.at_css('body') || @dom.at_css('html')
156
155
  return unless parent_node
@@ -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/store.rb CHANGED
@@ -23,7 +23,7 @@ module Wovnrb
23
23
  'lang_param_name' => 'wovn',
24
24
  'query' => [],
25
25
  'ignore_class' => [],
26
- 'api_url' => 'https://wovn.global.ssl.fastly.net/v0/',
26
+ 'api_url' => 'https://wovn.global.ssl.fastly.net',
27
27
  'api_timeout_seconds' => 1.0,
28
28
  'default_lang' => 'en',
29
29
  'supported_langs' => ['en'],
@@ -157,7 +157,7 @@ module Wovnrb
157
157
 
158
158
  if @settings['wovn_dev_mode']
159
159
  if @settings['api_url'] == self.class.default_settings['api_url']
160
- @settings['api_url'] = 'http://dev-wovn.io:3001/v0/'
160
+ @settings['api_url'] = 'http://dev-wovn.io:3001'
161
161
  end
162
162
 
163
163
  if @settings['api_timeout_seconds'] == self.class.default_settings['api_timeout_seconds']
@@ -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.1'.freeze
2
+ VERSION = '2.6.0'.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
  #########################
@@ -6210,7 +6214,7 @@ module Wovnrb
6210
6214
  h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings)
6211
6215
 
6212
6216
  keys = Wovnrb::Lang::LANG.keys
6213
- assert_equal(39, keys.size)
6217
+ assert_equal(77, keys.size)
6214
6218
 
6215
6219
  for key in keys
6216
6220
  uri_without_scheme = h.remove_lang("wovn.io/#{key}", key)
@@ -6224,7 +6228,7 @@ module Wovnrb
6224
6228
  def test_remove_lang_path_with_nil_lang
6225
6229
  h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings)
6226
6230
  keys = Wovnrb::Lang::LANG.keys
6227
- assert_equal(39, keys.size)
6231
+ assert_equal(77, keys.size)
6228
6232
 
6229
6233
  uri_without_scheme = h.remove_lang('wovn.io', nil)
6230
6234
  assert_equal('wovn.io', uri_without_scheme)
@@ -6247,7 +6251,7 @@ module Wovnrb
6247
6251
  h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings('url_pattern' => 'query'))
6248
6252
 
6249
6253
  keys = Wovnrb::Lang::LANG.keys
6250
- assert_equal(39, keys.size)
6254
+ assert_equal(77, keys.size)
6251
6255
 
6252
6256
  for key in keys
6253
6257
  uri_without_scheme = h.remove_lang("wovn.io/?wovn=#{key}", key)
@@ -6262,7 +6266,7 @@ module Wovnrb
6262
6266
  sut = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings('url_pattern' => 'query', 'lang_param_name' => 'lang'))
6263
6267
 
6264
6268
  keys = Wovnrb::Lang::LANG.keys
6265
- assert_equal(39, keys.size)
6269
+ assert_equal(77, keys.size)
6266
6270
 
6267
6271
  for key in keys
6268
6272
  uri_without_custom_lang_param = "wovn.io/?wovn=#{key}"
@@ -6280,7 +6284,7 @@ module Wovnrb
6280
6284
  def test_remove_lang_query_with_nil_lang
6281
6285
  h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings('url_pattern' => 'query'))
6282
6286
  keys = Wovnrb::Lang::LANG.keys
6283
- assert_equal(39, keys.size)
6287
+ assert_equal(77, keys.size)
6284
6288
 
6285
6289
  uri_without_scheme = h.remove_lang('wovn.io', nil)
6286
6290
  assert_equal('wovn.io', uri_without_scheme)
@@ -6303,7 +6307,7 @@ module Wovnrb
6303
6307
  h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings('url_pattern' => 'subdomain'))
6304
6308
 
6305
6309
  keys = Wovnrb::Lang::LANG.keys
6306
- assert_equal(39, keys.size)
6310
+ assert_equal(77, keys.size)
6307
6311
 
6308
6312
  for key in keys
6309
6313
  uri_without_scheme = h.remove_lang("#{key.downcase}.wovn.io/", key)
@@ -6317,7 +6321,7 @@ module Wovnrb
6317
6321
  def test_remove_lang_subdomain_with_nil_lang
6318
6322
  h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings('url_pattern' => 'subdomain'))
6319
6323
  keys = Wovnrb::Lang::LANG.keys
6320
- assert_equal(39, keys.size)
6324
+ assert_equal(77, keys.size)
6321
6325
 
6322
6326
  uri_without_scheme = h.remove_lang('wovn.io', nil)
6323
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
@@ -6,7 +6,7 @@ module Wovnrb
6
6
  converter = prepare_html_converter('<html><body><a class="test">hello</a></body></html>', supported_langs: %w[en vi])
7
7
  converted_html, = converter.build_api_compatible_html
8
8
 
9
- expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><a class=\"test\">hello</a></body></html>"
9
+ expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><a class=\"test\">hello</a></body></html>"
10
10
  assert_equal(expected_html, converted_html)
11
11
  end
12
12
 
@@ -19,7 +19,7 @@ module Wovnrb
19
19
  converter = prepare_html_converter('<html><body><a class="test">hello</a></body></html>', settings)
20
20
  converted_html, = converter.build_api_compatible_html
21
21
 
22
- expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=lang&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?lang=vi\"></head><body><a class=\"test\">hello</a></body></html>"
22
+ expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=lang&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?lang=vi\"></head><body><a class=\"test\">hello</a></body></html>"
23
23
  assert_equal(expected_html, converted_html)
24
24
  end
25
25
 
@@ -28,7 +28,7 @@ module Wovnrb
28
28
  converter = prepare_html_converter('<html><body><p>' + long_string + '</p></body></html>', supported_langs: %w[en vi])
29
29
  converted_html, = converter.build_api_compatible_html
30
30
 
31
- expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><p>" + long_string + '</p></body></html>'
31
+ expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><p>" + long_string + '</p></body></html>'
32
32
  assert_equal(expected_html, converted_html)
33
33
  end
34
34
 
@@ -36,6 +36,7 @@ module Wovnrb
36
36
  html = [
37
37
  '<html><body>',
38
38
  '<p>Hello <span wovn-ignore>WOVN</span><p>',
39
+ '<p>Hello <span data-wovn-ignore>WOVN</span><p>',
39
40
  '<div><span class="ignore-me">should be ignored</span></div>',
40
41
  '<span>Have a nice day!</span>',
41
42
  '</body></html>'
@@ -44,7 +45,7 @@ module Wovnrb
44
45
  converter = prepare_html_converter(html, ignore_class: ['ignore-me'])
45
46
  converted_html, = converter.build_api_compatible_html
46
47
 
47
- expected_convert_html = "<html><head><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"fr\" href=\"http://my-site.com/?wovn=fr\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/?wovn=ja\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><p>Hello <span wovn-ignore=\"\"><!-- __wovn-backend-ignored-key-0 --></span></p><p></p><div><span class=\"ignore-me\"><!-- __wovn-backend-ignored-key-1 --></span></div><span>Have a nice day!</span></body></html>"
48
+ expected_convert_html = "<html lang=\"en\"><head><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"fr\" href=\"http://my-site.com/?wovn=fr\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/?wovn=ja\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><p>Hello <span wovn-ignore=\"\"><!-- __wovn-backend-ignored-key-0 --></span></p><p></p><p>Hello <span data-wovn-ignore=\"\"><!-- __wovn-backend-ignored-key-1 --></span></p><p></p><div><span class=\"ignore-me\"><!-- __wovn-backend-ignored-key-2 --></span></div><span>Have a nice day!</span></body></html>"
48
49
  assert_equal(expected_convert_html, converted_html)
49
50
  end
50
51
 
@@ -61,7 +62,7 @@ module Wovnrb
61
62
  converter = prepare_html_converter(html, ignore_class: [])
62
63
  converted_html, = converter.build_api_compatible_html
63
64
 
64
- expected_convert_html = "<html><head><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"fr\" href=\"http://my-site.com/?wovn=fr\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/?wovn=ja\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><form action=\"/test\" method=\"POST\"><!-- __wovn-backend-ignored-key-0 --></form></body></html>"
65
+ expected_convert_html = "<html lang=\"en\"><head><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"fr\" href=\"http://my-site.com/?wovn=fr\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/?wovn=ja\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><form action=\"/test\" method=\"POST\"><!-- __wovn-backend-ignored-key-0 --></form></body></html>"
65
66
  assert_equal(expected_convert_html, converted_html)
66
67
  end
67
68
 
@@ -69,6 +70,8 @@ module Wovnrb
69
70
  html = [
70
71
  '<html><body>',
71
72
  '<input id="user-id" type="hidden" value="secret-id">',
73
+ '<input id="password" type="hidden" value="secret-password">',
74
+ '<input id="something" type="hidden" value="">',
72
75
  '<input id="name" type="text" value="wovn.io">',
73
76
  '</body></html>'
74
77
  ].join
@@ -76,7 +79,15 @@ module Wovnrb
76
79
  converter = prepare_html_converter(html, ignore_class: [])
77
80
  converted_html, = converter.build_api_compatible_html
78
81
 
79
- expected_convert_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"fr\" href=\"http://my-site.com/?wovn=fr\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/?wovn=ja\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><input id=\"user-id\" type=\"hidden\" value=\"<!-- __wovn-backend-ignored-key-0 -->\"><input id=\"name\" type=\"text\" value=\"wovn.io\"></body></html>"
82
+ expected_convert_html = [
83
+ '<html lang="en"><head>',
84
+ "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"fr\" href=\"http://my-site.com/?wovn=fr\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/?wovn=ja\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body>",
85
+ '<input id="user-id" type="hidden" value="__wovn-backend-ignored-key-0">',
86
+ '<input id="password" type="hidden" value="__wovn-backend-ignored-key-1">',
87
+ '<input id="something" type="hidden" value="__wovn-backend-ignored-key-2">',
88
+ '<input id="name" type="text" value="wovn.io">',
89
+ '</body></html>'
90
+ ].join
80
91
  assert_equal(expected_convert_html, converted_html)
81
92
  end
82
93
 
@@ -84,7 +95,7 @@ module Wovnrb
84
95
  converter = prepare_html_converter('<html><body><a>hello</a></body></html>', supported_langs: %w[en vi])
85
96
  translated_html = converter.build
86
97
 
87
- expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><a>hello</a></body></html>"
98
+ expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><a>hello</a></body></html>"
88
99
  assert_equal(expected_html, translated_html)
89
100
  end
90
101
 
@@ -92,7 +103,7 @@ module Wovnrb
92
103
  converter = prepare_html_converter('<html><body><a>hello</a></body></html>', supported_langs: [])
93
104
  translated_html = converter.build
94
105
 
95
- expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script></head><body><a>hello</a></body></html>"
106
+ expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script></head><body><a>hello</a></body></html>"
96
107
  assert_equal(expected_html, translated_html)
97
108
  end
98
109
 
@@ -100,7 +111,7 @@ module Wovnrb
100
111
  converter = prepare_html_converter('<html><head><title>TITLE</title></head><body><a>hello</a></body></html>', supported_langs: %w[en vi])
101
112
  translated_html = converter.build
102
113
 
103
- expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><title>TITLE</title><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><a>hello</a></body></html>"
114
+ expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><title>TITLE</title><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><a>hello</a></body></html>"
104
115
  assert_equal(expected_html, translated_html)
105
116
  end
106
117
 
@@ -108,7 +119,7 @@ module Wovnrb
108
119
  converter = prepare_html_converter('<html>hello<a>world</a></html>', supported_langs: [])
109
120
  translated_html = converter.build
110
121
 
111
- expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script></head><body>hello<a>world</a></body></html>"
122
+ expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script></head><body>hello<a>world</a></body></html>"
112
123
  assert_equal(expected_html, translated_html)
113
124
  end
114
125
 
@@ -123,7 +134,7 @@ module Wovnrb
123
134
  converter = HtmlConverter.new(dom, store, headers)
124
135
  translated_html = converter.build
125
136
 
126
- expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/?wovn=ja\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body>hello<a>world</a></body></html>"
137
+ expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/?wovn=ja\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body>hello<a>world</a></body></html>"
127
138
  assert_equal(expected_html, translated_html)
128
139
  end
129
140
 
@@ -138,16 +149,22 @@ module Wovnrb
138
149
  converter = HtmlConverter.new(dom, store, headers)
139
150
  translated_html = converter.build
140
151
 
141
- expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=path&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/ja/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/vi/\"></head><body>hello<a>world</a></body></html>"
152
+ expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=path&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/ja/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/vi/\"></head><body>hello<a>world</a></body></html>"
142
153
  assert_equal(expected_html, translated_html)
143
154
  end
144
155
 
145
156
  def test_replace_snippet
146
- converter = prepare_html_converter('<html><head><script src="/a"></script><script src="//j.wovn.io/1" async="true"</head></html>')
157
+ converter = prepare_html_converter('<html><head>
158
+ <script src="/a"></script>
159
+ <script src="//j.wovn.io/1" async="true">
160
+ <script src="//j.wovn.io/1" data-wovnio="key=2wpv0n" async></script>
161
+ <script src="https//cdn.wovn.io/" data-wovnio="key=2wpv0n async></script>
162
+ <script src="https://wovn.global.ssl.fastly.net/widget/abcdef></script>
163
+ </head></html>')
147
164
  converter.send(:replace_snippet)
148
165
 
149
166
  expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><script src=\"/a\"></script></head><body></body></html>"
150
- assert_equal(expected_html, converter.send(:html))
167
+ assert_equal(expected_html.gsub(/\s+/, ''), converter.send(:html).gsub(/\s+/, ''))
151
168
  end
152
169
 
153
170
  def test_replace_hreflangs
@@ -158,18 +175,33 @@ module Wovnrb
158
175
  assert_equal(expected_html, converter.send(:html))
159
176
  end
160
177
 
161
- def test_inject_lang_html_tag
178
+ def test_inject_lang_html_tag_with_no_lang_in_html_tag
162
179
  settings = default_store_settings
163
180
  store = Wovnrb::Store.instance
164
181
  store.update_settings(settings)
165
182
 
166
183
  headers = Wovnrb::Headers.new(
167
- Wovnrb.get_env('url' => 'http://my-site.com/?wovn=ja'),
184
+ Wovnrb.get_env('url' => 'http://my-site.com/'),
168
185
  Wovnrb.get_settings(settings)
169
186
  )
170
187
  converter = HtmlConverter.new(get_dom('<html><body>hello</body></html>'), store, headers)
171
188
  converter.send(:inject_lang_html_tag)
172
- expected_html = '<html lang="ja"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body>hello</body></html>'
189
+ expected_html = '<html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body>hello</body></html>'
190
+ assert_equal(expected_html, converter.send(:html))
191
+ end
192
+
193
+ def test_inject_lang_html_tag_with_lang_in_html_tag
194
+ settings = default_store_settings
195
+ store = Wovnrb::Store.instance
196
+ store.update_settings(settings)
197
+
198
+ headers = Wovnrb::Headers.new(
199
+ Wovnrb.get_env('url' => 'http://my-site.com/'),
200
+ Wovnrb.get_settings(settings)
201
+ )
202
+ converter = HtmlConverter.new(get_dom('<html lang="th"><body>hello</body></html>'), store, headers)
203
+ converter.send(:inject_lang_html_tag)
204
+ expected_html = '<html lang="th"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body>hello</body></html>'
173
205
  assert_equal(expected_html, converter.send(:html))
174
206
  end
175
207