wovnrb 3.11.0 → 3.11.1

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