wovnrb 3.10.3 → 3.11.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/wovnrb/store.rb CHANGED
@@ -1,221 +1,222 @@
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
+ '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,3 +1,3 @@
1
- module Wovnrb
2
- VERSION = '3.10.3'.freeze
3
- end
1
+ module Wovnrb
2
+ VERSION = '3.11.0'.freeze
3
+ end