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 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