wovnrb 1.0.1 → 1.0.2
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 +4 -4
- data/lib/wovnrb.rb +3 -5
- data/lib/wovnrb/settings.rb +37 -0
- data/lib/wovnrb/store.rb +4 -13
- data/lib/wovnrb/version.rb +1 -1
- data/test/lib/wovnrb_test.rb +28 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 844be0f5a9ee0ac6e995181311d020956f456ed7
|
4
|
+
data.tar.gz: 10fc8b27efd2ea6c5ad091031916cbee54b75d00
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fbc82de4f3344432c508dc28b43fe727e99c8ac1b30691d90aac8c71e6a696d44dd3f06d5503dd78317ad0b3069b56d5684c7460e490cd76a2bbe1d53e43352f
|
7
|
+
data.tar.gz: 056f1cc3176e6fca9fe867e57d35139eb7605bd3a6bebbecc271cafcf17a50e22d051daa5a2ed38f1f62a7ec70c201127e20b12eca5d225cf44a5ae6438a31eb
|
data/lib/wovnrb.rb
CHANGED
@@ -28,6 +28,7 @@ module Wovnrb
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def call(env)
|
31
|
+
@store.settings.clear_dynamic_settings!
|
31
32
|
unless Store.instance.valid_settings?
|
32
33
|
return @app.call(env)
|
33
34
|
end
|
@@ -50,11 +51,9 @@ module Wovnrb
|
|
50
51
|
|
51
52
|
request = Rack::Request.new(env)
|
52
53
|
unless request.params['wovn_disable'] == true
|
54
|
+
@store.settings.update_dynamic_settings!(request.params)
|
53
55
|
unless @store.settings['ignore_globs'].any?{|g| g.match?(headers.pathname)}
|
54
|
-
|
55
|
-
if @store.valid_token?(request.params['wovn_token'])
|
56
|
-
@store.settings['project_token'] = request.params['wovn_token']
|
57
|
-
end
|
56
|
+
|
58
57
|
# ApiData creates request for external server, but cannot use async.
|
59
58
|
# Because some server not allow multi thread. (env['async.callback'] is not supported at all Server).
|
60
59
|
api_data = ApiData.new(headers.redis_url, @store)
|
@@ -135,4 +134,3 @@ module Wovnrb
|
|
135
134
|
end
|
136
135
|
end
|
137
136
|
end
|
138
|
-
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Wovnrb
|
2
|
+
class Settings < Hash
|
3
|
+
def initialize(*args, **kwargs)
|
4
|
+
super(*args, **kwargs)
|
5
|
+
@dynamic_settings = {}
|
6
|
+
end
|
7
|
+
|
8
|
+
def [](key)
|
9
|
+
return @dynamic_settings[key] if @dynamic_settings.key?(key)
|
10
|
+
return ignore_globs if key == 'ignore_globs'
|
11
|
+
super(key)
|
12
|
+
end
|
13
|
+
|
14
|
+
def ignore_globs
|
15
|
+
ignore_paths = self['ignore_paths']
|
16
|
+
return [] unless ignore_paths.kind_of?(Array)
|
17
|
+
ignore_paths.map { |pattern| Glob.new(pattern) }
|
18
|
+
end
|
19
|
+
|
20
|
+
def clear_dynamic_settings!
|
21
|
+
@dynamic_settings.clear
|
22
|
+
end
|
23
|
+
|
24
|
+
def update_dynamic_settings!(params)
|
25
|
+
# If the user defines dynamic settings for this request, use it instead of the config
|
26
|
+
DYNAMIC_KEYS.each do |params_key, setting_key|
|
27
|
+
value = params[params_key]
|
28
|
+
@dynamic_settings[setting_key] = value if value
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
DYNAMIC_KEYS = {
|
33
|
+
'wovn_token' => 'project_token',
|
34
|
+
'wovn_ignore_paths' => 'ignore_paths',
|
35
|
+
}
|
36
|
+
end
|
37
|
+
end
|
data/lib/wovnrb/store.rb
CHANGED
@@ -4,6 +4,7 @@ require 'cgi'
|
|
4
4
|
require 'singleton'
|
5
5
|
require 'wovnrb/services/wovn_logger'
|
6
6
|
require 'wovnrb/services/glob'
|
7
|
+
require 'wovnrb/settings'
|
7
8
|
require 'active_support'
|
8
9
|
|
9
10
|
module Wovnrb
|
@@ -11,7 +12,7 @@ module Wovnrb
|
|
11
12
|
include Singleton
|
12
13
|
|
13
14
|
def self.default_settings
|
14
|
-
{
|
15
|
+
Settings.new.merge({
|
15
16
|
'project_token' => '',
|
16
17
|
'log_path' => 'log/wovn_error.log',
|
17
18
|
'ignore_paths' => [],
|
@@ -30,11 +31,11 @@ module Wovnrb
|
|
30
31
|
'use_proxy' => false, # use env['HTTP_X_FORWARDED_HOST'] instead of env['HTTP_HOST'] and env['SERVER_NAME'] when this setting is true.
|
31
32
|
'custom_lang_aliases' => {},
|
32
33
|
'wovn_dev_mode' => false
|
33
|
-
}
|
34
|
+
})
|
34
35
|
end
|
35
36
|
|
36
37
|
def initialize
|
37
|
-
@settings =
|
38
|
+
@settings = Settings.new
|
38
39
|
@config_loaded = false
|
39
40
|
reset
|
40
41
|
end
|
@@ -127,7 +128,6 @@ module Wovnrb
|
|
127
128
|
end
|
128
129
|
@settings.merge!(Rails.configuration.wovnrb.stringify_keys)
|
129
130
|
end
|
130
|
-
cleanSettings
|
131
131
|
|
132
132
|
# fix settings object
|
133
133
|
@settings['default_lang'] = Lang.get_code(@settings['default_lang'])
|
@@ -154,12 +154,6 @@ module Wovnrb
|
|
154
154
|
@settings['test_mode'] = true
|
155
155
|
end
|
156
156
|
|
157
|
-
if @settings['ignore_paths'].kind_of?(Array)
|
158
|
-
@settings['ignore_globs'] = @settings['ignore_paths'].map do |pattern|
|
159
|
-
Glob.new(pattern)
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
157
|
if @settings.has_key?('custom_lang_aliases')
|
164
158
|
stringify_keys! @settings['custom_lang_aliases']
|
165
159
|
end
|
@@ -185,9 +179,6 @@ module Wovnrb
|
|
185
179
|
end
|
186
180
|
|
187
181
|
private
|
188
|
-
def cleanSettings
|
189
|
-
@settings['ignore_globs'] = []
|
190
|
-
end
|
191
182
|
|
192
183
|
def stringify_keys!(h)
|
193
184
|
h.keys.each do |k|
|
data/lib/wovnrb/version.rb
CHANGED
data/test/lib/wovnrb_test.rb
CHANGED
@@ -53,17 +53,27 @@ class WovnrbTest < Minitest::Test
|
|
53
53
|
|
54
54
|
def test_request_wovn_token
|
55
55
|
settings = Wovnrb.get_settings
|
56
|
-
|
56
|
+
default_token = 'token0'
|
57
57
|
request_token = 'token1'
|
58
|
+
settings['project_token'] = default_token
|
58
59
|
url = 'wovn.io/dashboard'
|
59
60
|
stub = stub_request(:get, "#{settings['api_url']}?token=#{request_token}&url=#{url}").
|
60
61
|
to_return(:body => '{"test_body": "a"}')
|
61
62
|
|
62
|
-
|
63
|
+
app = get_app(:params => {'wovn_token' => request_token})
|
64
|
+
i = Wovnrb::Interceptor.new(app, settings)
|
63
65
|
|
64
66
|
env = Wovnrb.get_env
|
65
67
|
i.call(env)
|
66
68
|
assert_requested(stub, :times => 1)
|
69
|
+
|
70
|
+
# check use default a token after use dynamic token
|
71
|
+
stub_default = stub_request(:get, "#{settings['api_url']}?token=#{default_token}&url=#{url}").
|
72
|
+
to_return(:body => '{"test_body": "a"}')
|
73
|
+
app.params.clear
|
74
|
+
env['rack.request.query_hash'] = {}
|
75
|
+
i.call(env)
|
76
|
+
assert_requested(stub_default, :times => 1)
|
67
77
|
end
|
68
78
|
|
69
79
|
def test_request_invalid_wovn_token
|
@@ -81,6 +91,20 @@ class WovnrbTest < Minitest::Test
|
|
81
91
|
assert_requested(stub, :times => 1)
|
82
92
|
end
|
83
93
|
|
94
|
+
def test_request_wovn_ignore_paths
|
95
|
+
settings = Wovnrb.get_settings
|
96
|
+
url = 'wovn.io/dashboard'
|
97
|
+
stub = stub_request(:get, "#{settings['api_url']}?token=#{settings['project_token']}&url=#{url}").
|
98
|
+
to_return(:body => '{"test_body": "a"}')
|
99
|
+
|
100
|
+
app = get_app(:params => {'wovn_ignore_paths' => ['/dashboard']})
|
101
|
+
i = Wovnrb::Interceptor.new(app, settings)
|
102
|
+
|
103
|
+
env = Wovnrb.get_env
|
104
|
+
i.call(env)
|
105
|
+
assert_requested(stub, :times => 0)
|
106
|
+
end
|
107
|
+
|
84
108
|
def test_request_wovn_disable
|
85
109
|
settings = Wovnrb.get_settings
|
86
110
|
token = settings['project_token']
|
@@ -335,6 +359,8 @@ HTML
|
|
335
359
|
end
|
336
360
|
|
337
361
|
class RackMock
|
362
|
+
attr_accessor :params
|
363
|
+
|
338
364
|
def initialize(opts={})
|
339
365
|
@params = {}
|
340
366
|
if opts.has_key?(:params) && opts[:params].class == Hash
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wovnrb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Sandford
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-
|
12
|
+
date: 2018-04-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogumbo
|
@@ -364,6 +364,7 @@ files:
|
|
364
364
|
- lib/wovnrb/services/glob.rb
|
365
365
|
- lib/wovnrb/services/url.rb
|
366
366
|
- lib/wovnrb/services/wovn_logger.rb
|
367
|
+
- lib/wovnrb/settings.rb
|
367
368
|
- lib/wovnrb/store.rb
|
368
369
|
- lib/wovnrb/text_caches/cache_base.rb
|
369
370
|
- lib/wovnrb/text_caches/memory_cache.rb
|