wovnrb 3.4.0 → 3.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +5 -0
- data/lib/wovnrb/headers.rb +4 -4
- data/lib/wovnrb/helpers/nokogumbo_helper.rb +1 -1
- data/lib/wovnrb/lang.rb +3 -3
- data/lib/wovnrb/services/html_converter.rb +4 -0
- data/lib/wovnrb/version.rb +1 -1
- data/lib/wovnrb.rb +3 -3
- data/test/lib/services/html_converter_test.rb +2 -2
- data/test/test_helper.rb +1 -1
- data/wovnrb.gemspec +3 -2
- metadata +26 -31
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 964d0d3b7325badb2202f50fe61b2a82554138346c183c0784b313c683aa26c8
|
|
4
|
+
data.tar.gz: b622aaf71523728ae235d8ba1d6de060c906970dbc471a0408de8e274a545482
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3ba07bb7792de8c7e2f8e53128cc69b5e5a22b7cdbeb87ec7d87f7d026fac2a3907f838e9f88234c237b119aed8ee66aa7980d79f86db3391619422ce7254a17
|
|
7
|
+
data.tar.gz: c285d5d65556fa7953345f38c295250546dc041bea372b32ec559d7a44ef9783b8b9c36ced77b24b464dbcccf783ffd2994680e720bb147fe162080c258b20bd
|
data/.rubocop.yml
CHANGED
data/lib/wovnrb/headers.rb
CHANGED
|
@@ -18,11 +18,11 @@ module Wovnrb
|
|
|
18
18
|
end
|
|
19
19
|
unless @env.key?('REQUEST_URI')
|
|
20
20
|
# Add '/' to PATH_INFO as a possible fix for pow server
|
|
21
|
-
@env['REQUEST_URI'] = (@env['PATH_INFO']
|
|
21
|
+
@env['REQUEST_URI'] = (/^[^\/]/.match?(@env['PATH_INFO']) ? '/' : '') + @env['PATH_INFO'] + (@env['QUERY_STRING'].empty? ? '' : "?#{@env['QUERY_STRING']}")
|
|
22
22
|
end
|
|
23
23
|
# REQUEST_URI is expected to not contain the server name
|
|
24
24
|
# heroku contains http://...
|
|
25
|
-
@env['REQUEST_URI'] = @env['REQUEST_URI'].sub(/^https?:\/\/[^\/]+/, '') if @env['REQUEST_URI']
|
|
25
|
+
@env['REQUEST_URI'] = @env['REQUEST_URI'].sub(/^https?:\/\/[^\/]+/, '') if /^https?:\/\//.match?(@env['REQUEST_URI'])
|
|
26
26
|
@unmasked_pathname = @env['REQUEST_URI'].split('?')[0]
|
|
27
27
|
@unmasked_pathname += '/' unless @unmasked_pathname =~ /\/$/ || @unmasked_pathname =~ /\/[^\/.]+\.[^\/.]+$/
|
|
28
28
|
@unmasked_url = "#{@protocol}://#{@unmasked_host}#{@unmasked_pathname}"
|
|
@@ -108,7 +108,7 @@ module Wovnrb
|
|
|
108
108
|
case @settings['url_pattern']
|
|
109
109
|
when 'query'
|
|
110
110
|
lang_param_name = @settings['lang_param_name']
|
|
111
|
-
location = if location
|
|
111
|
+
location = if /\?/.match?(location)
|
|
112
112
|
"#{location}&#{lang_param_name}=#{lang_code}"
|
|
113
113
|
else
|
|
114
114
|
"#{location}?#{lang_param_name}=#{lang_code}"
|
|
@@ -180,7 +180,7 @@ module Wovnrb
|
|
|
180
180
|
if lang_code != @settings['default_lang'] && headers.key?('Location') && headers['Location'] =~ r && !@settings['ignore_globs'].ignore?(headers['Location'])
|
|
181
181
|
case @settings['url_pattern']
|
|
182
182
|
when 'query'
|
|
183
|
-
headers['Location'] += if headers['Location']
|
|
183
|
+
headers['Location'] += if /\?/.match?(headers['Location'])
|
|
184
184
|
'&'
|
|
185
185
|
else
|
|
186
186
|
'?'
|
data/lib/wovnrb/lang.rb
CHANGED
|
@@ -126,7 +126,7 @@ module Wovnrb
|
|
|
126
126
|
# @param [Wovnrb::Header] headers instance of Wovn::Header. It generates new env variable for original request.
|
|
127
127
|
# @return [String] URL added langauge code.
|
|
128
128
|
def add_lang_code(href, pattern, headers)
|
|
129
|
-
return href if
|
|
129
|
+
return href if /^(#.*)?$/.match?(href)
|
|
130
130
|
|
|
131
131
|
settings = Store.instance.settings
|
|
132
132
|
code_to_add = settings['custom_lang_aliases'][@lang_code] || @lang_code
|
|
@@ -181,7 +181,7 @@ module Wovnrb
|
|
|
181
181
|
when 'query'
|
|
182
182
|
new_href = add_query_lang_code(href, code_to_add, lang_param_name)
|
|
183
183
|
else # path
|
|
184
|
-
if href
|
|
184
|
+
if /^\//.match?(href)
|
|
185
185
|
new_href = "/#{code_to_add}#{href}"
|
|
186
186
|
else
|
|
187
187
|
current_dir = headers.pathname.sub(/[^\/]*\.[^.]{2,6}$/, '')
|
|
@@ -250,7 +250,7 @@ module Wovnrb
|
|
|
250
250
|
end
|
|
251
251
|
|
|
252
252
|
def add_query_lang_code(href, lang_code, lang_param_name)
|
|
253
|
-
query_separator = href
|
|
253
|
+
query_separator = /\?/.match?(href) ? '&' : '?'
|
|
254
254
|
|
|
255
255
|
href.sub(/(#|$)/, "#{query_separator}#{lang_param_name}=#{lang_code}\\1")
|
|
256
256
|
end
|
|
@@ -21,6 +21,10 @@ module Wovnrb
|
|
|
21
21
|
private
|
|
22
22
|
|
|
23
23
|
def html
|
|
24
|
+
# Ensure a Content-Type declaration in the header. This mimics Nokogumbo
|
|
25
|
+
# 1.5.0 default serialization behavior.
|
|
26
|
+
@dom.meta_encoding = 'UTF-8' if @dom.respond_to?(:meta_encoding=)
|
|
27
|
+
|
|
24
28
|
@dom.to_html(save_with: 0).strip
|
|
25
29
|
end
|
|
26
30
|
|
data/lib/wovnrb/version.rb
CHANGED
data/lib/wovnrb.rb
CHANGED
|
@@ -5,7 +5,7 @@ require 'wovnrb/store'
|
|
|
5
5
|
require 'wovnrb/lang'
|
|
6
6
|
require 'wovnrb/services/html_converter'
|
|
7
7
|
require 'wovnrb/services/html_replace_marker'
|
|
8
|
-
require '
|
|
8
|
+
require 'nokogiri'
|
|
9
9
|
require 'active_support'
|
|
10
10
|
require 'json'
|
|
11
11
|
require 'wovnrb/helpers/nokogumbo_helper'
|
|
@@ -49,7 +49,7 @@ module Wovnrb
|
|
|
49
49
|
status, res_headers, body = @app.call(headers.request_out)
|
|
50
50
|
|
|
51
51
|
# disabled by next Rack middleware
|
|
52
|
-
return output(headers, status, res_headers, body) unless res_headers['Content-Type']
|
|
52
|
+
return output(headers, status, res_headers, body) unless /html/.match?(res_headers['Content-Type'])
|
|
53
53
|
|
|
54
54
|
request = Rack::Request.new(env)
|
|
55
55
|
|
|
@@ -58,7 +58,7 @@ module Wovnrb
|
|
|
58
58
|
@store.settings.update_dynamic_settings!(request.params)
|
|
59
59
|
return output(headers, status, res_headers, body) if ignore_path?(headers.pathname)
|
|
60
60
|
|
|
61
|
-
body = switch_lang(headers, body) unless
|
|
61
|
+
body = switch_lang(headers, body) unless /^1|302/.match?(status.to_s)
|
|
62
62
|
|
|
63
63
|
content_length = 0
|
|
64
64
|
body.each { |b| content_length += b.respond_to?(:bytesize) ? b.bytesize : 0 }
|
|
@@ -45,7 +45,7 @@ module Wovnrb
|
|
|
45
45
|
converter = prepare_html_converter(html, ignore_class: ['ignore-me'])
|
|
46
46
|
converted_html, = converter.build_api_compatible_html
|
|
47
47
|
|
|
48
|
-
expected_convert_html = "<html lang=\"en\"><head><script src=\"https://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><
|
|
48
|
+
expected_convert_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"https://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><p>Hello <span wovn-ignore=\"\"><!-- __wovn-backend-ignored-key-0 --></span></p><p></p><p>Hello <span data-wovn-ignore=\"\"><!-- __wovn-backend-ignored-key-1 --></span></p><p></p><div><span class=\"ignore-me\"><!-- __wovn-backend-ignored-key-2 --></span></div><span>Have a nice day!</span></body></html>"
|
|
49
49
|
assert_equal(expected_convert_html, converted_html)
|
|
50
50
|
end
|
|
51
51
|
|
|
@@ -62,7 +62,7 @@ module Wovnrb
|
|
|
62
62
|
converter = prepare_html_converter(html, ignore_class: [])
|
|
63
63
|
converted_html, = converter.build_api_compatible_html
|
|
64
64
|
|
|
65
|
-
expected_convert_html = "<html lang=\"en\"><head><script src=\"https://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><
|
|
65
|
+
expected_convert_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"https://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><form action=\"/test\" method=\"POST\"><!-- __wovn-backend-ignored-key-0 --></form></body></html>"
|
|
66
66
|
assert_equal(expected_convert_html, converted_html)
|
|
67
67
|
end
|
|
68
68
|
|
data/test/test_helper.rb
CHANGED
data/wovnrb.gemspec
CHANGED
|
@@ -12,6 +12,7 @@ Gem::Specification.new do |spec|
|
|
|
12
12
|
spec.homepage = 'https://wovn.io'
|
|
13
13
|
spec.license = 'MIT'
|
|
14
14
|
spec.required_ruby_version = '>= 2.5'
|
|
15
|
+
spec.metadata['rubygems_mfa_required'] = 'true'
|
|
15
16
|
|
|
16
17
|
files = `git ls-files -z`.split("\x0")
|
|
17
18
|
files.delete('BEFORE_PUSHING')
|
|
@@ -23,8 +24,7 @@ Gem::Specification.new do |spec|
|
|
|
23
24
|
spec.add_dependency 'activesupport'
|
|
24
25
|
spec.add_dependency 'addressable'
|
|
25
26
|
spec.add_dependency 'lz4-ruby'
|
|
26
|
-
spec.add_dependency 'nokogiri', '>= 1.
|
|
27
|
-
spec.add_dependency 'nokogumbo', '>= 1.4.0', '< 2.0.0'
|
|
27
|
+
spec.add_dependency 'nokogiri', '>= 1.12', '<2'
|
|
28
28
|
spec.add_dependency 'rack'
|
|
29
29
|
|
|
30
30
|
spec.add_development_dependency 'bundler', '>= 1.7'
|
|
@@ -45,6 +45,7 @@ Gem::Specification.new do |spec|
|
|
|
45
45
|
|
|
46
46
|
spec.add_development_dependency 'rake-compiler'
|
|
47
47
|
spec.add_development_dependency 'rubocop'
|
|
48
|
+
spec.add_development_dependency 'rubocop-performance'
|
|
48
49
|
spec.add_development_dependency 'timecop'
|
|
49
50
|
|
|
50
51
|
# NOTE; it need to use webmock 2.3.2 for avoiding error when we use ruby 2.4.x.
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: wovnrb
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.4.
|
|
4
|
+
version: 3.4.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Wovn Technologies, Inc.
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-11-
|
|
11
|
+
date: 2021-11-25 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
@@ -58,40 +58,20 @@ dependencies:
|
|
|
58
58
|
requirements:
|
|
59
59
|
- - ">="
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: 1.
|
|
62
|
-
- - "<="
|
|
63
|
-
- !ruby/object:Gem::Version
|
|
64
|
-
version: '1.11'
|
|
65
|
-
type: :runtime
|
|
66
|
-
prerelease: false
|
|
67
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
68
|
-
requirements:
|
|
69
|
-
- - ">="
|
|
70
|
-
- !ruby/object:Gem::Version
|
|
71
|
-
version: 1.8.1
|
|
72
|
-
- - "<="
|
|
73
|
-
- !ruby/object:Gem::Version
|
|
74
|
-
version: '1.11'
|
|
75
|
-
- !ruby/object:Gem::Dependency
|
|
76
|
-
name: nokogumbo
|
|
77
|
-
requirement: !ruby/object:Gem::Requirement
|
|
78
|
-
requirements:
|
|
79
|
-
- - ">="
|
|
80
|
-
- !ruby/object:Gem::Version
|
|
81
|
-
version: 1.4.0
|
|
61
|
+
version: '1.12'
|
|
82
62
|
- - "<"
|
|
83
63
|
- !ruby/object:Gem::Version
|
|
84
|
-
version: 2
|
|
64
|
+
version: '2'
|
|
85
65
|
type: :runtime
|
|
86
66
|
prerelease: false
|
|
87
67
|
version_requirements: !ruby/object:Gem::Requirement
|
|
88
68
|
requirements:
|
|
89
69
|
- - ">="
|
|
90
70
|
- !ruby/object:Gem::Version
|
|
91
|
-
version: 1.
|
|
71
|
+
version: '1.12'
|
|
92
72
|
- - "<"
|
|
93
73
|
- !ruby/object:Gem::Version
|
|
94
|
-
version: 2
|
|
74
|
+
version: '2'
|
|
95
75
|
- !ruby/object:Gem::Dependency
|
|
96
76
|
name: rack
|
|
97
77
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -344,6 +324,20 @@ dependencies:
|
|
|
344
324
|
- - ">="
|
|
345
325
|
- !ruby/object:Gem::Version
|
|
346
326
|
version: '0'
|
|
327
|
+
- !ruby/object:Gem::Dependency
|
|
328
|
+
name: rubocop-performance
|
|
329
|
+
requirement: !ruby/object:Gem::Requirement
|
|
330
|
+
requirements:
|
|
331
|
+
- - ">="
|
|
332
|
+
- !ruby/object:Gem::Version
|
|
333
|
+
version: '0'
|
|
334
|
+
type: :development
|
|
335
|
+
prerelease: false
|
|
336
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
337
|
+
requirements:
|
|
338
|
+
- - ">="
|
|
339
|
+
- !ruby/object:Gem::Version
|
|
340
|
+
version: '0'
|
|
347
341
|
- !ruby/object:Gem::Dependency
|
|
348
342
|
name: timecop
|
|
349
343
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -551,8 +545,9 @@ files:
|
|
|
551
545
|
homepage: https://wovn.io
|
|
552
546
|
licenses:
|
|
553
547
|
- MIT
|
|
554
|
-
metadata:
|
|
555
|
-
|
|
548
|
+
metadata:
|
|
549
|
+
rubygems_mfa_required: 'true'
|
|
550
|
+
post_install_message:
|
|
556
551
|
rdoc_options: []
|
|
557
552
|
require_paths:
|
|
558
553
|
- lib
|
|
@@ -567,8 +562,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
567
562
|
- !ruby/object:Gem::Version
|
|
568
563
|
version: '0'
|
|
569
564
|
requirements: []
|
|
570
|
-
rubygems_version: 3.
|
|
571
|
-
signing_key:
|
|
565
|
+
rubygems_version: 3.1.4
|
|
566
|
+
signing_key:
|
|
572
567
|
specification_version: 4
|
|
573
568
|
summary: Gem for WOVN.io
|
|
574
569
|
test_files:
|