wovnrb 2.1.0 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|