wovnrb 3.0.3 → 3.4.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 +4 -4
- data/README.en.md +21 -16
- data/README.ja.md +6 -6
- data/docker/rails/TestSite/yarn.lock +6 -6
- data/lib/wovnrb/api_translator.rb +49 -26
- data/lib/wovnrb/services/html_converter.rb +1 -1
- data/lib/wovnrb/services/wovn_logger.rb +9 -2
- data/lib/wovnrb/store.rb +11 -9
- data/lib/wovnrb/version.rb +1 -1
- data/lib/wovnrb.rb +1 -1
- data/test/lib/api_translator_test.rb +61 -17
- data/test/lib/headers_test.rb +2 -2
- data/test/lib/services/html_converter_test.rb +13 -13
- data/test/lib/services/wovn_logger_test.rb +5 -3
- data/test/lib/store_test.rb +22 -16
- data/test/lib/wovnrb_test.rb +4 -4
- data/wovnrb.gemspec +1 -1
- metadata +12 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '06193b75ac22b47169f8d766af6fefbd2313ab08d064bb375f5f0966c7545f8a'
|
4
|
+
data.tar.gz: 58dc13795166410b91a33a8de5c13ecbf44f2cc777c6b0696475ef1d938449b5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f696a3e0078b1c51eee646143b90cd9cbb20ddfa95406f652db770ba28b9c655e76d6e907736dd35919089bb27671af792f938ceb4da20de46ddddfa4d122f06
|
7
|
+
data.tar.gz: 4ef3a31120a8052f5ac5a0b8fe8e289b269cd5ec85640eb677e1792f202d1dfdf396787be38876442be8f10ca33987cb8a472e1b9fb4b611ea36b3e759a9d544
|
data/README.en.md
CHANGED
@@ -39,8 +39,8 @@ Insert the following into either config/application.rb or config/environments/.
|
|
39
39
|
|
40
40
|
config.wovnrb = {
|
41
41
|
:project_token => 'EnS!t3',
|
42
|
-
:default_lang => '
|
43
|
-
:supported_langs => ['en'],
|
42
|
+
:default_lang => 'ja',
|
43
|
+
:supported_langs => ['ja', en'],
|
44
44
|
:url_pattern => 'path'
|
45
45
|
}
|
46
46
|
|
@@ -60,8 +60,8 @@ require 'wovnrb'
|
|
60
60
|
|
61
61
|
use Wovnrb::Interceptor, {
|
62
62
|
:project_token => 'EnS!t3',
|
63
|
-
:default_lang => '
|
64
|
-
:supported_langs => ['en'],
|
63
|
+
:default_lang => 'ja',
|
64
|
+
:supported_langs => ['ja', 'en'],
|
65
65
|
:url_pattern => 'path'
|
66
66
|
}
|
67
67
|
|
@@ -74,18 +74,19 @@ After completing setup, start the Ruby Application, and make sure the WOVN.io li
|
|
74
74
|
|
75
75
|
The following is a list of the WOVN.io Ruby Library's valid parameters.
|
76
76
|
|
77
|
-
Parameter Name
|
78
|
-
|
79
|
-
project_token
|
80
|
-
default_lang
|
81
|
-
supported_langs
|
82
|
-
url_pattern
|
83
|
-
lang_param_name
|
84
|
-
query
|
85
|
-
ignore_class
|
86
|
-
translate_fragment
|
87
|
-
ignore_paths
|
88
|
-
install_middleware
|
77
|
+
Parameter Name | Required | Default Setting
|
78
|
+
----------------------| -------- | ----------------
|
79
|
+
project_token | yes | ''
|
80
|
+
default_lang | yes | 'ja'
|
81
|
+
supported_langs | yes | ['ja', 'en']
|
82
|
+
url_pattern | yes | 'path'
|
83
|
+
lang_param_name | | 'wovn'
|
84
|
+
query | | []
|
85
|
+
ignore_class | | []
|
86
|
+
translate_fragment | | true
|
87
|
+
ignore_paths | | []
|
88
|
+
install_middleware | | true
|
89
|
+
compress_api_requests | | true
|
89
90
|
|
90
91
|
### 2.1. project_token
|
91
92
|
|
@@ -196,3 +197,7 @@ WOVN.rb needs to be added after any compression middleware.
|
|
196
197
|
:install_middleware => false
|
197
198
|
}
|
198
199
|
```
|
200
|
+
|
201
|
+
### 2.11 compress_api_requests
|
202
|
+
|
203
|
+
By default, requests to the translation API will be sent with gzip compression. Set to false to disable compression.
|
data/README.ja.md
CHANGED
@@ -44,8 +44,8 @@ bundle install
|
|
44
44
|
|
45
45
|
config.wovnrb = {
|
46
46
|
:project_token => 'EnS!t3',
|
47
|
-
:default_lang => '
|
48
|
-
:supported_langs => ['en'],
|
47
|
+
:default_lang => 'ja',
|
48
|
+
:supported_langs => ['ja', en'],
|
49
49
|
:url_pattern => 'path'
|
50
50
|
}
|
51
51
|
|
@@ -63,8 +63,8 @@ require 'wovnrb'
|
|
63
63
|
|
64
64
|
use Wovnrb::Interceptor, {
|
65
65
|
:project_token => 'EnS!t3',
|
66
|
-
:default_lang => '
|
67
|
-
:supported_langs => ['en'],
|
66
|
+
:default_lang => 'ja',
|
67
|
+
:supported_langs => ['ja', 'en'],
|
68
68
|
:url_pattern => 'path'
|
69
69
|
}
|
70
70
|
|
@@ -80,8 +80,8 @@ use Wovnrb::Interceptor, {
|
|
80
80
|
パラメータ名 | 必須 | デフォルト設定
|
81
81
|
------------------ | -------- | ----------------
|
82
82
|
project_token | yes | ''
|
83
|
-
default_lang | yes | '
|
84
|
-
supported_langs | yes | ['en']
|
83
|
+
default_lang | yes | 'ja'
|
84
|
+
supported_langs | yes | ['ja', 'en']
|
85
85
|
url_pattern | yes | 'path'
|
86
86
|
lang_param_name | | 'wovn'
|
87
87
|
query | | []
|
@@ -5129,9 +5129,9 @@ path-key@^2.0.0, path-key@^2.0.1:
|
|
5129
5129
|
integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
|
5130
5130
|
|
5131
5131
|
path-parse@^1.0.6:
|
5132
|
-
version "1.0.
|
5133
|
-
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.
|
5134
|
-
integrity sha512-
|
5132
|
+
version "1.0.7"
|
5133
|
+
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
|
5134
|
+
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
|
5135
5135
|
|
5136
5136
|
path-to-regexp@0.1.7:
|
5137
5137
|
version "0.1.7"
|
@@ -7269,9 +7269,9 @@ urix@^0.1.0:
|
|
7269
7269
|
integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
|
7270
7270
|
|
7271
7271
|
url-parse@^1.4.3, url-parse@^1.5.1:
|
7272
|
-
version "1.5.
|
7273
|
-
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.
|
7274
|
-
integrity sha512-
|
7272
|
+
version "1.5.3"
|
7273
|
+
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.3.tgz#71c1303d38fb6639ade183c2992c8cc0686df862"
|
7274
|
+
integrity sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==
|
7275
7275
|
dependencies:
|
7276
7276
|
querystringify "^2.1.1"
|
7277
7277
|
requires-port "^1.0.0"
|
@@ -5,9 +5,10 @@ require 'zlib'
|
|
5
5
|
|
6
6
|
module Wovnrb
|
7
7
|
class ApiTranslator
|
8
|
-
def initialize(store, headers)
|
8
|
+
def initialize(store, headers, uuid)
|
9
9
|
@store = store
|
10
10
|
@headers = headers
|
11
|
+
@uuid = uuid
|
11
12
|
end
|
12
13
|
|
13
14
|
def translate(body)
|
@@ -23,18 +24,19 @@ module Wovnrb
|
|
23
24
|
|
24
25
|
case response
|
25
26
|
when Net::HTTPSuccess
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
27
|
+
begin
|
28
|
+
raw_response_body = @store.dev_mode? ? response.body : Zlib::GzipReader.new(StringIO.new(response.body)).read
|
29
|
+
rescue Zlib::GzipFile::Error
|
30
|
+
raw_response_body = response.body
|
31
|
+
end
|
32
|
+
|
33
|
+
begin
|
34
|
+
JSON.parse(raw_response_body)['body'] || body
|
35
|
+
rescue JSON::JSONError
|
34
36
|
body
|
35
37
|
end
|
36
38
|
else
|
37
|
-
WovnLogger.error("Received \"#{response.message}\" from WOVNio translation API.")
|
39
|
+
WovnLogger.error("HTML-swapper call failed. Received \"#{response.message}\" from WOVNio translation API.")
|
38
40
|
body
|
39
41
|
end
|
40
42
|
end
|
@@ -51,24 +53,45 @@ module Wovnrb
|
|
51
53
|
end
|
52
54
|
|
53
55
|
def prepare_request(body)
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
56
|
+
if @store.compress_api_requests?
|
57
|
+
gzip_request(body)
|
58
|
+
else
|
59
|
+
json_request(body)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def gzip_request(html_body)
|
64
|
+
api_params = build_api_params(html_body)
|
65
|
+
compressed_body = compress_request_data(api_params)
|
66
|
+
request = Net::HTTP::Post.new(request_path(html_body), {
|
67
|
+
'Accept-Encoding' => 'gzip',
|
68
|
+
'Content-Type' => 'application/octet-stream',
|
69
|
+
'Content-Encoding' => 'gzip',
|
70
|
+
'Content-Length' => compressed_body.bytesize.to_s,
|
71
|
+
'X-Request-Id' => @uuid
|
72
|
+
})
|
73
|
+
request.body = compressed_body
|
74
|
+
|
75
|
+
request
|
76
|
+
end
|
61
77
|
|
62
|
-
|
78
|
+
def json_request(html_body)
|
79
|
+
api_params = build_api_params(html_body)
|
80
|
+
request = Net::HTTP::Post.new(request_path(html_body), {
|
81
|
+
'Accept-Encoding' => 'gzip',
|
82
|
+
'Content-Type' => 'application/json',
|
83
|
+
'X-Request-Id' => @uuid
|
84
|
+
})
|
85
|
+
request.body = api_params.to_json
|
63
86
|
|
64
87
|
request
|
65
88
|
end
|
66
89
|
|
67
|
-
def
|
68
|
-
"#{api_uri.path
|
90
|
+
def request_path(body)
|
91
|
+
"#{api_uri.path}/translation?cache_key=#{cache_key(body)}"
|
69
92
|
end
|
70
93
|
|
71
|
-
def
|
94
|
+
def cache_key(body)
|
72
95
|
cache_key_components = {
|
73
96
|
'token' => token,
|
74
97
|
'settings_hash' => settings_hash,
|
@@ -81,8 +104,8 @@ module Wovnrb
|
|
81
104
|
CGI.escape("(#{cache_key_components})")
|
82
105
|
end
|
83
106
|
|
84
|
-
def
|
85
|
-
|
107
|
+
def build_api_params(body)
|
108
|
+
result = {
|
86
109
|
'url' => page_url,
|
87
110
|
'token' => token,
|
88
111
|
'lang_code' => lang_code,
|
@@ -93,9 +116,9 @@ module Wovnrb
|
|
93
116
|
'body' => body
|
94
117
|
}
|
95
118
|
|
96
|
-
|
119
|
+
result['custom_lang_aliases'] = JSON.dump(custom_lang_aliases) unless custom_lang_aliases.empty?
|
97
120
|
|
98
|
-
|
121
|
+
result
|
99
122
|
end
|
100
123
|
|
101
124
|
def compress_request_data(data_hash)
|
@@ -109,7 +132,7 @@ module Wovnrb
|
|
109
132
|
end
|
110
133
|
|
111
134
|
def api_uri
|
112
|
-
Addressable::URI.parse("#{@store.settings['api_url']}/v0
|
135
|
+
Addressable::URI.parse("#{@store.settings['api_url']}/v0")
|
113
136
|
end
|
114
137
|
|
115
138
|
def api_timeout
|
@@ -155,7 +155,7 @@ module Wovnrb
|
|
155
155
|
return unless parent_node
|
156
156
|
|
157
157
|
insert_node = Nokogiri::XML::Node.new('script', @dom)
|
158
|
-
insert_node['src'] =
|
158
|
+
insert_node['src'] = @store.widget_url
|
159
159
|
insert_node['async'] = true
|
160
160
|
insert_node['data-wovnio'] = data_wovnio
|
161
161
|
insert_node['data-wovnio-type'] = 'fallback_snippet' if adds_backend_error_mark
|
@@ -3,15 +3,22 @@ require 'logger' unless defined?(Logger)
|
|
3
3
|
|
4
4
|
module Wovnrb
|
5
5
|
class WovnLogger
|
6
|
+
attr_reader :uuid
|
7
|
+
|
6
8
|
include Singleton
|
7
9
|
|
8
10
|
class << self
|
9
11
|
def error(message)
|
10
12
|
instance.error(message)
|
11
13
|
end
|
14
|
+
|
15
|
+
def uuid
|
16
|
+
instance.uuid
|
17
|
+
end
|
12
18
|
end
|
13
19
|
|
14
20
|
def initialize
|
21
|
+
@uuid = SecureRandom.uuid
|
15
22
|
path = Store.instance.settings['log_path']
|
16
23
|
if path
|
17
24
|
begin
|
@@ -40,9 +47,9 @@ module Wovnrb
|
|
40
47
|
|
41
48
|
def error(message)
|
42
49
|
if @logger == $stderr
|
43
|
-
@logger.puts "Wovnrb Error: #{message}"
|
50
|
+
@logger.puts "[#{@uuid}] Wovnrb Error: #{message}"
|
44
51
|
else
|
45
|
-
@logger.error message
|
52
|
+
@logger.error "[#{@uuid}] #{message}"
|
46
53
|
end
|
47
54
|
end
|
48
55
|
end
|
data/lib/wovnrb/store.rb
CHANGED
@@ -25,8 +25,8 @@ module Wovnrb
|
|
25
25
|
'ignore_class' => [],
|
26
26
|
'api_url' => 'https://wovn.global.ssl.fastly.net',
|
27
27
|
'api_timeout_seconds' => 1.0,
|
28
|
-
'default_lang' => '
|
29
|
-
'supported_langs' => [
|
28
|
+
'default_lang' => 'ja',
|
29
|
+
'supported_langs' => %w[en ja],
|
30
30
|
'test_mode' => false,
|
31
31
|
'test_url' => '',
|
32
32
|
'cache_megabytes' => nil,
|
@@ -34,7 +34,9 @@ module Wovnrb
|
|
34
34
|
'use_proxy' => false, # use env['HTTP_X_FORWARDED_HOST'] instead of env['HTTP_HOST'] and env['SERVER_NAME'] when this setting is true.
|
35
35
|
'custom_lang_aliases' => {},
|
36
36
|
'translate_fragment' => true,
|
37
|
-
'
|
37
|
+
'widget_url' => 'https://j.wovn.io/1',
|
38
|
+
'wovn_dev_mode' => false,
|
39
|
+
'compress_api_requests' => true
|
38
40
|
)
|
39
41
|
end
|
40
42
|
|
@@ -180,12 +182,12 @@ module Wovnrb
|
|
180
182
|
@settings['supported_langs'] || []
|
181
183
|
end
|
182
184
|
|
183
|
-
def
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
185
|
+
def compress_api_requests?
|
186
|
+
@settings['compress_api_requests']
|
187
|
+
end
|
188
|
+
|
189
|
+
def widget_url
|
190
|
+
@settings['widget_url'] || 'https://j.wovn.io/1'
|
189
191
|
end
|
190
192
|
|
191
193
|
def dev_mode?
|
data/lib/wovnrb/version.rb
CHANGED
data/lib/wovnrb.rb
CHANGED
@@ -80,7 +80,7 @@ module Wovnrb
|
|
80
80
|
|
81
81
|
if needs_api?(html_body, headers)
|
82
82
|
converted_html, marker = html_converter.build_api_compatible_html
|
83
|
-
translated_content = ApiTranslator.new(@store, headers).translate(converted_html)
|
83
|
+
translated_content = ApiTranslator.new(@store, headers, WovnLogger.uuid).translate(converted_html)
|
84
84
|
translated_body.push(marker.revert(translated_content))
|
85
85
|
else
|
86
86
|
string_body = html_converter.build if html_body.html?
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
module Wovnrb
|
4
|
+
REQUEST_UUID = 'ABCD'.freeze
|
5
|
+
|
4
6
|
class ApiTranslatorTest < WovnMiniTest
|
5
7
|
def test_translate
|
6
8
|
assert_translation('test.html', 'test_translated.html', true)
|
@@ -8,28 +10,64 @@ module Wovnrb
|
|
8
10
|
|
9
11
|
def test_translate_falls_back_to_original_body_if_exception
|
10
12
|
Net::HTTP.any_instance.expects(:request).raises
|
11
|
-
assert_translation('test.html', 'test_translated.html', false, nil)
|
13
|
+
assert_translation('test.html', 'test_translated.html', false, response: nil)
|
12
14
|
end
|
13
15
|
|
14
16
|
def test_translate_falls_back_to_original_body_if_api_error
|
15
|
-
assert_translation('test.html', 'test_translated.html', false, status_code: 500)
|
17
|
+
assert_translation('test.html', 'test_translated.html', false, response: { encoding: 'text/json', status_code: 500 })
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_translate_continues_if_api_response_is_not_compressed
|
21
|
+
assert_translation('test.html', 'test_translated.html', true, response: { encoding: 'unknown', status: 200 }, compress_data: false)
|
16
22
|
end
|
17
23
|
|
18
|
-
def
|
19
|
-
assert_translation('test.html', 'test_translated.html',
|
24
|
+
def test_translate_continues_if_api_response_is_compressed
|
25
|
+
assert_translation('test.html', 'test_translated.html', true, response: { encoding: 'unknown', status: 200 })
|
20
26
|
end
|
21
27
|
|
22
28
|
def test_translate_accepts_uncompressed_response_from_api_in_dev_mode
|
23
29
|
Wovnrb::Store.instance.update_settings('wovn_dev_mode' => true)
|
24
|
-
assert_translation('test.html', 'test_translated.html', true, encoding: 'text/json')
|
30
|
+
assert_translation('test.html', 'test_translated.html', true, response: { encoding: 'text/json', status: 200 }, compress_data: false)
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_translate_without_api_compression_sends_json
|
34
|
+
Wovnrb::Store.instance.update_settings('compress_api_requests' => false)
|
35
|
+
sut, _store, _headers = create_sut
|
36
|
+
html_body = 'foo'
|
37
|
+
|
38
|
+
stub_request(:post, %r{http://wovn\.global\.ssl\.fastly\.net/v0/translation\?cache_key=.*})
|
39
|
+
.to_return(status: 200, body: { 'body' => 'translated_body' }.to_json)
|
40
|
+
|
41
|
+
sut.translate(html_body)
|
42
|
+
|
43
|
+
assert_requested :post, %r{http://wovn\.global\.ssl\.fastly\.net/v0/translation\?cache_key=.*},
|
44
|
+
headers: {
|
45
|
+
'Accept' => '*/*',
|
46
|
+
'Accept-Encoding' => 'gzip',
|
47
|
+
'Content-Type' => 'application/json',
|
48
|
+
'User-Agent' => 'Ruby',
|
49
|
+
'X-Request-Id' => REQUEST_UUID
|
50
|
+
},
|
51
|
+
body: {
|
52
|
+
'url' => 'http://wovn.io/test',
|
53
|
+
'token' => '123456',
|
54
|
+
'lang_code' => 'fr',
|
55
|
+
'url_pattern' => 'subdomain',
|
56
|
+
'lang_param_name' => 'lang',
|
57
|
+
'product' => 'WOVN.rb',
|
58
|
+
'version' => VERSION,
|
59
|
+
'body' => 'foo',
|
60
|
+
'custom_lang_aliases' => { 'ja' => 'Japanese' }.to_json
|
61
|
+
}.to_json,
|
62
|
+
times: 1
|
25
63
|
end
|
26
64
|
|
27
65
|
private
|
28
66
|
|
29
|
-
def assert_translation(original_html_fixture, translated_html_fixture, success_expected, response
|
67
|
+
def assert_translation(original_html_fixture, translated_html_fixture, success_expected, response: { encoding: 'gzip', status_code: 200 }, compress_data: true)
|
30
68
|
original_html = File.read("test/fixtures/html/#{original_html_fixture}")
|
31
69
|
translated_html = File.read("test/fixtures/html/#{translated_html_fixture}")
|
32
|
-
actual_translated_html = translate(original_html, translated_html, response)
|
70
|
+
actual_translated_html = translate(original_html, translated_html, response, compress_data: compress_data)
|
33
71
|
|
34
72
|
if success_expected
|
35
73
|
assert_equal(actual_translated_html, translated_html)
|
@@ -38,7 +76,16 @@ module Wovnrb
|
|
38
76
|
end
|
39
77
|
end
|
40
78
|
|
41
|
-
def translate(original_html, translated_html, response)
|
79
|
+
def translate(original_html, translated_html, response, compress_data: true)
|
80
|
+
api_translator, store, _headers = create_sut
|
81
|
+
translation_request_stub = stub_translation_api_request(store, original_html, translated_html, response, compress_data: compress_data)
|
82
|
+
|
83
|
+
actual_translated_html = api_translator.translate(original_html)
|
84
|
+
assert_requested(translation_request_stub, times: 1) if translation_request_stub
|
85
|
+
actual_translated_html
|
86
|
+
end
|
87
|
+
|
88
|
+
def create_sut
|
42
89
|
settings = {
|
43
90
|
'project_token' => '123456',
|
44
91
|
'custom_lang_aliases' => { 'ja' => 'Japanese' },
|
@@ -53,15 +100,12 @@ module Wovnrb
|
|
53
100
|
Wovnrb.get_env('url' => 'http://fr.wovn.io/test'),
|
54
101
|
Wovnrb.get_settings(settings)
|
55
102
|
)
|
56
|
-
api_translator = ApiTranslator.new(store, headers)
|
57
|
-
translation_request_stub = stub_translation_api_request(store, headers, original_html, translated_html, response)
|
103
|
+
api_translator = ApiTranslator.new(store, headers, REQUEST_UUID)
|
58
104
|
|
59
|
-
|
60
|
-
assert_requested(translation_request_stub, times: 1) if translation_request_stub
|
61
|
-
actual_translated_html
|
105
|
+
[api_translator, store, headers]
|
62
106
|
end
|
63
107
|
|
64
|
-
def stub_translation_api_request(store,
|
108
|
+
def stub_translation_api_request(store, original_html, translated_html, response, compress_data: true)
|
65
109
|
if response
|
66
110
|
cache_key = generate_cache_key(store, original_html)
|
67
111
|
api_host = if store.dev_mode?
|
@@ -79,10 +123,10 @@ module Wovnrb
|
|
79
123
|
'User-Agent' => 'Ruby'
|
80
124
|
}
|
81
125
|
stub_response_json = "{\"body\":\"#{translated_html.gsub("\n", '\n')}\"}"
|
82
|
-
stub_response = if
|
83
|
-
stub_response_json
|
84
|
-
else
|
126
|
+
stub_response = if compress_data
|
85
127
|
compress(stub_response_json)
|
128
|
+
else
|
129
|
+
stub_response_json
|
86
130
|
end
|
87
131
|
response_headers = { 'Content-Encoding' => response[:encoding] || 'gzip' }
|
88
132
|
stub_request(:post, api_url)
|
data/test/lib/headers_test.rb
CHANGED
@@ -170,7 +170,7 @@ module Wovnrb
|
|
170
170
|
Wovnrb.get_env('url' => 'http://wovn.io/contact', 'HTTP_X_FORWARDED_HOST' => 'wovn.io'),
|
171
171
|
Store.instance.settings
|
172
172
|
)
|
173
|
-
assert_equal('http://wovn.io/contact?wovn=
|
173
|
+
assert_equal('http://wovn.io/contact?wovn=en', sut.redirect_location('en'))
|
174
174
|
end
|
175
175
|
|
176
176
|
def test_redirect_location_with_lang_param_name
|
@@ -179,7 +179,7 @@ module Wovnrb
|
|
179
179
|
Wovnrb.get_env('url' => 'http://wovn.io/contact', 'HTTP_X_FORWARDED_HOST' => 'wovn.io'),
|
180
180
|
Store.instance.settings
|
181
181
|
)
|
182
|
-
assert_equal('http://wovn.io/contact?lang=
|
182
|
+
assert_equal('http://wovn.io/contact?lang=en', sut.redirect_location('en'))
|
183
183
|
end
|
184
184
|
|
185
185
|
#########################
|
@@ -6,7 +6,7 @@ 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 lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"
|
9
|
+
expected_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=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><a class=\"test\">hello</a></body></html>"
|
10
10
|
assert_equal(expected_html, converted_html)
|
11
11
|
end
|
12
12
|
|
@@ -19,7 +19,7 @@ module Wovnrb
|
|
19
19
|
converter = prepare_html_converter('<html><body><a class="test">hello</a></body></html>', settings)
|
20
20
|
converted_html, = converter.build_api_compatible_html
|
21
21
|
|
22
|
-
expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"
|
22
|
+
expected_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=lang&version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?lang=vi\"></head><body><a class=\"test\">hello</a></body></html>"
|
23
23
|
assert_equal(expected_html, converted_html)
|
24
24
|
end
|
25
25
|
|
@@ -28,7 +28,7 @@ module Wovnrb
|
|
28
28
|
converter = prepare_html_converter("<html><body><p>#{long_string}</p></body></html>", supported_langs: %w[en vi])
|
29
29
|
converted_html, = converter.build_api_compatible_html
|
30
30
|
|
31
|
-
expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"
|
31
|
+
expected_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=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><p>#{long_string}</p></body></html>"
|
32
32
|
assert_equal(expected_html, converted_html)
|
33
33
|
end
|
34
34
|
|
@@ -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=\"
|
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><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><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=\"
|
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><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>"
|
66
66
|
assert_equal(expected_convert_html, converted_html)
|
67
67
|
end
|
68
68
|
|
@@ -81,7 +81,7 @@ module Wovnrb
|
|
81
81
|
|
82
82
|
expected_convert_html = [
|
83
83
|
'<html lang="en"><head>',
|
84
|
-
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"
|
84
|
+
"<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>",
|
85
85
|
'<input id="user-id" type="hidden" value="__wovn-backend-ignored-key-0">',
|
86
86
|
'<input id="password" type="hidden" value="__wovn-backend-ignored-key-1">',
|
87
87
|
'<input id="something" type="hidden" value="__wovn-backend-ignored-key-2">',
|
@@ -95,7 +95,7 @@ module Wovnrb
|
|
95
95
|
converter = prepare_html_converter('<html><body><a>hello</a></body></html>', supported_langs: %w[en vi])
|
96
96
|
translated_html = converter.build
|
97
97
|
|
98
|
-
expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"
|
98
|
+
expected_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=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><a>hello</a></body></html>"
|
99
99
|
assert_equal(expected_html, translated_html)
|
100
100
|
end
|
101
101
|
|
@@ -103,7 +103,7 @@ module Wovnrb
|
|
103
103
|
converter = prepare_html_converter('<html><body><a>hello</a></body></html>', supported_langs: [])
|
104
104
|
translated_html = converter.build
|
105
105
|
|
106
|
-
expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"
|
106
|
+
expected_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></head><body><a>hello</a></body></html>"
|
107
107
|
assert_equal(expected_html, translated_html)
|
108
108
|
end
|
109
109
|
|
@@ -111,7 +111,7 @@ module Wovnrb
|
|
111
111
|
converter = prepare_html_converter('<html><head><title>TITLE</title></head><body><a>hello</a></body></html>', supported_langs: %w[en vi])
|
112
112
|
translated_html = converter.build
|
113
113
|
|
114
|
-
expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"
|
114
|
+
expected_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><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>"
|
115
115
|
assert_equal(expected_html, translated_html)
|
116
116
|
end
|
117
117
|
|
@@ -119,7 +119,7 @@ module Wovnrb
|
|
119
119
|
converter = prepare_html_converter('<html>hello<a>world</a></html>', supported_langs: [])
|
120
120
|
translated_html = converter.build
|
121
121
|
|
122
|
-
expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"
|
122
|
+
expected_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></head><body>hello<a>world</a></body></html>"
|
123
123
|
assert_equal(expected_html, translated_html)
|
124
124
|
end
|
125
125
|
|
@@ -134,7 +134,7 @@ module Wovnrb
|
|
134
134
|
converter = HtmlConverter.new(dom, store, headers)
|
135
135
|
translated_html = converter.build
|
136
136
|
|
137
|
-
expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"
|
137
|
+
expected_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=\"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>"
|
138
138
|
assert_equal(expected_html, translated_html)
|
139
139
|
end
|
140
140
|
|
@@ -149,7 +149,7 @@ module Wovnrb
|
|
149
149
|
converter = HtmlConverter.new(dom, store, headers)
|
150
150
|
translated_html = converter.build
|
151
151
|
|
152
|
-
expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"
|
152
|
+
expected_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=path&langCodeAliases={}&langParamName=wovn&version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/ja/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/vi/\"></head><body>hello<a>world</a></body></html>"
|
153
153
|
assert_equal(expected_html, translated_html)
|
154
154
|
end
|
155
155
|
|
@@ -163,7 +163,7 @@ module Wovnrb
|
|
163
163
|
</head></html>')
|
164
164
|
converter.send(:replace_snippet)
|
165
165
|
|
166
|
-
expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"
|
166
|
+
expected_html = "<html><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><script src=\"/a\"></script></head><body></body></html>"
|
167
167
|
assert_equal(expected_html.gsub(/\s+/, ''), converter.send(:html).gsub(/\s+/, ''))
|
168
168
|
end
|
169
169
|
|
@@ -31,9 +31,11 @@ module Wovnrb
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def test_error
|
34
|
-
|
35
|
-
|
36
|
-
|
34
|
+
SecureRandom.stub(:uuid, 'a') do
|
35
|
+
mock = LogMock.mock_log
|
36
|
+
WovnLogger.instance.error('aaa')
|
37
|
+
assert_equal(['[a] aaa'], mock.errors)
|
38
|
+
end
|
37
39
|
end
|
38
40
|
end
|
39
41
|
end
|
data/test/lib/store_test.rb
CHANGED
@@ -78,12 +78,14 @@ module Wovnrb
|
|
78
78
|
end
|
79
79
|
|
80
80
|
def test_invalid_settings
|
81
|
-
|
82
|
-
|
83
|
-
|
81
|
+
SecureRandom.stub(:uuid, 'a') do
|
82
|
+
mock = LogMock.mock_log
|
83
|
+
store = Wovnrb::Store.instance
|
84
|
+
valid = store.valid_settings?
|
84
85
|
|
85
|
-
|
86
|
-
|
86
|
+
assert_equal(false, valid)
|
87
|
+
assert_equal(['[a] Project token is not valid.'], mock.errors)
|
88
|
+
end
|
87
89
|
end
|
88
90
|
|
89
91
|
def test_settings_ignore_paths
|
@@ -110,12 +112,14 @@ module Wovnrb
|
|
110
112
|
end
|
111
113
|
|
112
114
|
def test_settings_invalid_ignore_paths
|
113
|
-
|
114
|
-
|
115
|
-
|
115
|
+
SecureRandom.stub(:uuid, 'a') do
|
116
|
+
mock = LogMock.mock_log
|
117
|
+
store = Wovnrb::Store.instance
|
118
|
+
store.update_settings('ignore_paths' => 'aaaa')
|
116
119
|
|
117
|
-
|
118
|
-
|
120
|
+
assert_equal(false, store.valid_settings?)
|
121
|
+
assert_equal(['[a] Project token is not valid.', '[a] Ignore Paths aaaa should be Array.'], mock.errors)
|
122
|
+
end
|
119
123
|
end
|
120
124
|
|
121
125
|
def test_settings_ignore_glob_injection
|
@@ -126,15 +130,17 @@ module Wovnrb
|
|
126
130
|
assert_equal([], s.settings['ignore_globs'])
|
127
131
|
end
|
128
132
|
|
129
|
-
def
|
133
|
+
def test_widget_url_settings
|
130
134
|
store = Wovnrb::Store.instance
|
131
135
|
|
132
|
-
store.update_settings('
|
136
|
+
store.update_settings('widget_url' => nil)
|
137
|
+
assert_equal('https://j.wovn.io/1', store.widget_url)
|
133
138
|
|
134
|
-
|
135
|
-
assert_equal('
|
136
|
-
|
137
|
-
|
139
|
+
store.update_settings('widget_url' => 'https://j.wovn.io/1')
|
140
|
+
assert_equal('https://j.wovn.io/1', store.widget_url)
|
141
|
+
|
142
|
+
store.update_settings('widget_url' => 'http://j.dev-wovn.io:3000/1')
|
143
|
+
assert_equal('http://j.dev-wovn.io:3000/1', store.widget_url)
|
138
144
|
end
|
139
145
|
|
140
146
|
def test_dev_mode_not_overriding_settings
|
data/test/lib/wovnrb_test.rb
CHANGED
@@ -16,7 +16,7 @@ class WovnrbTest < Minitest::Test
|
|
16
16
|
|
17
17
|
expected_body = [
|
18
18
|
'<html lang="ja"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">',
|
19
|
-
"<script src=\"
|
19
|
+
"<script src=\"https://j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&backend=true&currentLang=ja&defaultLang=en&urlPattern=path&langCodeAliases={}&version=#{Wovnrb::VERSION}\"> </script>",
|
20
20
|
'<link rel="alternate" hreflang="ja" href="http://ja.page.com/">',
|
21
21
|
'<link rel="alternate" hreflang="en" href="http://page.com/"></head>',
|
22
22
|
'<body><h1><!--wovn-src:Mr. Belvedere Fan Club-->ベルベデアさんファンクラブ</h1>',
|
@@ -40,7 +40,7 @@ class WovnrbTest < Minitest::Test
|
|
40
40
|
|
41
41
|
expected_body = [
|
42
42
|
'<html lang="ja"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">',
|
43
|
-
"<script src=\"
|
43
|
+
"<script src=\"https://j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&backend=true¤tLang=ja&defaultLang=en&urlPattern=path&langCodeAliases={}&version=#{Wovnrb::VERSION}\"> </script>",
|
44
44
|
'<link rel="alternate" hreflang="ja" href="http://ja.page.com/">',
|
45
45
|
'<link rel="alternate" hreflang="en" href="http://page.com/"></head>',
|
46
46
|
'<body>',
|
@@ -66,7 +66,7 @@ class WovnrbTest < Minitest::Test
|
|
66
66
|
bodies = ['<html><body><h1>Mr. Belvedere Fan Club</h1>',
|
67
67
|
'<div><p>Hello</p></div>',
|
68
68
|
'</body></html>'].join
|
69
|
-
expected_bodies = ["<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"
|
69
|
+
expected_bodies = ["<html><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=ja&defaultLang=en&urlPattern=subdomain&langCodeAliases={}&version=WOVN.rb_#{Wovnrb::VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://page.com/\"></head><body><h1>Mr. Belvedere Fan Club</h1><div><p>Hello</p></div></body></html>"].join
|
70
70
|
|
71
71
|
assert_switch_lang('en', 'ja', bodies, expected_bodies, api_expected: true)
|
72
72
|
end
|
@@ -83,7 +83,7 @@ class WovnrbTest < Minitest::Test
|
|
83
83
|
body = "<html><body><h1>Mr. Belvedere Fan Club</h1>
|
84
84
|
<div><p>Hello</p></div>
|
85
85
|
</body></html>"
|
86
|
-
expected_body = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"
|
86
|
+
expected_body = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"https://j.wovn.io/1\" async=\"true\" data-wovnio=\"key=&backend=true&currentLang=ja&defaultLang=en&urlPattern=path&langCodeAliases={}&version=#{Wovnrb::VERSION}\"> </script></head><body><h1>Mr. Belvedere Fan Club</h1>
|
87
87
|
<div><p>Hello</p></div>
|
88
88
|
</body></html>
|
89
89
|
"
|
data/wovnrb.gemspec
CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_dependency 'activesupport'
|
24
24
|
spec.add_dependency 'addressable'
|
25
25
|
spec.add_dependency 'lz4-ruby'
|
26
|
-
spec.add_dependency 'nokogiri', '>= 1.8.1'
|
26
|
+
spec.add_dependency 'nokogiri', '>= 1.8.1', '<= 1.11'
|
27
27
|
spec.add_dependency 'nokogumbo', '>= 1.4.0', '< 2.0.0'
|
28
28
|
spec.add_dependency 'rack'
|
29
29
|
|
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.0
|
4
|
+
version: 3.4.0
|
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
|
+
date: 2021-11-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -59,6 +59,9 @@ dependencies:
|
|
59
59
|
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 1.8.1
|
62
|
+
- - "<="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '1.11'
|
62
65
|
type: :runtime
|
63
66
|
prerelease: false
|
64
67
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -66,6 +69,9 @@ dependencies:
|
|
66
69
|
- - ">="
|
67
70
|
- !ruby/object:Gem::Version
|
68
71
|
version: 1.8.1
|
72
|
+
- - "<="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '1.11'
|
69
75
|
- !ruby/object:Gem::Dependency
|
70
76
|
name: nokogumbo
|
71
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -546,7 +552,7 @@ homepage: https://wovn.io
|
|
546
552
|
licenses:
|
547
553
|
- MIT
|
548
554
|
metadata: {}
|
549
|
-
post_install_message:
|
555
|
+
post_install_message:
|
550
556
|
rdoc_options: []
|
551
557
|
require_paths:
|
552
558
|
- lib
|
@@ -561,8 +567,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
561
567
|
- !ruby/object:Gem::Version
|
562
568
|
version: '0'
|
563
569
|
requirements: []
|
564
|
-
rubygems_version: 3.
|
565
|
-
signing_key:
|
570
|
+
rubygems_version: 3.0.3
|
571
|
+
signing_key:
|
566
572
|
specification_version: 4
|
567
573
|
summary: Gem for WOVN.io
|
568
574
|
test_files:
|