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