rack-redic 0.8.0 → 0.9.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 +4 -4
- data/README.md +3 -2
- data/rack-redic.gemspec +1 -1
- data/spec/session_redic_spec.rb +58 -58
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 40dde5a06978fa9fe3e55cde330dd66e1f8a4013
|
4
|
+
data.tar.gz: 8064abfba809f69394e93f5a939ae8bf5c72db01
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e2147b5ec8eac97ac224df68948ccda3a3bece63ba43231ec53ee2945a1b790141e6c234a01b5eb5704ac45d7190fb65eb1e4bb20b026ed381622e8ce07b16c7
|
7
|
+
data.tar.gz: 0c9479a5b108f286b45efdf939f87720a801c78e9d4fa6f709a450b40067992b4c89a3928d023d4794d78656202fb2bff06fc27b367adba3ff1b3724f81ec714
|
data/README.md
CHANGED
@@ -48,7 +48,7 @@ use Rack::Session::Redic, marshaller: Oj, url: 'redis://host:port', expire_after
|
|
48
48
|
|
49
49
|
### Custom Marshallers
|
50
50
|
|
51
|
-
Since the class/module passed as `:marshaller` only needs to respond to the methods `load` and `dump
|
51
|
+
Since the class/module passed as `:marshaller` only needs to respond to the methods `load` and `dump`, you can create any kind of marshaller you would like. I've included examples for MessagePack and Oj here as reference.
|
52
52
|
|
53
53
|
#### [MessagePack](https://github.com/msgpack/msgpack-ruby)
|
54
54
|
|
@@ -86,9 +86,10 @@ Oj responds to `load` and `dump` by default so there's no adapter method needed.
|
|
86
86
|
use Rack::Session::Redic, marshaller: Oj
|
87
87
|
```
|
88
88
|
|
89
|
+
|
89
90
|
## Contributing
|
90
91
|
|
91
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/evanleck/rack-redic. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
92
|
+
Bug reports and pull requests are welcome on GitHub at [https://github.com/evanleck/rack-redic](https://github.com/evanleck/rack-redic). This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
92
93
|
|
93
94
|
|
94
95
|
## License
|
data/rack-redic.gemspec
CHANGED
data/spec/session_redic_spec.rb
CHANGED
@@ -42,98 +42,98 @@ describe Rack::Session::Redic do
|
|
42
42
|
|
43
43
|
it 'creates a new cookie' do
|
44
44
|
redic = Rack::Session::Redic.new(incrementor)
|
45
|
-
|
45
|
+
response = Rack::MockRequest.new(redic).get(ROOT)
|
46
46
|
|
47
|
-
expect(
|
48
|
-
expect(
|
47
|
+
expect(response[Rack::SET_COOKIE]).to include("#{ session_key }=")
|
48
|
+
expect(response.body).to eq('{"counter"=>1}')
|
49
49
|
end
|
50
50
|
|
51
51
|
it 'determines session from a cookie' do
|
52
52
|
redic = Rack::Session::Redic.new(incrementor)
|
53
|
-
|
54
|
-
|
53
|
+
request = Rack::MockRequest.new(redic)
|
54
|
+
response = request.get(ROOT)
|
55
55
|
|
56
|
-
cookie =
|
56
|
+
cookie = response[Rack::SET_COOKIE]
|
57
57
|
|
58
|
-
expect(
|
59
|
-
expect(
|
58
|
+
expect(request.get(ROOT, Rack::HTTP_COOKIE => cookie).body).to eq('{"counter"=>2}')
|
59
|
+
expect(request.get(ROOT, Rack::HTTP_COOKIE => cookie).body).to eq('{"counter"=>3}')
|
60
60
|
end
|
61
61
|
|
62
62
|
it 'determines session only from a cookie by default' do
|
63
63
|
redic = Rack::Session::Redic.new(incrementor)
|
64
|
-
|
65
|
-
|
66
|
-
sid =
|
64
|
+
request = Rack::MockRequest.new(redic)
|
65
|
+
response = request.get(ROOT)
|
66
|
+
sid = response[Rack::SET_COOKIE][session_match, 1]
|
67
67
|
|
68
|
-
expect(
|
69
|
-
expect(
|
68
|
+
expect(request.get("/?rack.session=#{sid}").body).to eq('{"counter"=>1}')
|
69
|
+
expect(request.get("/?rack.session=#{sid}").body).to eq('{"counter"=>1}')
|
70
70
|
end
|
71
71
|
|
72
72
|
it 'determines session from params' do
|
73
73
|
redic = Rack::Session::Redic.new(incrementor, cookie_only: false)
|
74
|
-
|
75
|
-
|
76
|
-
sid =
|
74
|
+
request = Rack::MockRequest.new(redic)
|
75
|
+
response = request.get(ROOT)
|
76
|
+
sid = response[Rack::SET_COOKIE][session_match, 1]
|
77
77
|
|
78
|
-
expect(
|
79
|
-
expect(
|
78
|
+
expect(request.get("/?rack.session=#{sid}").body).to eq('{"counter"=>2}')
|
79
|
+
expect(request.get("/?rack.session=#{sid}").body).to eq('{"counter"=>3}')
|
80
80
|
end
|
81
81
|
|
82
82
|
it 'survives nonexistant cookies' do
|
83
83
|
bad_cookie = "rack.session=#{ SecureRandom.hex(16) }"
|
84
84
|
|
85
85
|
redic = Rack::Session::Redic.new(incrementor)
|
86
|
-
|
86
|
+
response = Rack::MockRequest.new(redic).get(ROOT, Rack::HTTP_COOKIE => bad_cookie)
|
87
87
|
|
88
|
-
expect(
|
88
|
+
expect(response.body).to eq('{"counter"=>1}')
|
89
89
|
|
90
|
-
cookie =
|
90
|
+
cookie = response[Rack::SET_COOKIE][session_match]
|
91
91
|
expect(cookie).not_to match(/#{ bad_cookie }/)
|
92
92
|
end
|
93
93
|
|
94
94
|
it 'maintains freshness' do
|
95
95
|
redic = Rack::Session::Redic.new(incrementor, expire_after: 3)
|
96
|
-
|
97
|
-
expect(
|
96
|
+
response = Rack::MockRequest.new(redic).get(ROOT)
|
97
|
+
expect(response.body).to include('"counter"=>1')
|
98
98
|
|
99
|
-
cookie =
|
100
|
-
|
99
|
+
cookie = response[Rack::SET_COOKIE]
|
100
|
+
response = Rack::MockRequest.new(redic).get(ROOT, Rack::HTTP_COOKIE => cookie)
|
101
101
|
|
102
|
-
expect(
|
103
|
-
expect(
|
102
|
+
expect(response[Rack::SET_COOKIE]).to eq(cookie)
|
103
|
+
expect(response.body).to include('"counter"=>2')
|
104
104
|
|
105
105
|
puts 'Sleeping to expire session' if $DEBUG
|
106
106
|
sleep 4
|
107
107
|
|
108
|
-
|
109
|
-
expect(
|
110
|
-
expect(
|
108
|
+
response = Rack::MockRequest.new(redic).get(ROOT, Rack::HTTP_COOKIE => cookie)
|
109
|
+
expect(response[Rack::SET_COOKIE]).not_to eq(cookie)
|
110
|
+
expect(response.body).to include('"counter"=>1')
|
111
111
|
end
|
112
112
|
|
113
113
|
it 'does not send the same session id if it did not change' do
|
114
114
|
redic = Rack::Session::Redic.new(incrementor)
|
115
|
-
|
115
|
+
request = Rack::MockRequest.new(redic)
|
116
116
|
|
117
|
-
res0 =
|
117
|
+
res0 = request.get(ROOT)
|
118
118
|
cookie = res0[Rack::SET_COOKIE][session_match]
|
119
119
|
expect(res0.body).to eq('{"counter"=>1}')
|
120
120
|
|
121
|
-
res1 =
|
121
|
+
res1 = request.get(ROOT, Rack::HTTP_COOKIE => cookie)
|
122
122
|
expect(res1[Rack::SET_COOKIE]).to eq(nil)
|
123
123
|
expect(res1.body).to eq('{"counter"=>2}')
|
124
124
|
|
125
|
-
res2 =
|
125
|
+
res2 = request.get(ROOT, Rack::HTTP_COOKIE => cookie)
|
126
126
|
expect(res2[Rack::SET_COOKIE]).to eq(nil)
|
127
127
|
expect(res2.body).to eq('{"counter"=>3}')
|
128
128
|
end
|
129
129
|
|
130
130
|
it 'deletes cookies with :drop option' do
|
131
131
|
redic = Rack::Session::Redic.new(incrementor)
|
132
|
-
|
132
|
+
request = Rack::MockRequest.new(redic)
|
133
133
|
drop = Rack::Utils::Context.new(redic, drop_session)
|
134
134
|
dreq = Rack::MockRequest.new(drop)
|
135
135
|
|
136
|
-
res1 =
|
136
|
+
res1 = request.get(ROOT)
|
137
137
|
session = (cookie = res1[Rack::SET_COOKIE])[session_match]
|
138
138
|
expect(res1.body).to eq('{"counter"=>1}')
|
139
139
|
|
@@ -141,32 +141,32 @@ describe Rack::Session::Redic do
|
|
141
141
|
expect(res2[Rack::SET_COOKIE]).to eq(nil)
|
142
142
|
expect(res2.body).to eq('{"counter"=>2}')
|
143
143
|
|
144
|
-
res3 =
|
144
|
+
res3 = request.get(ROOT, Rack::HTTP_COOKIE => cookie)
|
145
145
|
expect(res3[Rack::SET_COOKIE][session_match]).not_to eq(session)
|
146
146
|
expect(res3.body).to eq('{"counter"=>1}')
|
147
147
|
end
|
148
148
|
|
149
149
|
it 'provides new session id with :renew option' do
|
150
150
|
redic = Rack::Session::Redic.new(incrementor)
|
151
|
-
|
151
|
+
request = Rack::MockRequest.new(redic)
|
152
152
|
renew = Rack::Utils::Context.new(redic, renew_session)
|
153
|
-
|
153
|
+
renew_request = Rack::MockRequest.new(renew)
|
154
154
|
|
155
|
-
res1 =
|
155
|
+
res1 = request.get(ROOT)
|
156
156
|
session = (cookie = res1[Rack::SET_COOKIE])[session_match]
|
157
157
|
expect(res1.body).to eq('{"counter"=>1}')
|
158
158
|
|
159
|
-
res2 =
|
159
|
+
res2 = renew_request.get(ROOT, Rack::HTTP_COOKIE => cookie)
|
160
160
|
new_cookie = res2[Rack::SET_COOKIE]
|
161
161
|
new_session = new_cookie[session_match]
|
162
162
|
expect(new_session).not_to eq(session)
|
163
163
|
expect(res2.body).to eq('{"counter"=>2}')
|
164
164
|
|
165
|
-
res3 =
|
165
|
+
res3 = request.get(ROOT, Rack::HTTP_COOKIE => new_cookie)
|
166
166
|
expect(res3.body).to eq('{"counter"=>3}')
|
167
167
|
|
168
168
|
# Old cookie was deleted
|
169
|
-
res4 =
|
169
|
+
res4 = request.get(ROOT, Rack::HTTP_COOKIE => cookie)
|
170
170
|
expect(res4.body).to eq('{"counter"=>1}')
|
171
171
|
end
|
172
172
|
|
@@ -174,17 +174,17 @@ describe Rack::Session::Redic do
|
|
174
174
|
redic = Rack::Session::Redic.new(incrementor)
|
175
175
|
count = Rack::Utils::Context.new(redic, incrementor)
|
176
176
|
defer = Rack::Utils::Context.new(redic, defer_session)
|
177
|
-
|
178
|
-
|
177
|
+
defer_request = Rack::MockRequest.new(defer)
|
178
|
+
count_request = Rack::MockRequest.new(count)
|
179
179
|
|
180
|
-
res0 =
|
180
|
+
res0 = defer_request.get(ROOT)
|
181
181
|
expect(res0[Rack::SET_COOKIE]).to eq(nil)
|
182
182
|
expect(res0.body).to eq('{"counter"=>1}')
|
183
183
|
|
184
|
-
res0 =
|
185
|
-
res1 =
|
184
|
+
res0 = count_request.get(ROOT)
|
185
|
+
res1 = defer_request.get(ROOT, Rack::HTTP_COOKIE => res0[Rack::SET_COOKIE])
|
186
186
|
expect(res1.body).to eq('{"counter"=>2}')
|
187
|
-
res2 =
|
187
|
+
res2 = defer_request.get(ROOT, Rack::HTTP_COOKIE => res0[Rack::SET_COOKIE])
|
188
188
|
expect(res2.body).to eq('{"counter"=>3}')
|
189
189
|
end
|
190
190
|
|
@@ -192,17 +192,17 @@ describe Rack::Session::Redic do
|
|
192
192
|
redic = Rack::Session::Redic.new(incrementor)
|
193
193
|
count = Rack::Utils::Context.new(redic, incrementor)
|
194
194
|
skip = Rack::Utils::Context.new(redic, skip_session)
|
195
|
-
|
196
|
-
|
195
|
+
skip_request = Rack::MockRequest.new(skip)
|
196
|
+
count_request = Rack::MockRequest.new(count)
|
197
197
|
|
198
|
-
res0 =
|
198
|
+
res0 = skip_request.get(ROOT)
|
199
199
|
expect(res0[Rack::SET_COOKIE]).to eq(nil)
|
200
200
|
expect(res0.body).to eq('{"counter"=>1}')
|
201
201
|
|
202
|
-
res0 =
|
203
|
-
res1 =
|
202
|
+
res0 = count_request.get(ROOT)
|
203
|
+
res1 = skip_request.get(ROOT, Rack::HTTP_COOKIE => res0[Rack::SET_COOKIE])
|
204
204
|
expect(res1.body).to eq('{"counter"=>2}')
|
205
|
-
res2 =
|
205
|
+
res2 = skip_request.get(ROOT, Rack::HTTP_COOKIE => res0[Rack::SET_COOKIE])
|
206
206
|
expect(res2.body).to eq('{"counter"=>2}')
|
207
207
|
end
|
208
208
|
|
@@ -220,13 +220,13 @@ describe Rack::Session::Redic do
|
|
220
220
|
end
|
221
221
|
|
222
222
|
redic = Rack::Session::Redic.new(hash_check)
|
223
|
-
|
223
|
+
request = Rack::MockRequest.new(redic)
|
224
224
|
|
225
|
-
res0 =
|
225
|
+
res0 = request.get(ROOT)
|
226
226
|
session_id = (cookie = res0[Rack::SET_COOKIE])[session_match, 1]
|
227
227
|
ses0 = redic.storage.get(session_id)
|
228
228
|
|
229
|
-
|
229
|
+
request.get(ROOT, Rack::HTTP_COOKIE => cookie)
|
230
230
|
ses1 = redic.storage.get(session_id)
|
231
231
|
|
232
232
|
expect(ses1).not_to eq(ses0)
|