wovnrb 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|