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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c90040c4f9e8e77ba0a9cf1f7cde4abc204233dd94ed7c8d70baf9a27de4c11c
4
- data.tar.gz: 5f25419537d1477fa55b654d3fcaa7325036828b454ad5ffb24994556f68868a
3
+ metadata.gz: 21db13334fd0ceefeba7a6d0f23a13c035d8ca2e97796f2c5342659369b4a5d9
4
+ data.tar.gz: 6453345eb832513563decad6050d3b44d2f100c203c8e0f3f9cbbd8d6cc833b5
5
5
  SHA512:
6
- metadata.gz: 7d913ff2f9f2e9e1142ce64b95b88ddcf19296486d22cdbbd6ad8f24977a4da293fba7238ae092ceae7731598de37955b91056263d724dc917916272d004757c
7
- data.tar.gz: 005fa22c1b8874c1dd55e6aca6e9d4af20ced80cc17ba538460e5aabc0646f37ef2a21e8230b77572f60e8c83a0af83c418730a4cdabbeb90547b753a2eeab56
6
+ metadata.gz: a43841cb1cd9a2fcda906663b8c8a5d46e751e37d202591f42d7eea17603df6523e8eca82538c49b7db20e9d3b1d8fd51d5e64e482ee71422384f109f699eef3
7
+ data.tar.gz: 6e87c0aa31e2b6853d295e600ba6fef63beb3cc5d0154a872e19a51cdc3a6d7828b1bc7ea21346dfee72c888576885256d11c84e1085608e2a5c55e693312359
@@ -101,6 +101,8 @@ Metrics/BlockNesting:
101
101
  # Configuration parameters: CountComments.
102
102
  Metrics/ClassLength:
103
103
  Max: 4997
104
+ Exclude:
105
+ - 'test/lib/headers_test.rb'
104
106
 
105
107
  # Offense count: 14
106
108
  Metrics/CyclomaticComplexity:
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. query
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.6. ignore_class
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.7. translate_fragment
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
@@ -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}?wovn=#{lang_code}"
138
- else @env['REQUEST_URI'] !~ /(\?|&)wovn=/
139
- location = "#{location}&wovn=#{lang_code}"
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
- return uri.sub(/(^|\?|&)wovn=#{lang_code}(&|$)/, '\1').gsub(/(\?|&)$/, '')
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'] += "wovn=#{lang_code}"
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'
@@ -91,7 +91,9 @@ module Wovnrb
91
91
  def add_lang_code(href, pattern, headers)
92
92
  return href if href =~ /^(#.*)?$/
93
93
 
94
- code_to_add = Store.instance.settings['custom_lang_aliases'][@lang_code] || @lang_code
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}wovn=#{lang_code}\\1")
217
+ href.sub(/(#|$)/, "#{query_separator}#{lang_param_name}=#{lang_code}\\1")
216
218
  end
217
219
  end
218
220
  end
@@ -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?(Wovnrb::Interceptor)
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
- app.middleware.insert_before(0, Wovnrb::Interceptor) unless Wovnrb.middleware_inserted?(app)
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
@@ -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'] = "((\\?.*&)|\\?)wovn=(?<lang>[^&]+)(&|$)"
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
@@ -1,3 +1,3 @@
1
1
  module Wovnrb
2
- VERSION = '2.1.0'.freeze
2
+ VERSION = '2.2.0'.freeze
3
3
  end
@@ -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,
@@ -1,7 +1,7 @@
1
1
  require 'test_helper'
2
2
 
3
3
  module Wovnrb
4
- class LangTest < WovnMiniTest
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 test_redirect_location_without_custom_lang_code
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
@@ -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&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&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><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
+ 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&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>"
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&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&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><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>'
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&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&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>"
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>"
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&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&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>"
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>"
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&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&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>"
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>"
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&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&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>"
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>"
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&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;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&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>"
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&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&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>"
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>"
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&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;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&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>"
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&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&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>"
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>"
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&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=path&amp;langCodeAliases={}&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>"
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>"
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&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;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&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>"
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
- Wovnrb.get_settings(settings)
190
+ store.settings
178
191
  )
179
192
 
180
193
  [store, headers]
@@ -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
@@ -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.1.0
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-06-21 00:00:00.000000000 Z
12
+ date: 2019-07-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport