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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3ad74f869ecc0be459d21358a460e978cd01a30f
4
- data.tar.gz: db9d85d8c7b8557b9b844852115b3773b76cffaf
3
+ metadata.gz: 844be0f5a9ee0ac6e995181311d020956f456ed7
4
+ data.tar.gz: 10fc8b27efd2ea6c5ad091031916cbee54b75d00
5
5
  SHA512:
6
- metadata.gz: 3895654264d2a0d400a3cc1e1e7531a71164abc3536d8448b07d7a8aae22cbf439d2068e9a5fe00fad8c4c58d7cad98d570501c953087d2b8421ba6ebeb72005
7
- data.tar.gz: db48ead4d587534e334449850e5ebbc5dfd35089a4afc0a4c79d4c858cba3e831dad8d5f79b5d6cdd9f0ec9c5d4856c28e96a255f53f36520d532a44d265b964
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
- # If the user defines a token for this request, use it instead of the config token
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|
@@ -1,3 +1,3 @@
1
1
  module Wovnrb
2
- VERSION = "1.0.1"
2
+ VERSION = "1.0.2"
3
3
  end
@@ -53,17 +53,27 @@ class WovnrbTest < Minitest::Test
53
53
 
54
54
  def test_request_wovn_token
55
55
  settings = Wovnrb.get_settings
56
- settings['project_token'] = 'token0'
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
- i = Wovnrb::Interceptor.new(get_app(:params => {'wovn_token' => request_token}), settings)
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.1
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-03-22 00:00:00.000000000 Z
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