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 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