wovnrb 2.1.0 → 2.2.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.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +2 -0
- data/README.md +14 -3
- data/lib/wovnrb/api_translator.rb +5 -0
- data/lib/wovnrb/headers.rb +7 -5
- data/lib/wovnrb/lang.rb +7 -5
- data/lib/wovnrb/railtie.rb +9 -3
- data/lib/wovnrb/services/html_converter.rb +2 -0
- data/lib/wovnrb/store.rb +2 -1
- data/lib/wovnrb/version.rb +1 -1
- data/test/lib/api_translator_test.rb +3 -1
- data/test/lib/headers_test.rb +50 -2
- data/test/lib/lang_test.rb +12 -0
- data/test/lib/services/html_converter_test.rb +26 -13
- data/test/lib/store_test.rb +22 -0
- data/test/test_helper.rb +1 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 21db13334fd0ceefeba7a6d0f23a13c035d8ca2e97796f2c5342659369b4a5d9
|
4
|
+
data.tar.gz: 6453345eb832513563decad6050d3b44d2f100c203c8e0f3f9cbbd8d6cc833b5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a43841cb1cd9a2fcda906663b8c8a5d46e751e37d202591f42d7eea17603df6523e8eca82538c49b7db20e9d3b1d8fd51d5e64e482ee71422384f109f699eef3
|
7
|
+
data.tar.gz: 6e87c0aa31e2b6853d295e600ba6fef63beb3cc5d0154a872e19a51cdc3a6d7828b1bc7ea21346dfee72c888576885256d11c84e1085608e2a5c55e693312359
|
data/.rubocop_todo.yml
CHANGED
data/README.md
CHANGED
@@ -78,6 +78,7 @@ project_token | yes | ''
|
|
78
78
|
default_lang | yes | 'en'
|
79
79
|
supported_langs | yes | ['en']
|
80
80
|
url_pattern | yes | 'path'
|
81
|
+
lang_param_name | | 'wovn'
|
81
82
|
query | | []
|
82
83
|
ignore_class | | []
|
83
84
|
translate_fragment | | true
|
@@ -126,7 +127,17 @@ parameters | Translated page's URL | Notes
|
|
126
127
|
|
127
128
|
https://wovn.io/contact
|
128
129
|
|
129
|
-
### 2.5
|
130
|
+
### 2.5 lang_param_name
|
131
|
+
This parameter is only valid for when `url_pattern_name` is set to `'query'`.
|
132
|
+
|
133
|
+
It allows you to set the query parameter name for declaring the language of the
|
134
|
+
page. The default value for this setting is `'wovn'`, such that a page URL in
|
135
|
+
translated language English has the form
|
136
|
+
`https://my-website.com/index.php?wovn=en`. If you instead set the value to
|
137
|
+
`'lang'`, then the later URL example would have the form
|
138
|
+
`https://my-website.com/index.php?lang=en`.
|
139
|
+
|
140
|
+
### 2.6. query
|
130
141
|
|
131
142
|
WOVN.io ignores query parameters when searching a translated page. If you want to add a query parameter to translated page's URL, you should configure the `query` parameter. (You need to configure WOVN.io too)
|
132
143
|
|
@@ -140,11 +151,11 @@ If the `default_lang` is 'en', and the query is set to 'os', the above URL will
|
|
140
151
|
|
141
152
|
https://wovn.io/contact?os=mac
|
142
153
|
|
143
|
-
### 2.
|
154
|
+
### 2.7. ignore_class
|
144
155
|
|
145
156
|
This sets "Ignore class" which prevents WOVN from translating HTML elements that have a class contained in this array.
|
146
157
|
|
147
|
-
### 2.
|
158
|
+
### 2.8. translate_fragment
|
148
159
|
|
149
160
|
This option allows to disable translating partial HTML content. By default,
|
150
161
|
partial HTML content is translated but no widget snippet is added. Set
|
@@ -87,6 +87,7 @@ module Wovnrb
|
|
87
87
|
'token' => token,
|
88
88
|
'lang_code' => lang_code,
|
89
89
|
'url_pattern' => url_pattern,
|
90
|
+
'lang_param_name' => lang_param_name,
|
90
91
|
'product' => 'WOVN.rb',
|
91
92
|
'version' => VERSION,
|
92
93
|
'body' => body
|
@@ -131,6 +132,10 @@ module Wovnrb
|
|
131
132
|
@store.settings['url_pattern']
|
132
133
|
end
|
133
134
|
|
135
|
+
def lang_param_name
|
136
|
+
@store.settings['lang_param_name']
|
137
|
+
end
|
138
|
+
|
134
139
|
def custom_lang_aliases
|
135
140
|
@store.settings['custom_lang_aliases']
|
136
141
|
end
|
data/lib/wovnrb/headers.rb
CHANGED
@@ -133,10 +133,11 @@ module Wovnrb
|
|
133
133
|
location = url
|
134
134
|
case @settings['url_pattern']
|
135
135
|
when 'query'
|
136
|
+
lang_param_name = @settings['lang_param_name']
|
136
137
|
if location !~ /\?/
|
137
|
-
location = "#{location}
|
138
|
-
else @env['REQUEST_URI'] !~ /(\?|&)
|
139
|
-
location = "#{location}
|
138
|
+
location = "#{location}?#{lang_param_name}=#{lang_code}"
|
139
|
+
else @env['REQUEST_URI'] !~ /(\?|&)#{lang_param_name}=/
|
140
|
+
location = "#{location}&#{lang_param_name}=#{lang_code}"
|
140
141
|
end
|
141
142
|
when 'subdomain'
|
142
143
|
location = "#{lang_code.downcase}.#{location}"
|
@@ -187,7 +188,8 @@ module Wovnrb
|
|
187
188
|
|
188
189
|
case @settings['url_pattern']
|
189
190
|
when 'query'
|
190
|
-
|
191
|
+
lang_param_name = @settings['lang_param_name']
|
192
|
+
return uri.sub(/(^|\?|&)#{lang_param_name}=#{lang_code}(&|$)/, '\1').gsub(/(\?|&)$/, '')
|
191
193
|
when 'subdomain'
|
192
194
|
rp = Regexp.new('(^|(//))' + lang_code + '\.', 'i')
|
193
195
|
return uri.sub(rp, '\1')
|
@@ -208,7 +210,7 @@ module Wovnrb
|
|
208
210
|
else
|
209
211
|
'?'
|
210
212
|
end
|
211
|
-
headers['Location'] += "
|
213
|
+
headers['Location'] += "#{@settings['lang_param_name']}=#{lang_code}"
|
212
214
|
when 'subdomain'
|
213
215
|
headers['Location'] = headers['Location'].sub(/\/\/([^.]+)/, '//' + lang_code + '.\1')
|
214
216
|
# when 'path'
|
data/lib/wovnrb/lang.rb
CHANGED
@@ -91,7 +91,9 @@ module Wovnrb
|
|
91
91
|
def add_lang_code(href, pattern, headers)
|
92
92
|
return href if href =~ /^(#.*)?$/
|
93
93
|
|
94
|
-
|
94
|
+
settings = Store.instance.settings
|
95
|
+
code_to_add = settings['custom_lang_aliases'][@lang_code] || @lang_code
|
96
|
+
lang_param_name = settings['lang_param_name']
|
95
97
|
# absolute links
|
96
98
|
new_href = href
|
97
99
|
if href && href =~ /^(https?:)?\/\//i
|
@@ -115,7 +117,7 @@ module Wovnrb
|
|
115
117
|
href.sub(/(\/\/)([^\.]*)/, '\1' + code_to_add.downcase + '.' + '\2')
|
116
118
|
end
|
117
119
|
when 'query'
|
118
|
-
new_href = add_query_lang_code(href, code_to_add)
|
120
|
+
new_href = add_query_lang_code(href, code_to_add, lang_param_name)
|
119
121
|
else # path
|
120
122
|
new_href = href.sub(/([^\.]*\.[^\/]*)(\/|$)/, '\1/' + code_to_add + '/')
|
121
123
|
end
|
@@ -139,7 +141,7 @@ module Wovnrb
|
|
139
141
|
lang_url + current_dir + '/' + href
|
140
142
|
end
|
141
143
|
when 'query'
|
142
|
-
new_href = add_query_lang_code(href, code_to_add)
|
144
|
+
new_href = add_query_lang_code(href, code_to_add, lang_param_name)
|
143
145
|
else # path
|
144
146
|
if href =~ /^\//
|
145
147
|
new_href = '/' + code_to_add + href
|
@@ -209,10 +211,10 @@ module Wovnrb
|
|
209
211
|
langs
|
210
212
|
end
|
211
213
|
|
212
|
-
def add_query_lang_code(href, lang_code)
|
214
|
+
def add_query_lang_code(href, lang_code, lang_param_name)
|
213
215
|
query_separator = href =~ /\?/ ? '&' : '?'
|
214
216
|
|
215
|
-
href.sub(/(#|$)/, "#{query_separator}
|
217
|
+
href.sub(/(#|$)/, "#{query_separator}#{lang_param_name}=#{lang_code}\\1")
|
216
218
|
end
|
217
219
|
end
|
218
220
|
end
|
data/lib/wovnrb/railtie.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Wovnrb
|
2
|
-
def self.middleware_inserted?(app)
|
2
|
+
def self.middleware_inserted?(app, middleware)
|
3
3
|
app.middleware.send(:operations).each do |_, middlewares, _|
|
4
|
-
return true if middlewares.include?(
|
4
|
+
return true if middlewares.include?(middleware)
|
5
5
|
end
|
6
6
|
|
7
7
|
false
|
@@ -9,7 +9,13 @@ module Wovnrb
|
|
9
9
|
|
10
10
|
class Railtie < Rails::Railtie
|
11
11
|
initializer 'wovnrb.configure_rails_initialization' do |app|
|
12
|
-
|
12
|
+
unless Wovnrb.middleware_inserted?(app, Wovnrb::Interceptor)
|
13
|
+
if defined?(Rack::Deflater) && Wovnrb.middleware_inserted?(app, Rack::Deflater)
|
14
|
+
app.middleware.insert_after(Rack::Deflater, Wovnrb::Interceptor)
|
15
|
+
else
|
16
|
+
app.middleware.insert_before(0, Wovnrb::Interceptor)
|
17
|
+
end
|
18
|
+
end
|
13
19
|
end
|
14
20
|
end
|
15
21
|
end
|
@@ -176,6 +176,7 @@ module Wovnrb
|
|
176
176
|
default_lang = @store.settings['default_lang']
|
177
177
|
url_pattern = @store.settings['url_pattern']
|
178
178
|
lang_code_aliases_json = JSON.generate(@store.settings['custom_lang_aliases'])
|
179
|
+
lang_param_name = @store.settings['lang_param_name']
|
179
180
|
|
180
181
|
[
|
181
182
|
"key=#{token}",
|
@@ -184,6 +185,7 @@ module Wovnrb
|
|
184
185
|
"defaultLang=#{default_lang}",
|
185
186
|
"urlPattern=#{url_pattern}",
|
186
187
|
"langCodeAliases=#{lang_code_aliases_json}",
|
188
|
+
"langParamName=#{lang_param_name}",
|
187
189
|
"version=WOVN.rb_#{VERSION}"
|
188
190
|
].join('&')
|
189
191
|
end
|
data/lib/wovnrb/store.rb
CHANGED
@@ -20,6 +20,7 @@ module Wovnrb
|
|
20
20
|
'ignore_globs' => [],
|
21
21
|
'url_pattern' => 'path',
|
22
22
|
'url_pattern_reg' => "/(?<lang>[^/.?]+)",
|
23
|
+
'lang_param_name' => 'wovn',
|
23
24
|
'query' => [],
|
24
25
|
'ignore_class' => [],
|
25
26
|
'api_url' => 'https://wovn.global.ssl.fastly.net/v0/',
|
@@ -143,7 +144,7 @@ module Wovnrb
|
|
143
144
|
if @settings['url_pattern'] == 'path'
|
144
145
|
@settings['url_pattern_reg'] = "/(?<lang>[^/.?]+)"
|
145
146
|
elsif @settings['url_pattern'] == 'query'
|
146
|
-
@settings['url_pattern_reg'] = "((\\?.*&)|\\?)
|
147
|
+
@settings['url_pattern_reg'] = "((\\?.*&)|\\?)#{@settings['lang_param_name']}=(?<lang>[^&]+)(&|$)"
|
147
148
|
elsif @settings['url_pattern'] == 'subdomain'
|
148
149
|
@settings['url_pattern_reg'] = "^(?<lang>[^.]+)\."
|
149
150
|
end
|
data/lib/wovnrb/version.rb
CHANGED
@@ -44,7 +44,8 @@ module Wovnrb
|
|
44
44
|
'custom_lang_aliases' => { 'ja' => 'Japanese' },
|
45
45
|
'default_lang' => 'en',
|
46
46
|
'url_pattern' => 'subdomain',
|
47
|
-
'url_pattern_reg' => '^(?<lang>[^.]+).'
|
47
|
+
'url_pattern_reg' => '^(?<lang>[^.]+).',
|
48
|
+
'lang_param_name' => 'lang'
|
48
49
|
}
|
49
50
|
store = Wovnrb::Store.instance
|
50
51
|
store.update_settings(settings)
|
@@ -106,6 +107,7 @@ module Wovnrb
|
|
106
107
|
'token' => '123456',
|
107
108
|
'lang_code' => 'fr',
|
108
109
|
'url_pattern' => 'subdomain',
|
110
|
+
'lang_param_name' => 'lang',
|
109
111
|
'product' => 'WOVN.rb',
|
110
112
|
'version' => VERSION,
|
111
113
|
'body' => original_html,
|
data/test/lib/headers_test.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
module Wovnrb
|
4
|
-
class
|
4
|
+
class HeadersTest < WovnMiniTest
|
5
5
|
#########################
|
6
6
|
# INITIALIZE
|
7
7
|
#########################
|
@@ -151,7 +151,7 @@ module Wovnrb
|
|
151
151
|
assert_equal('http://ja.wovn.io/contact', h.redirect_location('ja'))
|
152
152
|
end
|
153
153
|
|
154
|
-
def
|
154
|
+
def test_redirect_location_with_custom_lang_code
|
155
155
|
Store.instance.update_settings('custom_lang_aliases' => { 'ja' => 'staging-ja' })
|
156
156
|
h = Wovnrb::Headers.new(
|
157
157
|
Wovnrb.get_env('url' => 'http://wovn.io/contact', 'HTTP_X_FORWARDED_HOST' => 'wovn.io'),
|
@@ -160,6 +160,24 @@ module Wovnrb
|
|
160
160
|
assert_equal('http://staging-ja.wovn.io/contact', h.redirect_location('ja'))
|
161
161
|
end
|
162
162
|
|
163
|
+
def test_redirect_location_without_lang_param_name
|
164
|
+
Store.instance.update_settings('url_pattern' => 'query')
|
165
|
+
sut = Wovnrb::Headers.new(
|
166
|
+
Wovnrb.get_env('url' => 'http://wovn.io/contact', 'HTTP_X_FORWARDED_HOST' => 'wovn.io'),
|
167
|
+
Store.instance.settings
|
168
|
+
)
|
169
|
+
assert_equal('http://wovn.io/contact?wovn=ja', sut.redirect_location('ja'))
|
170
|
+
end
|
171
|
+
|
172
|
+
def test_redirect_location_with_lang_param_name
|
173
|
+
Store.instance.update_settings('url_pattern' => 'query', 'lang_param_name' => 'lang')
|
174
|
+
sut = Wovnrb::Headers.new(
|
175
|
+
Wovnrb.get_env('url' => 'http://wovn.io/contact', 'HTTP_X_FORWARDED_HOST' => 'wovn.io'),
|
176
|
+
Store.instance.settings
|
177
|
+
)
|
178
|
+
assert_equal('http://wovn.io/contact?lang=ja', sut.redirect_location('ja'))
|
179
|
+
end
|
180
|
+
|
163
181
|
#########################
|
164
182
|
# REQUEST_OUT
|
165
183
|
#########################
|
@@ -371,6 +389,17 @@ module Wovnrb
|
|
371
389
|
assert_equal('ja', headers['wovnrb.target_lang'])
|
372
390
|
end
|
373
391
|
|
392
|
+
def test_out_with_wovn_target_lang_header_using_query_with_lang_param_name
|
393
|
+
Store.instance.update_settings('url_pattern' => 'query', 'lang_param_name' => 'lang')
|
394
|
+
sut = Wovnrb::Headers.new(
|
395
|
+
Wovnrb.get_env('REQUEST_URI' => 'test?lang=ja', 'HTTP_REFERER' => 'http://wovn.io/test'),
|
396
|
+
Store.instance.settings
|
397
|
+
)
|
398
|
+
headers = sut.out(sut.request_out('ja'))
|
399
|
+
|
400
|
+
assert_equal('ja', headers['wovnrb.target_lang'])
|
401
|
+
end
|
402
|
+
|
374
403
|
#########################
|
375
404
|
# GET SETTINGS
|
376
405
|
#########################
|
@@ -6186,6 +6215,25 @@ module Wovnrb
|
|
6186
6215
|
end
|
6187
6216
|
end
|
6188
6217
|
|
6218
|
+
def test_remove_lang_query_with_lang_param_name
|
6219
|
+
sut = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings('url_pattern' => 'query', 'lang_param_name' => 'lang'))
|
6220
|
+
|
6221
|
+
keys = Wovnrb::Lang::LANG.keys
|
6222
|
+
assert_equal(39, keys.size)
|
6223
|
+
|
6224
|
+
for key in keys
|
6225
|
+
uri_without_custom_lang_param = "wovn.io/?wovn=#{key}"
|
6226
|
+
unchanged_uri = sut.remove_lang(uri_without_custom_lang_param, key)
|
6227
|
+
assert_equal(uri_without_custom_lang_param, unchanged_uri)
|
6228
|
+
|
6229
|
+
uri_without_scheme = sut.remove_lang("wovn.io/?lang=#{key}", key)
|
6230
|
+
assert_equal('wovn.io/', uri_without_scheme)
|
6231
|
+
|
6232
|
+
uri_with_scheme = sut.remove_lang("https://wovn.io?lang=#{key}", key)
|
6233
|
+
assert_equal('https://wovn.io', uri_with_scheme)
|
6234
|
+
end
|
6235
|
+
end
|
6236
|
+
|
6189
6237
|
def test_remove_lang_query_with_nil_lang
|
6190
6238
|
h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings('url_pattern' => 'query'))
|
6191
6239
|
keys = Wovnrb::Lang::LANG.keys
|
data/test/lib/lang_test.rb
CHANGED
@@ -233,6 +233,18 @@ module Wovnrb
|
|
233
233
|
assert_equal('http://fr.home.google.com', lang.add_lang_code('http://home.google.com', 'subdomain', headers))
|
234
234
|
end
|
235
235
|
|
236
|
+
def test_add_lang_code_with_query_and_lang_param_name
|
237
|
+
Store.instance.update_settings('url_pattern_name' => 'query', 'lang_param_name' => 'lang')
|
238
|
+
|
239
|
+
sut = Lang.new('fr')
|
240
|
+
headers = Wovnrb::Headers.new(
|
241
|
+
Wovnrb.get_env('url' => 'http://google.com'),
|
242
|
+
Store.instance.settings
|
243
|
+
)
|
244
|
+
|
245
|
+
assert_equal('http://google.com?hey=yo&lang=fr', sut.add_lang_code('http://google.com?hey=yo', 'query', headers))
|
246
|
+
end
|
247
|
+
|
236
248
|
def test_add_lang_code_absolute_query_no_query
|
237
249
|
lang = Lang.new('fr')
|
238
250
|
headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://google.com'), Wovnrb.get_settings)
|
@@ -6,7 +6,20 @@ 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&backend=true&currentLang=en&defaultLang=en&urlPattern=query&langCodeAliases={}&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><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&backend=true&currentLang=en&defaultLang=en&urlPattern=query&langCodeAliases={}&langParamName=wovn&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
|
+
assert_equal(expected_html, converted_html)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_build_api_compatible_html_with_custom_lang_param_name
|
14
|
+
settings = {
|
15
|
+
supported_langs: %w[en vi],
|
16
|
+
url_lang_pattern: 'query',
|
17
|
+
lang_param_name: 'lang'
|
18
|
+
}
|
19
|
+
converter = prepare_html_converter('<html><body><a class="test">hello</a></body></html>', settings)
|
20
|
+
converted_html, = converter.build_api_compatible_html
|
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&backend=true&currentLang=en&defaultLang=en&urlPattern=query&langCodeAliases={}&langParamName=lang&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>"
|
10
23
|
assert_equal(expected_html, converted_html)
|
11
24
|
end
|
12
25
|
|
@@ -15,7 +28,7 @@ module Wovnrb
|
|
15
28
|
converter = prepare_html_converter('<html><body><p>' + long_string + '</p></body></html>', supported_langs: %w[en vi])
|
16
29
|
converted_html, = converter.build_api_compatible_html
|
17
30
|
|
18
|
-
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&backend=true&currentLang=en&defaultLang=en&urlPattern=query&langCodeAliases={}&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><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&backend=true&currentLang=en&defaultLang=en&urlPattern=query&langCodeAliases={}&langParamName=wovn&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>'
|
19
32
|
assert_equal(expected_html, converted_html)
|
20
33
|
end
|
21
34
|
|
@@ -31,7 +44,7 @@ module Wovnrb
|
|
31
44
|
converter = prepare_html_converter(html, ignore_class: ['ignore-me'])
|
32
45
|
converted_html, = converter.build_api_compatible_html
|
33
46
|
|
34
|
-
expected_convert_html = "<html><head><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&backend=true&currentLang=en&defaultLang=en&urlPattern=query&langCodeAliases={}&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>"
|
47
|
+
expected_convert_html = "<html><head><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&backend=true&currentLang=en&defaultLang=en&urlPattern=query&langCodeAliases={}&langParamName=wovn&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>"
|
35
48
|
assert_equal(expected_convert_html, converted_html)
|
36
49
|
end
|
37
50
|
|
@@ -48,7 +61,7 @@ module Wovnrb
|
|
48
61
|
converter = prepare_html_converter(html, ignore_class: [])
|
49
62
|
converted_html, = converter.build_api_compatible_html
|
50
63
|
|
51
|
-
expected_convert_html = "<html><head><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&backend=true&currentLang=en&defaultLang=en&urlPattern=query&langCodeAliases={}&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>"
|
64
|
+
expected_convert_html = "<html><head><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&backend=true&currentLang=en&defaultLang=en&urlPattern=query&langCodeAliases={}&langParamName=wovn&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>"
|
52
65
|
assert_equal(expected_convert_html, converted_html)
|
53
66
|
end
|
54
67
|
|
@@ -63,7 +76,7 @@ module Wovnrb
|
|
63
76
|
converter = prepare_html_converter(html, ignore_class: [])
|
64
77
|
converted_html, = converter.build_api_compatible_html
|
65
78
|
|
66
|
-
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&backend=true&currentLang=en&defaultLang=en&urlPattern=query&langCodeAliases={}&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>"
|
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&backend=true&currentLang=en&defaultLang=en&urlPattern=query&langCodeAliases={}&langParamName=wovn&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>"
|
67
80
|
assert_equal(expected_convert_html, converted_html)
|
68
81
|
end
|
69
82
|
|
@@ -71,7 +84,7 @@ module Wovnrb
|
|
71
84
|
converter = prepare_html_converter('<html><body><a>hello</a></body></html>', supported_langs: %w[en vi])
|
72
85
|
translated_html = converter.build
|
73
86
|
|
74
|
-
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&backend=true&currentLang=en&defaultLang=en&urlPattern=query&langCodeAliases={}&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>"
|
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&backend=true&currentLang=en&defaultLang=en&urlPattern=query&langCodeAliases={}&langParamName=wovn&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>"
|
75
88
|
assert_equal(expected_html, translated_html)
|
76
89
|
end
|
77
90
|
|
@@ -79,7 +92,7 @@ module Wovnrb
|
|
79
92
|
converter = prepare_html_converter('<html><body><a>hello</a></body></html>', supported_langs: [])
|
80
93
|
translated_html = converter.build
|
81
94
|
|
82
|
-
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&backend=true&currentLang=en&defaultLang=en&urlPattern=query&langCodeAliases={}&version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script></head><body><a>hello</a></body></html>"
|
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&backend=true&currentLang=en&defaultLang=en&urlPattern=query&langCodeAliases={}&langParamName=wovn&version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script></head><body><a>hello</a></body></html>"
|
83
96
|
assert_equal(expected_html, translated_html)
|
84
97
|
end
|
85
98
|
|
@@ -87,7 +100,7 @@ module Wovnrb
|
|
87
100
|
converter = prepare_html_converter('<html><head><title>TITLE</title></head><body><a>hello</a></body></html>', supported_langs: %w[en vi])
|
88
101
|
translated_html = converter.build
|
89
102
|
|
90
|
-
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&backend=true&currentLang=en&defaultLang=en&urlPattern=query&langCodeAliases={}&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>"
|
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&backend=true&currentLang=en&defaultLang=en&urlPattern=query&langCodeAliases={}&langParamName=wovn&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>"
|
91
104
|
assert_equal(expected_html, translated_html)
|
92
105
|
end
|
93
106
|
|
@@ -95,7 +108,7 @@ module Wovnrb
|
|
95
108
|
converter = prepare_html_converter('<html>hello<a>world</a></html>', supported_langs: [])
|
96
109
|
translated_html = converter.build
|
97
110
|
|
98
|
-
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&backend=true&currentLang=en&defaultLang=en&urlPattern=query&langCodeAliases={}&version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script></head><body>hello<a>world</a></body></html>"
|
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&backend=true&currentLang=en&defaultLang=en&urlPattern=query&langCodeAliases={}&langParamName=wovn&version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script></head><body>hello<a>world</a></body></html>"
|
99
112
|
assert_equal(expected_html, translated_html)
|
100
113
|
end
|
101
114
|
|
@@ -110,7 +123,7 @@ module Wovnrb
|
|
110
123
|
converter = HtmlConverter.new(dom, store, headers)
|
111
124
|
translated_html = converter.build
|
112
125
|
|
113
|
-
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&backend=true&currentLang=en&defaultLang=en&urlPattern=query&langCodeAliases={}&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>"
|
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&backend=true&currentLang=en&defaultLang=en&urlPattern=query&langCodeAliases={}&langParamName=wovn&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>"
|
114
127
|
assert_equal(expected_html, translated_html)
|
115
128
|
end
|
116
129
|
|
@@ -125,7 +138,7 @@ module Wovnrb
|
|
125
138
|
converter = HtmlConverter.new(dom, store, headers)
|
126
139
|
translated_html = converter.build
|
127
140
|
|
128
|
-
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&backend=true&currentLang=en&defaultLang=en&urlPattern=path&langCodeAliases={}&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>"
|
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&backend=true&currentLang=en&defaultLang=en&urlPattern=path&langCodeAliases={}&langParamName=wovn&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>"
|
129
142
|
assert_equal(expected_html, translated_html)
|
130
143
|
end
|
131
144
|
|
@@ -133,7 +146,7 @@ module Wovnrb
|
|
133
146
|
converter = prepare_html_converter('<html><head><script src="/a"></script><script src="//j.wovn.io/1" async="true"</head></html>')
|
134
147
|
converter.send(:replace_snippet)
|
135
148
|
|
136
|
-
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&backend=true&currentLang=en&defaultLang=en&urlPattern=query&langCodeAliases={}&version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><script src=\"/a\"></script></head><body></body></html>"
|
149
|
+
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&backend=true&currentLang=en&defaultLang=en&urlPattern=query&langCodeAliases={}&langParamName=wovn&version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><script src=\"/a\"></script></head><body></body></html>"
|
137
150
|
assert_equal(expected_html, converter.send(:html))
|
138
151
|
end
|
139
152
|
|
@@ -174,7 +187,7 @@ module Wovnrb
|
|
174
187
|
|
175
188
|
headers = Wovnrb::Headers.new(
|
176
189
|
Wovnrb.get_env('url' => 'http://my-site.com'),
|
177
|
-
|
190
|
+
store.settings
|
178
191
|
)
|
179
192
|
|
180
193
|
[store, headers]
|
data/test/lib/store_test.rb
CHANGED
@@ -55,6 +55,28 @@ module Wovnrb
|
|
55
55
|
assert_equal('query', s.settings['url_pattern'])
|
56
56
|
end
|
57
57
|
|
58
|
+
def test_settings_url_pattern_query_with_lang_param_name
|
59
|
+
sut = Wovnrb::Store.instance
|
60
|
+
|
61
|
+
sut.update_settings('url_pattern' => 'query', 'lang_param_name' => 'lang')
|
62
|
+
|
63
|
+
assert_equal('((\\?.*&)|\\?)lang=(?<lang>[^&]+)(&|$)', sut.settings['url_pattern_reg'])
|
64
|
+
assert_equal('query', sut.settings['url_pattern'])
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_lang_param_name_wovn_by_default
|
68
|
+
sut = Wovnrb::Store.instance
|
69
|
+
|
70
|
+
assert_equal('wovn', sut.settings['lang_param_name'])
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_lang_param_name_update
|
74
|
+
sut = Wovnrb::Store.instance
|
75
|
+
|
76
|
+
sut.update_settings('lang_param_name' => 'lang')
|
77
|
+
assert_equal('lang', sut.settings['lang_param_name'])
|
78
|
+
end
|
79
|
+
|
58
80
|
def test_invalid_settings
|
59
81
|
mock = LogMock.mock_log
|
60
82
|
store = Wovnrb::Store.instance
|
data/test/test_helper.rb
CHANGED
@@ -63,6 +63,7 @@ module Wovnrb
|
|
63
63
|
settings['project_token'] = 'OHYx9'
|
64
64
|
settings['url_pattern'] = 'path'
|
65
65
|
settings['url_pattern_reg'] = '/(?<lang>[^/.?]+)'
|
66
|
+
settings['lang_param_name'] = 'wovn'
|
66
67
|
settings['query'] = []
|
67
68
|
settings['api_url'] = 'http://localhost/v0/values'
|
68
69
|
settings['default_lang'] = 'en'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wovnrb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Sandford
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-
|
12
|
+
date: 2019-07-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|