wovnrb 3.2.0 → 3.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b81d287414c2bec2a702a64f26f3bb7d17af912b558e420f5483b1adea3319e7
4
- data.tar.gz: 638c81c1d8935753526b11a0a5d36b4d661fbb9cc7739054b121e66f6000c142
3
+ metadata.gz: e5c458ea4be1b5bc1325a0c54a9672f7fd744b864975699ae48e70acde6d5265
4
+ data.tar.gz: 318102aa29ae9bbb03d5cf0b1ccffa3f39ada7a8fc963daad856b058f46e46ec
5
5
  SHA512:
6
- metadata.gz: f801b9ea2a61e7b1a0192d521ffcaac701262b277e732ab618aadc5fcfb41a2d812493a7e42c326726884a5b811d61763dbb5db9bc9c7bf6f7d6e47bcbfd52c1
7
- data.tar.gz: f5ae170d54ac362dd74710ef05660e00f914f1cca8b1b13aeb0177478bd5d89fe472b4735df26cfd95ff854c88198f6e698c1ea33772734c52f3403af3ecbe75
6
+ metadata.gz: fd81bc766461ce8212a32afafc0a673790985213304c55765322e42591e34107a649d70e1133a597b88c6cda3ee0813cd1b4efbac1ff45d2d794f52d78c80814
7
+ data.tar.gz: fd4304143e2226ab1b9a887d45e2326da8b8b452e0a60bcbb94f3b680fc4280459e47fb3b025d6660c2d338a1d3150617fc279b279e68693b0566a41050bd3de
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 => 'en',
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 => 'en',
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 | Required | Default Setting
78
- ------------------ | -------- | ----------------
79
- project_token | yes | ''
80
- default_lang | yes | 'en'
81
- supported_langs | yes | ['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
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 => 'en',
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 => 'en',
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 | 'en'
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 | | []
@@ -52,25 +52,45 @@ module Wovnrb
52
52
  end
53
53
 
54
54
  def prepare_request(body)
55
- data = compress_request_data(generate_request_data(body))
56
- headers = {
57
- 'Accept-Encoding' => 'gzip',
58
- 'Content-Type' => 'application/octet-stream',
59
- 'Content-Length' => data.bytesize.to_s,
60
- 'X-Request-Id' => @uuid
61
- }
62
- request = Net::HTTP::Post.new(generate_request_path(body), headers)
55
+ if @store.compress_api_requests?
56
+ gzip_request(body)
57
+ else
58
+ json_request(body)
59
+ end
60
+ end
61
+
62
+ def gzip_request(html_body)
63
+ api_params = build_api_params(html_body)
64
+ compressed_body = compress_request_data(api_params)
65
+ request = Net::HTTP::Post.new(request_path(html_body), {
66
+ 'Accept-Encoding' => 'gzip',
67
+ 'Content-Type' => 'application/octet-stream',
68
+ 'Content-Encoding' => 'gzip',
69
+ 'Content-Length' => compressed_body.bytesize.to_s,
70
+ 'X-Request-Id' => @uuid
71
+ })
72
+ request.body = compressed_body
73
+
74
+ request
75
+ end
63
76
 
64
- request.body = data
77
+ def json_request(html_body)
78
+ api_params = build_api_params(html_body)
79
+ request = Net::HTTP::Post.new(request_path(html_body), {
80
+ 'Accept-Encoding' => 'gzip',
81
+ 'Content-Type' => 'application/json',
82
+ 'X-Request-Id' => @uuid
83
+ })
84
+ request.body = api_params.to_json
65
85
 
66
86
  request
67
87
  end
68
88
 
69
- def generate_request_path(body)
70
- "#{api_uri.path.sub(/\/$/, '')}/translation?cache_key=#{generate_cache_key(body)}"
89
+ def request_path(body)
90
+ "#{api_uri.path}/translation?cache_key=#{cache_key(body)}"
71
91
  end
72
92
 
73
- def generate_cache_key(body)
93
+ def cache_key(body)
74
94
  cache_key_components = {
75
95
  'token' => token,
76
96
  'settings_hash' => settings_hash,
@@ -83,8 +103,8 @@ module Wovnrb
83
103
  CGI.escape("(#{cache_key_components})")
84
104
  end
85
105
 
86
- def generate_request_data(body)
87
- data = {
106
+ def build_api_params(body)
107
+ result = {
88
108
  'url' => page_url,
89
109
  'token' => token,
90
110
  'lang_code' => lang_code,
@@ -95,9 +115,9 @@ module Wovnrb
95
115
  'body' => body
96
116
  }
97
117
 
98
- data['custom_lang_aliases'] = JSON.dump(custom_lang_aliases) unless custom_lang_aliases.empty?
118
+ result['custom_lang_aliases'] = JSON.dump(custom_lang_aliases) unless custom_lang_aliases.empty?
99
119
 
100
- data
120
+ result
101
121
  end
102
122
 
103
123
  def compress_request_data(data_hash)
@@ -111,7 +131,7 @@ module Wovnrb
111
131
  end
112
132
 
113
133
  def api_uri
114
- Addressable::URI.parse("#{@store.settings['api_url']}/v0/")
134
+ Addressable::URI.parse("#{@store.settings['api_url']}/v0")
115
135
  end
116
136
 
117
137
  def api_timeout
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' => 'en',
29
- 'supported_langs' => ['en'],
28
+ 'default_lang' => 'ja',
29
+ 'supported_langs' => %w[en ja],
30
30
  'test_mode' => false,
31
31
  'test_url' => '',
32
32
  'cache_megabytes' => nil,
@@ -35,7 +35,8 @@ module Wovnrb
35
35
  'custom_lang_aliases' => {},
36
36
  'translate_fragment' => true,
37
37
  'widget_url' => 'https://j.wovn.io/1',
38
- 'wovn_dev_mode' => false
38
+ 'wovn_dev_mode' => false,
39
+ 'compress_api_requests' => true
39
40
  )
40
41
  end
41
42
 
@@ -181,6 +182,10 @@ module Wovnrb
181
182
  @settings['supported_langs'] || []
182
183
  end
183
184
 
185
+ def compress_api_requests?
186
+ @settings['compress_api_requests']
187
+ end
188
+
184
189
  def widget_url
185
190
  @settings['widget_url'] || 'https://j.wovn.io/1'
186
191
  end
@@ -1,3 +1,3 @@
1
1
  module Wovnrb
2
- VERSION = '3.2.0'.freeze
2
+ VERSION = '3.3.1'.freeze
3
3
  end
@@ -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)
@@ -24,6 +26,38 @@ module Wovnrb
24
26
  assert_translation('test.html', 'test_translated.html', true, encoding: 'text/json')
25
27
  end
26
28
 
29
+ def test_translate_without_api_compression_sends_json
30
+ Wovnrb::Store.instance.update_settings('compress_api_requests' => false)
31
+ sut, _store, _headers = create_sut
32
+ html_body = 'foo'
33
+
34
+ stub_request(:post, %r{http://wovn\.global\.ssl\.fastly\.net/v0/translation\?cache_key=.*})
35
+ .to_return(status: 200, body: { 'body' => 'translated_body' }.to_json)
36
+
37
+ sut.translate(html_body)
38
+
39
+ assert_requested :post, %r{http://wovn\.global\.ssl\.fastly\.net/v0/translation\?cache_key=.*},
40
+ headers: {
41
+ 'Accept' => '*/*',
42
+ 'Accept-Encoding' => 'gzip',
43
+ 'Content-Type' => 'application/json',
44
+ 'User-Agent' => 'Ruby',
45
+ 'X-Request-Id' => REQUEST_UUID
46
+ },
47
+ body: {
48
+ 'url' => 'http://wovn.io/test',
49
+ 'token' => '123456',
50
+ 'lang_code' => 'fr',
51
+ 'url_pattern' => 'subdomain',
52
+ 'lang_param_name' => 'lang',
53
+ 'product' => 'WOVN.rb',
54
+ 'version' => VERSION,
55
+ 'body' => 'foo',
56
+ 'custom_lang_aliases' => { 'ja' => 'Japanese' }.to_json
57
+ }.to_json,
58
+ times: 1
59
+ end
60
+
27
61
  private
28
62
 
29
63
  def assert_translation(original_html_fixture, translated_html_fixture, success_expected, response = { encoding: 'gzip', status_code: 200 })
@@ -39,6 +73,15 @@ module Wovnrb
39
73
  end
40
74
 
41
75
  def translate(original_html, translated_html, response)
76
+ api_translator, store, headers = create_sut
77
+ translation_request_stub = stub_translation_api_request(store, headers, original_html, translated_html, response)
78
+
79
+ actual_translated_html = api_translator.translate(original_html)
80
+ assert_requested(translation_request_stub, times: 1) if translation_request_stub
81
+ actual_translated_html
82
+ end
83
+
84
+ def create_sut
42
85
  settings = {
43
86
  'project_token' => '123456',
44
87
  'custom_lang_aliases' => { 'ja' => 'Japanese' },
@@ -53,12 +96,9 @@ module Wovnrb
53
96
  Wovnrb.get_env('url' => 'http://fr.wovn.io/test'),
54
97
  Wovnrb.get_settings(settings)
55
98
  )
56
- api_translator = ApiTranslator.new(store, headers, 'ABCD')
57
- translation_request_stub = stub_translation_api_request(store, headers, original_html, translated_html, response)
99
+ api_translator = ApiTranslator.new(store, headers, REQUEST_UUID)
58
100
 
59
- actual_translated_html = api_translator.translate(original_html)
60
- assert_requested(translation_request_stub, times: 1) if translation_request_stub
61
- actual_translated_html
101
+ [api_translator, store, headers]
62
102
  end
63
103
 
64
104
  def stub_translation_api_request(store, headers, original_html, translated_html, response)
@@ -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=ja', sut.redirect_location('ja'))
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=ja', sut.redirect_location('ja'))
182
+ assert_equal('http://wovn.io/contact?lang=en', sut.redirect_location('en'))
183
183
  end
184
184
 
185
185
  #########################
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.2.0
4
+ version: 3.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wovn Technologies, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-04 00:00:00.000000000 Z
11
+ date: 2021-10-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport