request_store 1.3.2 → 1.4.0
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 +7 -0
- data/.travis.yml +0 -1
- data/README.md +12 -1
- data/lib/request_store/middleware.rb +20 -3
- data/lib/request_store/version.rb +1 -1
- data/request_store.gemspec +2 -0
- data/test/middleware_test.rb +25 -5
- data/test/request_store_test.rb +4 -0
- data/test/test_helper.rb +2 -0
- metadata +27 -25
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 057f28c37dcfc7b49f7443c8440af572892672ee
|
4
|
+
data.tar.gz: b5d14983640d8e012ca2c153e2b8dddaa6ace337
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: cea24b9f63fa74fc0b0235d155133932fc018934b64dae3256266a320f060e2f10b004b48735926caaeacf64d28f5fcad336f3df4c5c436994a9c02ac5651994
|
7
|
+
data.tar.gz: 502ed5cb5807e7066fc3d2a0ac7d7f0d768af7f53c88f96e43c384ca57cfb9a371230f09c98692a8441c74e87c2402d68f09e48dc6aa8ba461892efc6af415c2
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -27,7 +27,7 @@ our controller:
|
|
27
27
|
def index
|
28
28
|
Thread.current[:counter] ||= 0
|
29
29
|
Thread.current[:counter] += 1
|
30
|
-
|
30
|
+
|
31
31
|
render :text => Thread.current[:counter]
|
32
32
|
end
|
33
33
|
```
|
@@ -97,6 +97,17 @@ def app
|
|
97
97
|
end
|
98
98
|
```
|
99
99
|
|
100
|
+
## Using with Sidekiq
|
101
|
+
|
102
|
+
This gem uses a Rack middleware to clear the store object after every request,
|
103
|
+
but that doesn't translate well to background processing with
|
104
|
+
[Sidekiq](https://github.com/mperham/sidekiq).
|
105
|
+
|
106
|
+
A companion library,
|
107
|
+
[request_store-sidekiq](https://rubygems.org/gems/request_store-sidekiq)
|
108
|
+
creates a Sidekiq middleware that will ensure the store is cleared after each
|
109
|
+
job is processed, for security and consistency with how this is done in Rack.
|
110
|
+
|
100
111
|
## Semantic Versioning
|
101
112
|
|
102
113
|
This project conforms to [semver](http://semver.org/). As a result of this
|
@@ -1,3 +1,12 @@
|
|
1
|
+
require 'rack/body_proxy'
|
2
|
+
|
3
|
+
# A middleware that ensures the RequestStore stays around until
|
4
|
+
# the last part of the body is rendered. This is useful when
|
5
|
+
# using streaming.
|
6
|
+
#
|
7
|
+
# Uses Rack::BodyProxy, adapted from Rack::Lock's usage of the
|
8
|
+
# same pattern.
|
9
|
+
|
1
10
|
module RequestStore
|
2
11
|
class Middleware
|
3
12
|
def initialize(app)
|
@@ -6,10 +15,18 @@ module RequestStore
|
|
6
15
|
|
7
16
|
def call(env)
|
8
17
|
RequestStore.begin!
|
9
|
-
|
18
|
+
|
19
|
+
response = @app.call(env)
|
20
|
+
|
21
|
+
returned = response << Rack::BodyProxy.new(response.pop) do
|
22
|
+
RequestStore.end!
|
23
|
+
RequestStore.clear!
|
24
|
+
end
|
10
25
|
ensure
|
11
|
-
|
12
|
-
|
26
|
+
unless returned
|
27
|
+
RequestStore.end!
|
28
|
+
RequestStore.clear!
|
29
|
+
end
|
13
30
|
end
|
14
31
|
end
|
15
32
|
end
|
data/request_store.gemspec
CHANGED
@@ -18,6 +18,8 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
19
19
|
gem.require_paths = ["lib"]
|
20
20
|
|
21
|
+
gem.add_dependency "rack", ">= 1.4"
|
22
|
+
|
21
23
|
gem.add_development_dependency "rake", "~> 10.5"
|
22
24
|
gem.add_development_dependency "minitest", "~> 5.0"
|
23
25
|
end
|
data/test/middleware_test.rb
CHANGED
@@ -9,8 +9,15 @@ class MiddlewareTest < Minitest::Test
|
|
9
9
|
@middleware = RequestStore::Middleware.new(@app)
|
10
10
|
end
|
11
11
|
|
12
|
+
def call_middleware(opts = {})
|
13
|
+
_, _, proxy = @middleware.call(opts)
|
14
|
+
proxy.close
|
15
|
+
end
|
16
|
+
|
12
17
|
def test_middleware_resets_store
|
13
|
-
2.times
|
18
|
+
2.times do
|
19
|
+
call_middleware
|
20
|
+
end
|
14
21
|
|
15
22
|
assert_equal 1, @app.last_value
|
16
23
|
assert_equal({}, RequestStore.store)
|
@@ -18,7 +25,7 @@ class MiddlewareTest < Minitest::Test
|
|
18
25
|
|
19
26
|
def test_middleware_resets_store_on_error
|
20
27
|
e = assert_raises RuntimeError do
|
21
|
-
|
28
|
+
call_middleware({:error => true})
|
22
29
|
end
|
23
30
|
|
24
31
|
assert_equal 'FAIL', e.message
|
@@ -26,20 +33,33 @@ class MiddlewareTest < Minitest::Test
|
|
26
33
|
end
|
27
34
|
|
28
35
|
def test_middleware_begins_store
|
29
|
-
|
36
|
+
call_middleware
|
30
37
|
assert_equal true, @app.store_active
|
31
38
|
end
|
32
39
|
|
33
40
|
def test_middleware_ends_store
|
34
|
-
|
41
|
+
call_middleware
|
42
|
+
|
35
43
|
assert_equal false, RequestStore.active?
|
36
44
|
end
|
37
45
|
|
38
46
|
def test_middleware_ends_store_on_error
|
39
47
|
assert_raises RuntimeError do
|
40
|
-
|
48
|
+
call_middleware({:error => true})
|
41
49
|
end
|
42
50
|
|
43
51
|
assert_equal false, RequestStore.active?
|
44
52
|
end
|
53
|
+
|
54
|
+
def test_middleware_stores_until_proxy_closes
|
55
|
+
_, _, proxy = @middleware.call({})
|
56
|
+
|
57
|
+
assert_equal 1, @app.last_value
|
58
|
+
assert RequestStore.active?
|
59
|
+
|
60
|
+
proxy.close
|
61
|
+
|
62
|
+
refute RequestStore.active?
|
63
|
+
refute RequestStore.store[:foo]
|
64
|
+
end
|
45
65
|
end
|
data/test/request_store_test.rb
CHANGED
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,46 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: request_store
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
5
|
-
prerelease:
|
4
|
+
version: 1.4.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Steve Klabnik
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2018-01-01 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rack
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.4'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.4'
|
14
27
|
- !ruby/object:Gem::Dependency
|
15
28
|
name: rake
|
16
29
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
30
|
requirements:
|
19
|
-
- - ~>
|
31
|
+
- - "~>"
|
20
32
|
- !ruby/object:Gem::Version
|
21
33
|
version: '10.5'
|
22
34
|
type: :development
|
23
35
|
prerelease: false
|
24
36
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
37
|
requirements:
|
27
|
-
- - ~>
|
38
|
+
- - "~>"
|
28
39
|
- !ruby/object:Gem::Version
|
29
40
|
version: '10.5'
|
30
41
|
- !ruby/object:Gem::Dependency
|
31
42
|
name: minitest
|
32
43
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
44
|
requirements:
|
35
|
-
- - ~>
|
45
|
+
- - "~>"
|
36
46
|
- !ruby/object:Gem::Version
|
37
47
|
version: '5.0'
|
38
48
|
type: :development
|
39
49
|
prerelease: false
|
40
50
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
51
|
requirements:
|
43
|
-
- - ~>
|
52
|
+
- - "~>"
|
44
53
|
- !ruby/object:Gem::Version
|
45
54
|
version: '5.0'
|
46
55
|
description: RequestStore gives you per-request global storage.
|
@@ -50,8 +59,8 @@ executables: []
|
|
50
59
|
extensions: []
|
51
60
|
extra_rdoc_files: []
|
52
61
|
files:
|
53
|
-
- .gitignore
|
54
|
-
- .travis.yml
|
62
|
+
- ".gitignore"
|
63
|
+
- ".travis.yml"
|
55
64
|
- Gemfile
|
56
65
|
- LICENSE.txt
|
57
66
|
- README.md
|
@@ -67,33 +76,26 @@ files:
|
|
67
76
|
homepage: http://github.com/steveklabnik/request_store
|
68
77
|
licenses:
|
69
78
|
- MIT
|
79
|
+
metadata: {}
|
70
80
|
post_install_message:
|
71
81
|
rdoc_options: []
|
72
82
|
require_paths:
|
73
83
|
- lib
|
74
84
|
required_ruby_version: !ruby/object:Gem::Requirement
|
75
|
-
none: false
|
76
85
|
requirements:
|
77
|
-
- -
|
86
|
+
- - ">="
|
78
87
|
- !ruby/object:Gem::Version
|
79
88
|
version: '0'
|
80
|
-
segments:
|
81
|
-
- 0
|
82
|
-
hash: 431099191289644974
|
83
89
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
|
-
none: false
|
85
90
|
requirements:
|
86
|
-
- -
|
91
|
+
- - ">="
|
87
92
|
- !ruby/object:Gem::Version
|
88
93
|
version: '0'
|
89
|
-
segments:
|
90
|
-
- 0
|
91
|
-
hash: 431099191289644974
|
92
94
|
requirements: []
|
93
95
|
rubyforge_project:
|
94
|
-
rubygems_version:
|
96
|
+
rubygems_version: 2.5.2
|
95
97
|
signing_key:
|
96
|
-
specification_version:
|
98
|
+
specification_version: 4
|
97
99
|
summary: RequestStore gives you per-request global storage.
|
98
100
|
test_files:
|
99
101
|
- test/middleware_test.rb
|