wovnrb 3.10.1 → 3.10.3

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,221 +1,221 @@
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
- )
46
- end
47
-
48
- def initialize
49
- reset
50
- end
51
-
52
- # Reset @settings and @config_loaded variables to default.
53
- #
54
- # @return [nil]
55
- def reset
56
- @settings = Store.default_settings
57
- @custom_domain_langs = nil
58
- # When Store is initialized, the Rails.configuration object is not yet initialized
59
- @config_loaded = false
60
- end
61
-
62
- # Returns true or false based on whether the token is valid or not
63
- #
64
- # @return [Boolean] Returns true if the token is valid, and false if it is not
65
- def valid_token?(token)
66
- !token.nil? && (token.length == 5 || token.length == 6)
67
- end
68
-
69
- # Returns true or false based on whether the settings are valid or not, logs any invalid settings to ../error.log
70
- #
71
- # @return [Boolean] Returns true if the settings are valid, and false if they are not
72
- def valid_settings?
73
- valid = true
74
- errors = []
75
- # if valid_token?(!settings.has_key?('project_token') || settings['project_token'].length < 5 || settings['project_token'].length > 6
76
- if !valid_token?(settings['project_token'])
77
- errors.push("Project token #{settings['project_token']} is not valid.")
78
- end
79
- if settings.has_key?('ignore_paths') && !settings['ignore_paths'].kind_of?(Array)
80
- errors.push("Ignore Paths #{settings['ignore_paths']} should be Array.")
81
- end
82
- if !settings.has_key?('url_pattern') || settings['url_pattern'].length == 0
83
- errors.push("Url pattern #{settings['url_pattern']} is not valid.")
84
- end
85
- if !settings.has_key?('query') || !settings['query'].kind_of?(Array)
86
- errors.push("query config #{settings['query']} is not valid.")
87
- end
88
- if !settings.has_key?('ignore_class') || !settings['ignore_class'].kind_of?(Array)
89
- errors.push("ignore_class config #{settings['ignore_class']} should be Array.")
90
- end
91
- if !settings.has_key?('api_url') || settings['api_url'].length == 0
92
- errors.push("API URL is not configured.")
93
- end
94
- if !settings.has_key?('default_lang') || settings['default_lang'].nil?
95
- errors.push("Default lang #{settings['default_lang']} is not valid.")
96
- end
97
- if !settings.has_key?('supported_langs') || !settings['supported_langs'].kind_of?(Array) || settings['supported_langs'].size < 1
98
- errors.push("Supported langs configuration is not valid.")
99
- end
100
- if !settings.has_key?('custom_lang_aliases') || !settings['custom_lang_aliases'].kind_of?(Hash)
101
- errors.push("Custom lang aliases is not valid.")
102
- end
103
- # log errors
104
- if errors.length > 0
105
- valid = false
106
- errors.each do |e|
107
- WovnLogger.instance.error(e)
108
- end
109
- end
110
- valid
111
- end
112
-
113
- # Returns the settings object, pulling from Rails config the first time this is called
114
- #
115
- def settings
116
- load_settings unless @config_loaded
117
- @settings
118
- end
119
-
120
- # Load Rails config.wovnrb
121
- #
122
- def load_settings
123
- if Object.const_defined?(:Rails) && Rails.configuration.respond_to?(:wovnrb)
124
- @config_loaded = true
125
- update_settings(Rails.configuration.wovnrb)
126
- end
127
- end
128
-
129
- def update_settings(new_settings)
130
- load_settings unless @config_loaded
131
- if !new_settings.nil?
132
- @settings.merge!(new_settings.stringify_keys)
133
- format_settings
134
- end
135
- end
136
-
137
- def format_settings
138
- if @settings.has_key?('custom_lang_aliases')
139
- stringify_keys! @settings['custom_lang_aliases']
140
- end
141
-
142
- @settings['default_lang'] = Lang.get_code(@settings['default_lang'])
143
- if !@settings.has_key?('supported_langs')
144
- @settings['supported_langs'] = [@settings['default_lang']]
145
- end
146
-
147
- if @settings.has_key?('user_token') && @settings['project_token'].empty?
148
- @settings['project_token'] = @settings['user_token']
149
- end
150
- @settings.delete('user_token')
151
-
152
- case @settings['url_pattern']
153
- when 'path'
154
- @settings['url_pattern_reg'] = "/(?<lang>[^/.?]+)"
155
- when 'query'
156
- @settings['url_pattern_reg'] = "((\\?.*&)|\\?)#{@settings['lang_param_name']}=(?<lang>[^&]+)(&|$)"
157
- when 'subdomain'
158
- @settings['url_pattern_reg'] = '^(?<lang>[^.]+)\.'
159
- when 'custom_domain'
160
- # Do not use regex
161
- end
162
-
163
- @settings['test_mode'] = !(@settings['test_mode'] != true || @settings['test_mode'] != 'on')
164
-
165
- if @settings['wovn_dev_mode']
166
- if @settings['api_url'] == self.class.default_settings['api_url']
167
- @settings['api_url'] = 'http://dev-wovn.io:3001'
168
- end
169
-
170
- if @settings['api_timeout_seconds'] == self.class.default_settings['api_timeout_seconds']
171
- @settings['api_timeout_seconds'] = 3.0
172
- end
173
- end
174
- end
175
-
176
- def custom_lang_aliases
177
- @settings['custom_lang_aliases'] || {}
178
- end
179
-
180
- def default_lang
181
- @settings['default_lang']
182
- end
183
-
184
- def default_lang_alias
185
- custom_alias = custom_lang_aliases[default_lang]
186
- custom_alias || default_lang
187
- end
188
-
189
- def supported_langs
190
- @settings['supported_langs'] || []
191
- end
192
-
193
- def compress_api_requests?
194
- @settings['compress_api_requests']
195
- end
196
-
197
- def widget_url
198
- @settings['widget_url'] || 'https://j.wovn.io/1'
199
- end
200
-
201
- def dev_mode?
202
- @settings['wovn_dev_mode']
203
- end
204
-
205
- def url_pattern
206
- @settings['url_pattern']
207
- end
208
-
209
- def custom_domain_langs
210
- @custom_domain_langs ||= CustomDomainLangs.new(@settings['custom_domain_langs'])
211
- end
212
-
213
- private
214
-
215
- def stringify_keys!(hash)
216
- hash.keys.each do |k|
217
- hash[k.to_s] = hash.delete(k)
218
- end
219
- end
220
- end
221
- 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
+ '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
+ )
46
+ end
47
+
48
+ def initialize
49
+ reset
50
+ end
51
+
52
+ # Reset @settings and @config_loaded variables to default.
53
+ #
54
+ # @return [nil]
55
+ def reset
56
+ @settings = Store.default_settings
57
+ @custom_domain_langs = nil
58
+ # When Store is initialized, the Rails.configuration object is not yet initialized
59
+ @config_loaded = false
60
+ end
61
+
62
+ # Returns true or false based on whether the token is valid or not
63
+ #
64
+ # @return [Boolean] Returns true if the token is valid, and false if it is not
65
+ def valid_token?(token)
66
+ !token.nil? && (token.length == 5 || token.length == 6)
67
+ end
68
+
69
+ # Returns true or false based on whether the settings are valid or not, logs any invalid settings to ../error.log
70
+ #
71
+ # @return [Boolean] Returns true if the settings are valid, and false if they are not
72
+ def valid_settings?
73
+ valid = true
74
+ errors = []
75
+ # if valid_token?(!settings.has_key?('project_token') || settings['project_token'].length < 5 || settings['project_token'].length > 6
76
+ if !valid_token?(settings['project_token'])
77
+ errors.push("Project token #{settings['project_token']} is not valid.")
78
+ end
79
+ if settings.has_key?('ignore_paths') && !settings['ignore_paths'].kind_of?(Array)
80
+ errors.push("Ignore Paths #{settings['ignore_paths']} should be Array.")
81
+ end
82
+ if !settings.has_key?('url_pattern') || settings['url_pattern'].length == 0
83
+ errors.push("Url pattern #{settings['url_pattern']} is not valid.")
84
+ end
85
+ if !settings.has_key?('query') || !settings['query'].kind_of?(Array)
86
+ errors.push("query config #{settings['query']} is not valid.")
87
+ end
88
+ if !settings.has_key?('ignore_class') || !settings['ignore_class'].kind_of?(Array)
89
+ errors.push("ignore_class config #{settings['ignore_class']} should be Array.")
90
+ end
91
+ if !settings.has_key?('api_url') || settings['api_url'].length == 0
92
+ errors.push("API URL is not configured.")
93
+ end
94
+ if !settings.has_key?('default_lang') || settings['default_lang'].nil?
95
+ errors.push("Default lang #{settings['default_lang']} is not valid.")
96
+ end
97
+ if !settings.has_key?('supported_langs') || !settings['supported_langs'].kind_of?(Array) || settings['supported_langs'].size < 1
98
+ errors.push("Supported langs configuration is not valid.")
99
+ end
100
+ if !settings.has_key?('custom_lang_aliases') || !settings['custom_lang_aliases'].kind_of?(Hash)
101
+ errors.push("Custom lang aliases is not valid.")
102
+ end
103
+ # log errors
104
+ if errors.length > 0
105
+ valid = false
106
+ errors.each do |e|
107
+ WovnLogger.instance.error(e)
108
+ end
109
+ end
110
+ valid
111
+ end
112
+
113
+ # Returns the settings object, pulling from Rails config the first time this is called
114
+ #
115
+ def settings
116
+ load_settings unless @config_loaded
117
+ @settings
118
+ end
119
+
120
+ # Load Rails config.wovnrb
121
+ #
122
+ def load_settings
123
+ if Object.const_defined?(:Rails) && Rails.configuration.respond_to?(:wovnrb)
124
+ @config_loaded = true
125
+ update_settings(Rails.configuration.wovnrb)
126
+ end
127
+ end
128
+
129
+ def update_settings(new_settings)
130
+ load_settings unless @config_loaded
131
+ if !new_settings.nil?
132
+ @settings.merge!(new_settings.stringify_keys)
133
+ format_settings
134
+ end
135
+ end
136
+
137
+ def format_settings
138
+ if @settings.has_key?('custom_lang_aliases')
139
+ stringify_keys! @settings['custom_lang_aliases']
140
+ end
141
+
142
+ @settings['default_lang'] = Lang.get_code(@settings['default_lang'])
143
+ if !@settings.has_key?('supported_langs')
144
+ @settings['supported_langs'] = [@settings['default_lang']]
145
+ end
146
+
147
+ if @settings.has_key?('user_token') && @settings['project_token'].empty?
148
+ @settings['project_token'] = @settings['user_token']
149
+ end
150
+ @settings.delete('user_token')
151
+
152
+ case @settings['url_pattern']
153
+ when 'path'
154
+ @settings['url_pattern_reg'] = "/(?<lang>[^/.?]+)"
155
+ when 'query'
156
+ @settings['url_pattern_reg'] = "((\\?.*&)|\\?)#{@settings['lang_param_name']}=(?<lang>[^&]+)(&|$)"
157
+ when 'subdomain'
158
+ @settings['url_pattern_reg'] = '^(?<lang>[^.]+)\.'
159
+ when 'custom_domain'
160
+ # Do not use regex
161
+ end
162
+
163
+ @settings['test_mode'] = !(@settings['test_mode'] != true || @settings['test_mode'] != 'on')
164
+
165
+ if @settings['wovn_dev_mode']
166
+ if @settings['api_url'] == self.class.default_settings['api_url']
167
+ @settings['api_url'] = 'http://dev-wovn.io:3001'
168
+ end
169
+
170
+ if @settings['api_timeout_seconds'] == self.class.default_settings['api_timeout_seconds']
171
+ @settings['api_timeout_seconds'] = 3.0
172
+ end
173
+ end
174
+ end
175
+
176
+ def custom_lang_aliases
177
+ @settings['custom_lang_aliases'] || {}
178
+ end
179
+
180
+ def default_lang
181
+ @settings['default_lang']
182
+ end
183
+
184
+ def default_lang_alias
185
+ custom_alias = custom_lang_aliases[default_lang]
186
+ custom_alias || default_lang
187
+ end
188
+
189
+ def supported_langs
190
+ @settings['supported_langs'] || []
191
+ end
192
+
193
+ def compress_api_requests?
194
+ @settings['compress_api_requests']
195
+ end
196
+
197
+ def widget_url
198
+ @settings['widget_url'] || 'https://j.wovn.io/1'
199
+ end
200
+
201
+ def dev_mode?
202
+ @settings['wovn_dev_mode']
203
+ end
204
+
205
+ def url_pattern
206
+ @settings['url_pattern']
207
+ end
208
+
209
+ def custom_domain_langs
210
+ @custom_domain_langs ||= CustomDomainLangs.new(@settings['custom_domain_langs'])
211
+ end
212
+
213
+ private
214
+
215
+ def stringify_keys!(hash)
216
+ hash.keys.each do |k|
217
+ hash[k.to_s] = hash.delete(k)
218
+ end
219
+ end
220
+ end
221
+ end
@@ -1,3 +1,3 @@
1
- module Wovnrb
2
- VERSION = '3.10.1'.freeze
3
- end
1
+ module Wovnrb
2
+ VERSION = '3.10.3'.freeze
3
+ end