wovnrb 3.11.0 → 3.13.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.
data/lib/wovnrb/store.rb CHANGED
@@ -1,222 +1,230 @@
1
- require 'net/http'
2
- require 'uri'
3
- require 'cgi'
4
- require 'singleton'
5
- require 'wovnrb/custom_domain/custom_domain_langs'
6
- require 'wovnrb/services/wovn_logger'
7
- require 'wovnrb/services/glob'
8
- require 'wovnrb/settings'
9
- require 'active_support'
10
- require 'active_support/core_ext'
11
-
12
- module Wovnrb
13
- class Store
14
- include Singleton
15
-
16
- def self.default_settings
17
- Settings.new.merge(
18
- 'project_token' => '',
19
- 'log_path' => 'log/wovn_error.log',
20
- 'ignore_paths' => [],
21
- 'ignore_globs' => [],
22
- 'url_pattern' => 'path',
23
- 'url_pattern_reg' => "/(?<lang>[^/.?]+)",
24
- 'lang_param_name' => 'wovn',
25
- 'query' => [],
26
- 'ignore_class' => [],
27
- 'api_url' => 'https://wovn.global.ssl.fastly.net',
28
- 'api_timeout_seconds' => 1.0,
29
- 'api_timeout_search_engine_bots' => 5.0,
30
- 'default_lang' => 'ja',
31
- 'supported_langs' => %w[en ja],
32
- 'test_mode' => false,
33
- 'test_url' => '',
34
- 'cache_megabytes' => nil,
35
- 'ttl_seconds' => nil,
36
- 'use_proxy' => false, # use env['HTTP_X_FORWARDED_HOST'] instead of env['HTTP_HOST'] and env['SERVER_NAME'] when this setting is true.
37
- 'custom_lang_aliases' => {},
38
- 'translate_fragment' => true,
39
- 'widget_url' => 'https://j.wovn.io/1',
40
- 'wovn_dev_mode' => false,
41
- 'compress_api_requests' => true,
42
- 'translate_canonical_tag' => true,
43
- 'custom_domain_langs' => {},
44
- 'insert_hreflangs' => true,
45
- 'use_cookie_lang' => false
46
- )
47
- end
48
-
49
- def initialize
50
- reset
51
- end
52
-
53
- # Reset @settings and @config_loaded variables to default.
54
- #
55
- # @return [nil]
56
- def reset
57
- @settings = Store.default_settings
58
- @custom_domain_langs = nil
59
- # When Store is initialized, the Rails.configuration object is not yet initialized
60
- @config_loaded = false
61
- end
62
-
63
- # Returns true or false based on whether the token is valid or not
64
- #
65
- # @return [Boolean] Returns true if the token is valid, and false if it is not
66
- def valid_token?(token)
67
- !token.nil? && (token.length == 5 || token.length == 6)
68
- end
69
-
70
- # Returns true or false based on whether the settings are valid or not, logs any invalid settings to ../error.log
71
- #
72
- # @return [Boolean] Returns true if the settings are valid, and false if they are not
73
- def valid_settings?
74
- valid = true
75
- errors = []
76
- # if valid_token?(!settings.has_key?('project_token') || settings['project_token'].length < 5 || settings['project_token'].length > 6
77
- if !valid_token?(settings['project_token'])
78
- errors.push("Project token #{settings['project_token']} is not valid.")
79
- end
80
- if settings.has_key?('ignore_paths') && !settings['ignore_paths'].kind_of?(Array)
81
- errors.push("Ignore Paths #{settings['ignore_paths']} should be Array.")
82
- end
83
- if !settings.has_key?('url_pattern') || settings['url_pattern'].length == 0
84
- errors.push("Url pattern #{settings['url_pattern']} is not valid.")
85
- end
86
- if !settings.has_key?('query') || !settings['query'].kind_of?(Array)
87
- errors.push("query config #{settings['query']} is not valid.")
88
- end
89
- if !settings.has_key?('ignore_class') || !settings['ignore_class'].kind_of?(Array)
90
- errors.push("ignore_class config #{settings['ignore_class']} should be Array.")
91
- end
92
- if !settings.has_key?('api_url') || settings['api_url'].length == 0
93
- errors.push("API URL is not configured.")
94
- end
95
- if !settings.has_key?('default_lang') || settings['default_lang'].nil?
96
- errors.push("Default lang #{settings['default_lang']} is not valid.")
97
- end
98
- if !settings.has_key?('supported_langs') || !settings['supported_langs'].kind_of?(Array) || settings['supported_langs'].size < 1
99
- errors.push("Supported langs configuration is not valid.")
100
- end
101
- if !settings.has_key?('custom_lang_aliases') || !settings['custom_lang_aliases'].kind_of?(Hash)
102
- errors.push("Custom lang aliases is not valid.")
103
- end
104
- # log errors
105
- if errors.length > 0
106
- valid = false
107
- errors.each do |e|
108
- WovnLogger.instance.error(e)
109
- end
110
- end
111
- valid
112
- end
113
-
114
- # Returns the settings object, pulling from Rails config the first time this is called
115
- #
116
- def settings
117
- load_settings unless @config_loaded
118
- @settings
119
- end
120
-
121
- # Load Rails config.wovnrb
122
- #
123
- def load_settings
124
- if Object.const_defined?(:Rails) && Rails.configuration.respond_to?(:wovnrb)
125
- @config_loaded = true
126
- update_settings(Rails.configuration.wovnrb)
127
- end
128
- end
129
-
130
- def update_settings(new_settings)
131
- load_settings unless @config_loaded
132
- if !new_settings.nil?
133
- @settings.merge!(new_settings.stringify_keys)
134
- format_settings
135
- end
136
- end
137
-
138
- def format_settings
139
- if @settings.has_key?('custom_lang_aliases')
140
- stringify_keys! @settings['custom_lang_aliases']
141
- end
142
-
143
- @settings['default_lang'] = Lang.get_code(@settings['default_lang'])
144
- if !@settings.has_key?('supported_langs')
145
- @settings['supported_langs'] = [@settings['default_lang']]
146
- end
147
-
148
- if @settings.has_key?('user_token') && @settings['project_token'].empty?
149
- @settings['project_token'] = @settings['user_token']
150
- end
151
- @settings.delete('user_token')
152
-
153
- case @settings['url_pattern']
154
- when 'path'
155
- @settings['url_pattern_reg'] = "/(?<lang>[^/.?]+)"
156
- when 'query'
157
- @settings['url_pattern_reg'] = "((\\?.*&)|\\?)#{@settings['lang_param_name']}=(?<lang>[^&]+)(&|$)"
158
- when 'subdomain'
159
- @settings['url_pattern_reg'] = '^(?<lang>[^.]+)\.'
160
- when 'custom_domain'
161
- # Do not use regex
162
- end
163
-
164
- @settings['test_mode'] = !(@settings['test_mode'] != true || @settings['test_mode'] != 'on')
165
-
166
- if @settings['wovn_dev_mode']
167
- if @settings['api_url'] == self.class.default_settings['api_url']
168
- @settings['api_url'] = 'http://dev-wovn.io:3001'
169
- end
170
-
171
- if @settings['api_timeout_seconds'] == self.class.default_settings['api_timeout_seconds']
172
- @settings['api_timeout_seconds'] = 3.0
173
- end
174
- end
175
- end
176
-
177
- def custom_lang_aliases
178
- @settings['custom_lang_aliases'] || {}
179
- end
180
-
181
- def default_lang
182
- @settings['default_lang']
183
- end
184
-
185
- def default_lang_alias
186
- custom_alias = custom_lang_aliases[default_lang]
187
- custom_alias || default_lang
188
- end
189
-
190
- def supported_langs
191
- @settings['supported_langs'] || []
192
- end
193
-
194
- def compress_api_requests?
195
- @settings['compress_api_requests']
196
- end
197
-
198
- def widget_url
199
- @settings['widget_url'] || 'https://j.wovn.io/1'
200
- end
201
-
202
- def dev_mode?
203
- @settings['wovn_dev_mode']
204
- end
205
-
206
- def url_pattern
207
- @settings['url_pattern']
208
- end
209
-
210
- def custom_domain_langs
211
- @custom_domain_langs ||= CustomDomainLangs.new(@settings['custom_domain_langs'])
212
- end
213
-
214
- private
215
-
216
- def stringify_keys!(hash)
217
- hash.keys.each do |k|
218
- hash[k.to_s] = hash.delete(k)
219
- end
220
- end
221
- end
222
- end
1
+ require 'net/http'
2
+ require 'uri'
3
+ require 'cgi'
4
+ require 'singleton'
5
+ require 'wovnrb/custom_domain/custom_domain_langs'
6
+ require 'wovnrb/services/wovn_logger'
7
+ require 'wovnrb/services/glob'
8
+ require 'wovnrb/settings'
9
+ require 'active_support'
10
+ require 'active_support/core_ext'
11
+
12
+ module Wovnrb
13
+ class Store
14
+ include Singleton
15
+
16
+ def self.default_settings
17
+ Settings.new.merge(
18
+ 'project_token' => '',
19
+ 'log_path' => 'log/wovn_error.log',
20
+ 'ignore_paths' => [],
21
+ 'ignore_globs' => [],
22
+ 'url_pattern' => 'path',
23
+ 'url_pattern_reg' => "/(?<lang>[^/.?]+)",
24
+ 'lang_param_name' => 'wovn',
25
+ 'query' => [],
26
+ 'ignore_class' => [],
27
+ 'api_url' => 'https://wovn.global.ssl.fastly.net',
28
+ 'api_timeout_seconds' => 1.0,
29
+ 'api_timeout_search_engine_bots' => 5.0,
30
+ 'default_lang' => 'ja',
31
+ 'supported_langs' => %w[en ja],
32
+ 'test_mode' => false,
33
+ 'test_url' => '',
34
+ 'cache_megabytes' => nil,
35
+ 'hreflang_x_default_lang' => nil,
36
+ 'ttl_seconds' => nil,
37
+ 'use_proxy' => false, # use env['HTTP_X_FORWARDED_HOST'] instead of env['HTTP_HOST'] and env['SERVER_NAME'] when this setting is true.
38
+ 'custom_lang_aliases' => {},
39
+ 'translate_fragment' => true,
40
+ 'widget_url' => 'https://j.wovn.io/1',
41
+ 'wovn_dev_mode' => false,
42
+ 'compress_api_requests' => true,
43
+ 'translate_canonical_tag' => true,
44
+ 'custom_domain_langs' => {},
45
+ 'insert_hreflangs' => true,
46
+ 'use_cookie_lang' => false
47
+ )
48
+ end
49
+
50
+ def initialize
51
+ reset
52
+ end
53
+
54
+ # Reset @settings and @config_loaded variables to default.
55
+ #
56
+ # @return [nil]
57
+ def reset
58
+ @settings = Store.default_settings
59
+ @custom_domain_langs = nil
60
+ # When Store is initialized, the Rails.configuration object is not yet initialized
61
+ @config_loaded = false
62
+ end
63
+
64
+ # Returns true or false based on whether the token is valid or not
65
+ #
66
+ # @return [Boolean] Returns true if the token is valid, and false if it is not
67
+ def valid_token?(token)
68
+ !token.nil? && [5, 6].include?(token.length)
69
+ end
70
+
71
+ # Returns true or false based on whether the settings are valid or not, logs any invalid settings to ../error.log
72
+ #
73
+ # @return [Boolean] Returns true if the settings are valid, and false if they are not
74
+ def valid_settings?
75
+ valid = true
76
+ errors = []
77
+ # if valid_token?(!settings.has_key?('project_token') || settings['project_token'].length < 5 || settings['project_token'].length > 6
78
+ if !valid_token?(settings['project_token'])
79
+ errors.push("Project token #{settings['project_token']} is not valid.")
80
+ end
81
+ if settings.has_key?('ignore_paths') && !settings['ignore_paths'].kind_of?(Array)
82
+ errors.push("Ignore Paths #{settings['ignore_paths']} should be Array.")
83
+ end
84
+ if !settings.has_key?('url_pattern') || settings['url_pattern'].length == 0
85
+ errors.push("Url pattern #{settings['url_pattern']} is not valid.")
86
+ end
87
+ if !settings.has_key?('query') || !settings['query'].kind_of?(Array)
88
+ errors.push("query config #{settings['query']} is not valid.")
89
+ end
90
+ if !settings.has_key?('ignore_class') || !settings['ignore_class'].kind_of?(Array)
91
+ errors.push("ignore_class config #{settings['ignore_class']} should be Array.")
92
+ end
93
+ if !settings.has_key?('api_url') || settings['api_url'].length == 0
94
+ errors.push("API URL is not configured.")
95
+ end
96
+ if !settings.has_key?('default_lang') || settings['default_lang'].nil?
97
+ errors.push("Default lang #{settings['default_lang']} is not valid.")
98
+ end
99
+ if !settings.has_key?('supported_langs') || !settings['supported_langs'].kind_of?(Array) || settings['supported_langs'].size < 1
100
+ errors.push("Supported langs configuration is not valid.")
101
+ end
102
+ if !settings.has_key?('custom_lang_aliases') || !settings['custom_lang_aliases'].kind_of?(Hash)
103
+ errors.push("Custom lang aliases is not valid.")
104
+ end
105
+ # log errors
106
+ if errors.length > 0
107
+ valid = false
108
+ errors.each do |e|
109
+ WovnLogger.instance.error(e)
110
+ end
111
+ end
112
+ valid
113
+ end
114
+
115
+ # Returns the settings object, pulling from Rails config the first time this is called
116
+ #
117
+ def settings
118
+ load_settings unless @config_loaded
119
+ @settings
120
+ end
121
+
122
+ # Load Rails config.wovnrb
123
+ #
124
+ def load_settings
125
+ if Object.const_defined?(:Rails) && Rails.configuration.respond_to?(:wovnrb)
126
+ @config_loaded = true
127
+ update_settings(Rails.configuration.wovnrb)
128
+ end
129
+ end
130
+
131
+ def update_settings(new_settings)
132
+ load_settings unless @config_loaded
133
+ if !new_settings.nil?
134
+ @settings.merge!(new_settings.stringify_keys)
135
+ format_settings
136
+ end
137
+ end
138
+
139
+ def format_settings
140
+ if @settings.has_key?('custom_lang_aliases')
141
+ stringify_keys! @settings['custom_lang_aliases']
142
+ end
143
+
144
+ @settings['default_lang'] = Lang.get_code(@settings['default_lang'])
145
+
146
+ if !@settings.has_key?('supported_langs')
147
+ @settings['supported_langs'] = [@settings['default_lang']]
148
+ end
149
+
150
+ if @settings.has_key?('user_token') && @settings['project_token'].empty?
151
+ @settings['project_token'] = @settings['user_token']
152
+ end
153
+ @settings.delete('user_token')
154
+
155
+ case @settings['url_pattern']
156
+ when 'path'
157
+ @settings['url_pattern_reg'] = "/(?<lang>[^/.?]+)"
158
+ when 'query'
159
+ @settings['url_pattern_reg'] = "((\\?.*&)|\\?)#{@settings['lang_param_name']}=(?<lang>[^&]+)(&|$)"
160
+ when 'subdomain'
161
+ @settings['url_pattern_reg'] = '^(?<lang>[^.]+)\.'
162
+ when 'custom_domain'
163
+ # Do not use regex
164
+ end
165
+
166
+ @settings['test_mode'] = !(@settings['test_mode'] != true || @settings['test_mode'] != 'on')
167
+
168
+ if @settings['wovn_dev_mode']
169
+ if @settings['api_url'] == self.class.default_settings['api_url']
170
+ @settings['api_url'] = 'http://dev-wovn.io:3001'
171
+ end
172
+
173
+ if @settings['api_timeout_seconds'] == self.class.default_settings['api_timeout_seconds']
174
+ @settings['api_timeout_seconds'] = 3.0
175
+ end
176
+ end
177
+
178
+ @settings['hreflang_x_default_lang'] = Lang.get_code(@settings['hreflang_x_default_lang'])
179
+ end
180
+
181
+ def custom_lang_aliases
182
+ @settings['custom_lang_aliases'] || {}
183
+ end
184
+
185
+ def hreflang_x_default_lang_or_default
186
+ @settings['hreflang_x_default_lang'] || default_lang
187
+ end
188
+
189
+ def default_lang
190
+ @settings['default_lang']
191
+ end
192
+
193
+ def default_lang_alias
194
+ custom_alias = custom_lang_aliases[default_lang]
195
+ custom_alias || default_lang
196
+ end
197
+
198
+ def supported_langs
199
+ @settings['supported_langs'] || []
200
+ end
201
+
202
+ def compress_api_requests?
203
+ @settings['compress_api_requests']
204
+ end
205
+
206
+ def widget_url
207
+ @settings['widget_url'] || 'https://j.wovn.io/1'
208
+ end
209
+
210
+ def dev_mode?
211
+ @settings['wovn_dev_mode']
212
+ end
213
+
214
+ def url_pattern
215
+ @settings['url_pattern']
216
+ end
217
+
218
+ def custom_domain_langs
219
+ @custom_domain_langs ||= CustomDomainLangs.new(@settings['custom_domain_langs'])
220
+ end
221
+
222
+ private
223
+
224
+ def stringify_keys!(hash)
225
+ hash.keys.each do |k|
226
+ hash[k.to_s] = hash.delete(k)
227
+ end
228
+ end
229
+ end
230
+ end
@@ -1,3 +1,3 @@
1
- module Wovnrb
2
- VERSION = '3.11.0'.freeze
3
- end
1
+ module Wovnrb
2
+ VERSION = '3.13.0'.freeze
3
+ end