action_controller_tweaks 0.3.1 → 0.3.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 +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +856 -0
- data/.travis.yml +11 -5
- data/Appraisals +20 -20
- data/CHANGELOG.md +73 -14
- data/Gemfile +1 -1
- data/README.md +7 -8
- data/Rakefile +4 -1
- data/action_controller_tweaks.gemspec +11 -9
- data/gemfiles/rails_5_0.gemfile +10 -0
- data/lib/action_controller_tweaks.rb +4 -4
- data/lib/action_controller_tweaks/caching.rb +8 -4
- data/lib/action_controller_tweaks/session.rb +71 -42
- data/lib/action_controller_tweaks/version.rb +1 -1
- data/spec/action_controller_tweaks_spec.rb +232 -173
- data/spec/fixtures/application.rb +8 -5
- data/spec/fixtures/controllers.rb +7 -5
- data/spec/spec_helper.rb +14 -14
- metadata +34 -19
- data/gemfiles/rails_3_2.gemfile +0 -10
@@ -1,29 +1,48 @@
|
|
1
|
-
require
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe NotController do
|
4
|
+
describe "::Session" do
|
5
|
+
context "when included by a class without `before_action` or `before_filter`" do
|
6
|
+
it "raises error" do
|
7
|
+
expect do
|
8
|
+
described_class.class_eval do
|
9
|
+
include ActionControllerTweaks::Session
|
10
|
+
end
|
11
|
+
end.to raise_error(NotImplementedError)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
2
16
|
|
3
17
|
describe PostsController, type: :controller do
|
4
|
-
describe
|
18
|
+
describe "included modules" do
|
5
19
|
specify do
|
6
20
|
expect(described_class.ancestors).to include(ActionControllerTweaks)
|
7
21
|
end
|
8
22
|
end
|
9
23
|
|
10
|
-
describe
|
11
|
-
describe
|
24
|
+
describe "::Caching" do
|
25
|
+
describe "#set_no_cache" do
|
12
26
|
before do
|
13
|
-
|
27
|
+
if Rails::VERSION::MAJOR >= 5
|
28
|
+
get :index, params: { no_cache: true }
|
29
|
+
else
|
30
|
+
get :index, no_cache: true
|
31
|
+
end
|
14
32
|
end
|
15
33
|
|
16
|
-
it
|
17
|
-
expect(controller.headers.
|
34
|
+
it "includes the pre defined headeres" do
|
35
|
+
expect(controller.headers.
|
36
|
+
deep_include?(ActionControllerTweaks::Caching::HEADERS)).to be true
|
18
37
|
end
|
19
38
|
end
|
20
39
|
end
|
21
40
|
|
22
|
-
describe
|
41
|
+
describe "::Session" do
|
23
42
|
let(:session_key) { :key }
|
24
|
-
let(:session_value) {
|
43
|
+
let(:session_value) { "value" }
|
25
44
|
|
26
|
-
describe
|
45
|
+
describe "#set_session" do
|
27
46
|
let(:expire_in) { 60 * 60 } # 1 hour
|
28
47
|
let(:expire_at) { Time.new(2014, 1, 1).in_time_zone }
|
29
48
|
let(:time_now) { Time.new(2013, 1, 1).in_time_zone }
|
@@ -31,32 +50,33 @@ describe PostsController, type: :controller do
|
|
31
50
|
let(:expires_in) { expire_in }
|
32
51
|
let(:expires_at) { expire_at }
|
33
52
|
|
34
|
-
context
|
53
|
+
context "when calling it without option" do
|
35
54
|
let :set_session do
|
36
55
|
controller.send(:set_session, session_key, session_value)
|
37
56
|
end
|
38
57
|
|
39
|
-
context
|
58
|
+
context "with normal key" do
|
40
59
|
before do
|
41
60
|
set_session
|
42
61
|
end
|
43
62
|
|
44
|
-
it
|
63
|
+
it "set the session" do
|
45
64
|
expect(session[session_key]).to eq session_value
|
46
65
|
end
|
47
66
|
end
|
48
67
|
|
49
|
-
context
|
68
|
+
context "with a reserved key" do
|
50
69
|
let(:session_key) { ActionControllerTweaks::Session::RESERVED_SESSION_KEYS.first }
|
51
70
|
|
52
|
-
it
|
53
|
-
expect { set_session }.
|
71
|
+
it "raise error" do
|
72
|
+
expect { set_session }.
|
73
|
+
to raise_error(ActionControllerTweaks::Session::Errors::ReservedSessionKeyConflict)
|
54
74
|
end
|
55
75
|
end
|
56
76
|
end
|
57
77
|
|
58
|
-
context
|
59
|
-
context
|
78
|
+
context "for old option keys" do
|
79
|
+
context "when calling it with option expire_in" do
|
60
80
|
let!(:time_before_expire) { time_now + (expire_in / 2) }
|
61
81
|
let!(:time_after_expire) { time_now + (expire_in * 2) }
|
62
82
|
|
@@ -69,294 +89,308 @@ describe PostsController, type: :controller do
|
|
69
89
|
Timecop.return
|
70
90
|
end
|
71
91
|
|
72
|
-
it
|
92
|
+
it "set the session" do
|
73
93
|
expect(session[session_key]).to eq session_value
|
74
94
|
end
|
75
95
|
|
76
|
-
context
|
96
|
+
context "before expire time" do
|
77
97
|
before do
|
78
98
|
Timecop.travel(time_before_expire)
|
79
99
|
# Runs before_filter
|
80
100
|
get :index
|
81
101
|
end
|
82
102
|
|
83
|
-
it
|
103
|
+
it "keeps the session key" do
|
84
104
|
expect(session[session_key]).to eq session_value
|
85
105
|
end
|
86
106
|
end
|
87
|
-
context
|
107
|
+
context "after expire time" do
|
88
108
|
before do
|
89
109
|
Timecop.travel(time_after_expire)
|
90
110
|
# Runs before_filter
|
91
111
|
get :index
|
92
112
|
end
|
93
113
|
|
94
|
-
it
|
114
|
+
it "keeps the session key" do
|
95
115
|
expect(session.key?(session_key)).to be false
|
96
116
|
end
|
97
117
|
end
|
98
118
|
end
|
99
119
|
|
100
|
-
context
|
120
|
+
context "when calling it with no option" do
|
101
121
|
before do
|
102
122
|
controller.send(:set_session, session_key, session_value)
|
103
123
|
end
|
104
124
|
|
105
|
-
it
|
125
|
+
it "set the session" do
|
106
126
|
expect(session[session_key]).to eq session_value
|
107
127
|
end
|
108
128
|
|
109
|
-
it
|
110
|
-
expect(session[
|
129
|
+
it "does NOT add the session key to `session_keys_to_expire`" do
|
130
|
+
expect(session["session_keys_to_expire"].keys).to_not include(session_key)
|
111
131
|
end
|
112
132
|
end
|
113
133
|
|
114
|
-
context
|
134
|
+
context "when calling it with option expire_at" do
|
115
135
|
let!(:time_before_expire) { expire_at - 1 }
|
116
136
|
let!(:time_after_expire) { expire_at + 1 }
|
117
137
|
|
118
138
|
before do
|
119
139
|
Timecop.freeze(time_now)
|
120
|
-
controller.send(:set_session,
|
140
|
+
controller.send(:set_session,
|
141
|
+
session_key, session_value, expire_at: expire_at)
|
121
142
|
end
|
122
143
|
|
123
144
|
after do
|
124
145
|
Timecop.return
|
125
146
|
end
|
126
147
|
|
127
|
-
it
|
148
|
+
it "set the session" do
|
128
149
|
expect(session[session_key]).to eq session_value
|
129
150
|
end
|
130
151
|
|
131
|
-
context
|
152
|
+
context "before expire time" do
|
132
153
|
before do
|
133
154
|
Timecop.travel(time_before_expire)
|
134
155
|
# Runs before_filter
|
135
156
|
get :index
|
136
157
|
end
|
137
158
|
|
138
|
-
it
|
159
|
+
it "keeps the session key" do
|
139
160
|
expect(session[session_key]).to eq session_value
|
140
161
|
end
|
141
162
|
end
|
142
|
-
context
|
163
|
+
context "after expire time" do
|
143
164
|
before do
|
144
165
|
Timecop.travel(time_after_expire)
|
145
166
|
# Runs before_filter
|
146
167
|
get :index
|
147
168
|
end
|
148
169
|
|
149
|
-
it
|
170
|
+
it "keeps the session key" do
|
150
171
|
expect(session.key?(session_key)).to be false
|
151
172
|
end
|
152
173
|
end
|
153
174
|
end
|
154
175
|
end
|
155
|
-
context
|
156
|
-
context
|
176
|
+
context "for new option keys" do
|
177
|
+
context "when calling it with option expires_in" do
|
157
178
|
let!(:time_before_expire) { time_now + (expires_in / 2) }
|
158
179
|
let!(:time_after_expire) { time_now + (expires_in * 2) }
|
159
180
|
|
160
181
|
before do
|
161
182
|
Timecop.freeze(time_now)
|
162
|
-
controller.send(:set_session,
|
183
|
+
controller.send(:set_session,
|
184
|
+
session_key, session_value, expires_in: expires_in)
|
163
185
|
end
|
164
186
|
|
165
187
|
after do
|
166
188
|
Timecop.return
|
167
189
|
end
|
168
190
|
|
169
|
-
it
|
191
|
+
it "set the session" do
|
170
192
|
expect(session[session_key]).to eq session_value
|
171
193
|
end
|
172
194
|
|
173
|
-
context
|
195
|
+
context "before expire time" do
|
174
196
|
before do
|
175
197
|
Timecop.travel(time_before_expire)
|
176
198
|
# Runs before_filter
|
177
199
|
get :index
|
178
200
|
end
|
179
201
|
|
180
|
-
it
|
202
|
+
it "keeps the session key" do
|
181
203
|
expect(session[session_key]).to eq session_value
|
182
204
|
end
|
183
205
|
end
|
184
|
-
context
|
206
|
+
context "after expire time" do
|
185
207
|
before do
|
186
208
|
Timecop.travel(time_after_expire)
|
187
209
|
# Runs before_filter
|
188
210
|
get :index
|
189
211
|
end
|
190
212
|
|
191
|
-
it
|
213
|
+
it "keeps the session key" do
|
192
214
|
expect(session.key?(session_key)).to be false
|
193
215
|
end
|
194
216
|
end
|
195
217
|
end
|
196
218
|
|
197
|
-
context
|
219
|
+
context "when calling it with option expires_at" do
|
198
220
|
let!(:time_before_expire) { expires_at - 1 }
|
199
221
|
let!(:time_after_expire) { expires_at + 1 }
|
200
222
|
|
201
223
|
before do
|
202
224
|
Timecop.freeze(time_now)
|
203
|
-
controller.send(:set_session,
|
225
|
+
controller.send(:set_session,
|
226
|
+
session_key, session_value, expire_at: expires_at)
|
204
227
|
end
|
205
228
|
|
206
229
|
after do
|
207
230
|
Timecop.return
|
208
231
|
end
|
209
232
|
|
210
|
-
it
|
233
|
+
it "set the session" do
|
211
234
|
expect(session[session_key]).to eq session_value
|
212
235
|
end
|
213
236
|
|
214
|
-
context
|
237
|
+
context "before expire time" do
|
215
238
|
before do
|
216
239
|
Timecop.travel(time_before_expire)
|
217
240
|
# Runs before_filter
|
218
241
|
get :index
|
219
242
|
end
|
220
243
|
|
221
|
-
it
|
244
|
+
it "keeps the session key" do
|
222
245
|
expect(session[session_key]).to eq session_value
|
223
246
|
end
|
224
247
|
end
|
225
|
-
context
|
248
|
+
context "after expire time" do
|
226
249
|
before do
|
227
250
|
Timecop.travel(time_after_expire)
|
228
251
|
# Runs before_filter
|
229
252
|
get :index
|
230
253
|
end
|
231
254
|
|
232
|
-
it
|
255
|
+
it "keeps the session key" do
|
233
256
|
expect(session.key?(session_key)).to be false
|
234
257
|
end
|
235
258
|
end
|
236
259
|
end
|
237
260
|
end
|
238
261
|
|
239
|
-
|
240
|
-
context 'when option value with different types is passed into options' do
|
262
|
+
context "when option value with different types is passed into options" do
|
241
263
|
let(:method_call) do
|
242
264
|
controller.send(:set_session, session_key, session_value, options)
|
243
265
|
end
|
244
266
|
|
245
|
-
context
|
246
|
-
context
|
267
|
+
context "for old option keys" do
|
268
|
+
context "for expire_in" do
|
247
269
|
let(:options) { {expire_in: expire_in.to_s} }
|
248
270
|
|
249
|
-
specify
|
271
|
+
specify do
|
272
|
+
expect { method_call }.
|
273
|
+
to raise_error(ActionControllerTweaks::Session::InvalidOptionValue)
|
274
|
+
end
|
250
275
|
end
|
251
|
-
context
|
252
|
-
context
|
276
|
+
context "for expire_at" do
|
277
|
+
context "with a Hash" do
|
253
278
|
# String#to_time would be nil if format invalid
|
254
279
|
let(:options) { {expire_at: {}} }
|
255
280
|
|
256
|
-
specify
|
281
|
+
specify do
|
282
|
+
expect { method_call }.
|
283
|
+
to raise_error(ActionControllerTweaks::Session::InvalidOptionValue)
|
284
|
+
end
|
257
285
|
end
|
258
|
-
context
|
286
|
+
context "with a blank String" do
|
259
287
|
# String#to_time would be nil if format invalid
|
260
|
-
let(:options) { {expire_at:
|
288
|
+
let(:options) { {expire_at: ""} }
|
261
289
|
|
262
|
-
specify { expect{ method_call }.to_not raise_error }
|
290
|
+
specify { expect { method_call }.to_not raise_error }
|
263
291
|
end
|
264
|
-
context
|
292
|
+
context "with a time String" do
|
265
293
|
let(:options) { {expire_at: expire_at.to_s} }
|
266
294
|
|
267
|
-
specify { expect{ method_call }.to_not raise_error }
|
295
|
+
specify { expect { method_call }.to_not raise_error }
|
268
296
|
end
|
269
|
-
context
|
297
|
+
context "with a Time" do
|
270
298
|
let(:options) { {expire_at: expire_at.to_time} }
|
271
299
|
|
272
|
-
specify { expect{ method_call }.to_not raise_error }
|
300
|
+
specify { expect { method_call }.to_not raise_error }
|
273
301
|
end
|
274
|
-
context
|
302
|
+
context "with a Date" do
|
275
303
|
let(:options) { {expire_at: expire_at.to_date} }
|
276
304
|
|
277
|
-
specify { expect{ method_call }.to_not raise_error }
|
305
|
+
specify { expect { method_call }.to_not raise_error }
|
278
306
|
end
|
279
|
-
context
|
307
|
+
context "with a DateTime" do
|
280
308
|
let(:options) { {expire_at: expire_at.in_time_zone} }
|
281
309
|
|
282
|
-
specify { expect{ method_call }.to_not raise_error }
|
310
|
+
specify { expect { method_call }.to_not raise_error }
|
283
311
|
end
|
284
312
|
end
|
285
313
|
end
|
286
|
-
context
|
287
|
-
context
|
314
|
+
context "for new option keys" do
|
315
|
+
context "for expires_in" do
|
288
316
|
let(:options) { {expires_in: expires_in.to_s} }
|
289
317
|
|
290
|
-
specify
|
318
|
+
specify do
|
319
|
+
expect { method_call }.
|
320
|
+
to raise_error(ActionControllerTweaks::Session::InvalidOptionValue)
|
321
|
+
end
|
291
322
|
end
|
292
|
-
context
|
293
|
-
context
|
323
|
+
context "for expires_at" do
|
324
|
+
context "with a Hash" do
|
294
325
|
# String#to_time would be nil if format invalid
|
295
326
|
let(:options) { {expires_at: {}} }
|
296
327
|
|
297
|
-
specify
|
328
|
+
specify do
|
329
|
+
expect { method_call }.
|
330
|
+
to raise_error(ActionControllerTweaks::Session::InvalidOptionValue)
|
331
|
+
end
|
298
332
|
end
|
299
|
-
context
|
333
|
+
context "with a blank String" do
|
300
334
|
# String#to_time would be nil if format invalid
|
301
|
-
let(:options) { {expires_at:
|
335
|
+
let(:options) { {expires_at: ""} }
|
302
336
|
|
303
|
-
specify { expect{ method_call }.to_not raise_error }
|
337
|
+
specify { expect { method_call }.to_not raise_error }
|
304
338
|
end
|
305
|
-
context
|
339
|
+
context "with a time String" do
|
306
340
|
let(:options) { {expires_at: expire_at.to_s} }
|
307
341
|
|
308
|
-
specify { expect{ method_call }.to_not raise_error }
|
342
|
+
specify { expect { method_call }.to_not raise_error }
|
309
343
|
end
|
310
|
-
context
|
344
|
+
context "with a Time" do
|
311
345
|
let(:options) { {expires_at: expire_at.to_time} }
|
312
346
|
|
313
|
-
specify { expect{ method_call }.to_not raise_error }
|
347
|
+
specify { expect { method_call }.to_not raise_error }
|
314
348
|
end
|
315
|
-
context
|
349
|
+
context "with a Date" do
|
316
350
|
let(:options) { {expires_at: expire_at.to_date} }
|
317
351
|
|
318
|
-
specify { expect{ method_call }.to_not raise_error }
|
352
|
+
specify { expect { method_call }.to_not raise_error }
|
319
353
|
end
|
320
|
-
context
|
354
|
+
context "with a DateTime" do
|
321
355
|
let(:options) { {expires_at: expire_at.in_time_zone} }
|
322
356
|
|
323
|
-
specify { expect{ method_call }.to_not raise_error }
|
357
|
+
specify { expect { method_call }.to_not raise_error }
|
324
358
|
end
|
325
359
|
end
|
326
360
|
end
|
327
361
|
end
|
328
362
|
|
329
|
-
context
|
363
|
+
context "when someone screw up the special session key" do
|
330
364
|
before do
|
331
365
|
session[session_key] = session_value
|
332
366
|
end
|
333
367
|
|
334
|
-
context
|
368
|
+
context "when someone set non time string in expire_at_str" do
|
335
369
|
before do
|
336
|
-
session[
|
370
|
+
session["session_keys_to_expire"] = {session_key => ""}
|
337
371
|
|
338
372
|
# Runs before_filter
|
339
373
|
get :index
|
340
374
|
end
|
341
375
|
|
342
|
-
it
|
376
|
+
it "destroys the session key" do
|
343
377
|
expect(session.key?(session_key)).to be false
|
344
378
|
end
|
345
379
|
end
|
346
380
|
|
347
|
-
context
|
381
|
+
context "when someone set non-hash to session_keys_to_expire" do
|
348
382
|
before do
|
349
|
-
session[
|
383
|
+
session["session_keys_to_expire"] = []
|
350
384
|
end
|
351
385
|
|
352
|
-
it
|
386
|
+
it "does not destroy the session key" do
|
353
387
|
expect(session.key?(session_key)).to be true
|
354
388
|
end
|
355
389
|
end
|
356
390
|
end
|
357
391
|
end
|
358
392
|
|
359
|
-
describe
|
393
|
+
describe "#set_session_with_expiry" do
|
360
394
|
let(:expire_in) { 60 * 60 } # 1 hour
|
361
395
|
let(:expire_at) { Time.new(2014, 1, 1).in_time_zone }
|
362
396
|
let(:time_now) { Time.new(2013, 1, 1).in_time_zone }
|
@@ -368,298 +402,323 @@ describe PostsController, type: :controller do
|
|
368
402
|
controller.send(:set_session_with_expiry, session_key, session_value, options)
|
369
403
|
end
|
370
404
|
|
371
|
-
context
|
405
|
+
context "when call with no options" do
|
372
406
|
let!(:options) { {} }
|
373
407
|
|
374
|
-
specify
|
408
|
+
specify do
|
409
|
+
expect { method_call }.
|
410
|
+
to raise_error(ActionControllerTweaks::Session::Errors::InvalidOptionKeys)
|
411
|
+
end
|
375
412
|
end
|
376
|
-
context
|
413
|
+
context "when call with invalid option keys" do
|
377
414
|
let!(:options) { {key: :value} }
|
378
415
|
|
379
|
-
specify
|
416
|
+
specify do
|
417
|
+
expect { method_call }.
|
418
|
+
to raise_error(ActionControllerTweaks::Session::Errors::InvalidOptionKeys)
|
419
|
+
end
|
380
420
|
end
|
381
|
-
context
|
382
|
-
context
|
421
|
+
context "when call with valid option keys" do
|
422
|
+
context "like expire_in" do
|
383
423
|
let!(:options) { {expire_in: 1.day} }
|
384
424
|
|
385
|
-
specify { expect{method_call}.to_not raise_error }
|
425
|
+
specify { expect { method_call }.to_not raise_error }
|
386
426
|
end
|
387
|
-
context
|
427
|
+
context "like expire_at" do
|
388
428
|
let!(:options) { {expire_at: 1.day.from_now} }
|
389
429
|
|
390
|
-
specify { expect{method_call}.to_not raise_error }
|
430
|
+
specify { expect { method_call }.to_not raise_error }
|
391
431
|
end
|
392
|
-
context
|
432
|
+
context "like expires_in" do
|
393
433
|
let!(:options) { {expires_in: 1.day} }
|
394
434
|
|
395
|
-
specify { expect{method_call}.to_not raise_error }
|
435
|
+
specify { expect { method_call }.to_not raise_error }
|
396
436
|
end
|
397
|
-
context
|
437
|
+
context "like expires_at" do
|
398
438
|
let!(:options) { {expires_at: 1.day.from_now} }
|
399
439
|
|
400
|
-
specify { expect{method_call}.to_not raise_error }
|
440
|
+
specify { expect { method_call }.to_not raise_error }
|
401
441
|
end
|
402
442
|
end
|
403
443
|
|
404
|
-
context
|
405
|
-
context
|
444
|
+
context "for old option keys" do
|
445
|
+
context "when calling it with option expire_in" do
|
406
446
|
let!(:time_before_expire) { time_now + (expire_in / 2) }
|
407
447
|
let!(:time_after_expire) { time_now + (expire_in * 2) }
|
408
448
|
|
409
449
|
before do
|
410
450
|
Timecop.freeze(time_now)
|
411
|
-
controller.send(:set_session_with_expiry,
|
451
|
+
controller.send(:set_session_with_expiry,
|
452
|
+
session_key, session_value, expire_in: expire_in)
|
412
453
|
end
|
413
454
|
|
414
455
|
after do
|
415
456
|
Timecop.return
|
416
457
|
end
|
417
458
|
|
418
|
-
it
|
459
|
+
it "set the session" do
|
419
460
|
expect(session[session_key]).to eq session_value
|
420
461
|
end
|
421
462
|
|
422
|
-
context
|
463
|
+
context "before expire time" do
|
423
464
|
before do
|
424
465
|
Timecop.travel(time_before_expire)
|
425
466
|
# Runs before_filter
|
426
467
|
get :index
|
427
468
|
end
|
428
469
|
|
429
|
-
it
|
470
|
+
it "keeps the session key" do
|
430
471
|
expect(session[session_key]).to eq session_value
|
431
472
|
end
|
432
473
|
end
|
433
|
-
context
|
474
|
+
context "after expire time" do
|
434
475
|
before do
|
435
476
|
Timecop.travel(time_after_expire)
|
436
477
|
# Runs before_filter
|
437
478
|
get :index
|
438
479
|
end
|
439
480
|
|
440
|
-
it
|
481
|
+
it "keeps the session key" do
|
441
482
|
expect(session.key?(session_key)).to be false
|
442
483
|
end
|
443
484
|
end
|
444
485
|
end
|
445
486
|
|
446
|
-
context
|
487
|
+
context "when calling it with no option" do
|
447
488
|
let(:method_call) do
|
448
489
|
controller.send(:set_session_with_expiry, session_key, session_value)
|
449
490
|
end
|
450
491
|
|
451
|
-
specify
|
492
|
+
specify do
|
493
|
+
expect { method_call }.
|
494
|
+
to raise_error(ActionControllerTweaks::Session::Errors::InvalidOptionKeys)
|
495
|
+
end
|
452
496
|
end
|
453
497
|
|
454
|
-
context
|
498
|
+
context "when calling it with option expire_at" do
|
455
499
|
let!(:time_before_expire) { expire_at - 1 }
|
456
500
|
let!(:time_after_expire) { expire_at + 1 }
|
457
501
|
|
458
502
|
before do
|
459
503
|
Timecop.freeze(time_now)
|
460
|
-
controller.send(:set_session_with_expiry,
|
504
|
+
controller.send(:set_session_with_expiry,
|
505
|
+
session_key, session_value, expire_at: expire_at)
|
461
506
|
end
|
462
507
|
|
463
508
|
after do
|
464
509
|
Timecop.return
|
465
510
|
end
|
466
511
|
|
467
|
-
it
|
512
|
+
it "set the session" do
|
468
513
|
expect(session[session_key]).to eq session_value
|
469
514
|
end
|
470
515
|
|
471
|
-
context
|
516
|
+
context "before expire time" do
|
472
517
|
before do
|
473
518
|
Timecop.travel(time_before_expire)
|
474
519
|
# Runs before_filter
|
475
520
|
get :index
|
476
521
|
end
|
477
522
|
|
478
|
-
it
|
523
|
+
it "keeps the session key" do
|
479
524
|
expect(session[session_key]).to eq session_value
|
480
525
|
end
|
481
526
|
end
|
482
|
-
context
|
527
|
+
context "after expire time" do
|
483
528
|
before do
|
484
529
|
Timecop.travel(time_after_expire)
|
485
530
|
# Runs before_filter
|
486
531
|
get :index
|
487
532
|
end
|
488
533
|
|
489
|
-
it
|
534
|
+
it "keeps the session key" do
|
490
535
|
expect(session.key?(session_key)).to be false
|
491
536
|
end
|
492
537
|
end
|
493
538
|
end
|
494
539
|
end
|
495
|
-
context
|
496
|
-
context
|
540
|
+
context "for new option keys" do
|
541
|
+
context "when calling it with option expires_in" do
|
497
542
|
let!(:time_before_expire) { time_now + (expires_in / 2) }
|
498
543
|
let!(:time_after_expire) { time_now + (expires_in * 2) }
|
499
544
|
|
500
545
|
before do
|
501
546
|
Timecop.freeze(time_now)
|
502
|
-
controller.send(:set_session_with_expiry,
|
547
|
+
controller.send(:set_session_with_expiry,
|
548
|
+
session_key, session_value, expires_in: expires_in)
|
503
549
|
end
|
504
550
|
|
505
551
|
after do
|
506
552
|
Timecop.return
|
507
553
|
end
|
508
554
|
|
509
|
-
it
|
555
|
+
it "set the session" do
|
510
556
|
expect(session[session_key]).to eq session_value
|
511
557
|
end
|
512
558
|
|
513
|
-
context
|
559
|
+
context "before expire time" do
|
514
560
|
before do
|
515
561
|
Timecop.travel(time_before_expire)
|
516
562
|
# Runs before_filter
|
517
563
|
get :index
|
518
564
|
end
|
519
565
|
|
520
|
-
it
|
566
|
+
it "keeps the session key" do
|
521
567
|
expect(session[session_key]).to eq session_value
|
522
568
|
end
|
523
569
|
end
|
524
|
-
context
|
570
|
+
context "after expire time" do
|
525
571
|
before do
|
526
572
|
Timecop.travel(time_after_expire)
|
527
573
|
# Runs before_filter
|
528
574
|
get :index
|
529
575
|
end
|
530
576
|
|
531
|
-
it
|
577
|
+
it "keeps the session key" do
|
532
578
|
expect(session.key?(session_key)).to be false
|
533
579
|
end
|
534
580
|
end
|
535
581
|
end
|
536
582
|
|
537
|
-
context
|
583
|
+
context "when calling it with option expires_at" do
|
538
584
|
let!(:time_before_expire) { expires_at - 1 }
|
539
585
|
let!(:time_after_expire) { expires_at + 1 }
|
540
586
|
|
541
587
|
before do
|
542
588
|
Timecop.freeze(time_now)
|
543
|
-
controller.send(:set_session_with_expiry,
|
589
|
+
controller.send(:set_session_with_expiry,
|
590
|
+
session_key, session_value, expire_at: expires_at)
|
544
591
|
end
|
545
592
|
|
546
593
|
after do
|
547
594
|
Timecop.return
|
548
595
|
end
|
549
596
|
|
550
|
-
it
|
597
|
+
it "set the session" do
|
551
598
|
expect(session[session_key]).to eq session_value
|
552
599
|
end
|
553
600
|
|
554
|
-
context
|
601
|
+
context "before expire time" do
|
555
602
|
before do
|
556
603
|
Timecop.travel(time_before_expire)
|
557
604
|
# Runs before_filter
|
558
605
|
get :index
|
559
606
|
end
|
560
607
|
|
561
|
-
it
|
608
|
+
it "keeps the session key" do
|
562
609
|
expect(session[session_key]).to eq session_value
|
563
610
|
end
|
564
611
|
end
|
565
|
-
context
|
612
|
+
context "after expire time" do
|
566
613
|
before do
|
567
614
|
Timecop.travel(time_after_expire)
|
568
615
|
# Runs before_filter
|
569
616
|
get :index
|
570
617
|
end
|
571
618
|
|
572
|
-
it
|
619
|
+
it "keeps the session key" do
|
573
620
|
expect(session.key?(session_key)).to be false
|
574
621
|
end
|
575
622
|
end
|
576
623
|
end
|
577
624
|
end
|
578
625
|
|
579
|
-
context
|
626
|
+
context "when option value with different types is passed into options" do
|
580
627
|
let(:method_call) do
|
581
628
|
controller.send(:set_session_with_expiry, session_key, session_value, options)
|
582
629
|
end
|
583
630
|
|
584
|
-
context
|
585
|
-
context
|
631
|
+
context "for old option keys" do
|
632
|
+
context "for expire_in" do
|
586
633
|
let(:options) { {expire_in: expire_in.to_s} }
|
587
634
|
|
588
|
-
specify
|
635
|
+
specify do
|
636
|
+
expect { method_call }.
|
637
|
+
to raise_error(ActionControllerTweaks::Session::InvalidOptionValue)
|
638
|
+
end
|
589
639
|
end
|
590
|
-
context
|
591
|
-
context
|
640
|
+
context "for expire_at" do
|
641
|
+
context "with a Hash" do
|
592
642
|
# String#to_time would be nil if format invalid
|
593
643
|
let(:options) { {expire_at: {}} }
|
594
644
|
|
595
|
-
specify
|
645
|
+
specify do
|
646
|
+
expect { method_call }.
|
647
|
+
to raise_error(ActionControllerTweaks::Session::InvalidOptionValue)
|
648
|
+
end
|
596
649
|
end
|
597
|
-
context
|
650
|
+
context "with a blank String" do
|
598
651
|
# String#to_time would be nil if format invalid
|
599
|
-
let(:options) { {expire_at:
|
652
|
+
let(:options) { {expire_at: ""} }
|
600
653
|
|
601
|
-
specify { expect{ method_call }.to_not raise_error }
|
654
|
+
specify { expect { method_call }.to_not raise_error }
|
602
655
|
end
|
603
|
-
context
|
656
|
+
context "with a time String" do
|
604
657
|
let(:options) { {expire_at: expire_at.to_s} }
|
605
658
|
|
606
|
-
specify { expect{ method_call }.to_not raise_error }
|
659
|
+
specify { expect { method_call }.to_not raise_error }
|
607
660
|
end
|
608
|
-
context
|
661
|
+
context "with a Time" do
|
609
662
|
let(:options) { {expire_at: expire_at.to_time} }
|
610
663
|
|
611
|
-
specify { expect{ method_call }.to_not raise_error }
|
664
|
+
specify { expect { method_call }.to_not raise_error }
|
612
665
|
end
|
613
|
-
context
|
666
|
+
context "with a Date" do
|
614
667
|
let(:options) { {expire_at: expire_at.to_date} }
|
615
668
|
|
616
|
-
specify { expect{ method_call }.to_not raise_error }
|
669
|
+
specify { expect { method_call }.to_not raise_error }
|
617
670
|
end
|
618
|
-
context
|
671
|
+
context "with a DateTime" do
|
619
672
|
let(:options) { {expire_at: expire_at.in_time_zone} }
|
620
673
|
|
621
|
-
specify { expect{ method_call }.to_not raise_error }
|
674
|
+
specify { expect { method_call }.to_not raise_error }
|
622
675
|
end
|
623
676
|
end
|
624
677
|
end
|
625
|
-
context
|
626
|
-
context
|
678
|
+
context "for new option keys" do
|
679
|
+
context "for expires_in" do
|
627
680
|
let(:options) { {expires_in: expires_in.to_s} }
|
628
681
|
|
629
|
-
specify
|
682
|
+
specify do
|
683
|
+
expect { method_call }.
|
684
|
+
to raise_error(ActionControllerTweaks::Session::InvalidOptionValue)
|
685
|
+
end
|
630
686
|
end
|
631
|
-
context
|
632
|
-
context
|
687
|
+
context "for expires_at" do
|
688
|
+
context "with a Hash" do
|
633
689
|
# String#to_time would be nil if format invalid
|
634
690
|
let(:options) { {expires_at: {}} }
|
635
691
|
|
636
|
-
specify
|
692
|
+
specify do
|
693
|
+
expect { method_call }.
|
694
|
+
to raise_error(ActionControllerTweaks::Session::InvalidOptionValue)
|
695
|
+
end
|
637
696
|
end
|
638
|
-
context
|
697
|
+
context "with a blank String" do
|
639
698
|
# String#to_time would be nil if format invalid
|
640
|
-
let(:options) { {expires_at:
|
699
|
+
let(:options) { {expires_at: ""} }
|
641
700
|
|
642
|
-
specify { expect{ method_call }.to_not raise_error }
|
701
|
+
specify { expect { method_call }.to_not raise_error }
|
643
702
|
end
|
644
|
-
context
|
703
|
+
context "with a time String" do
|
645
704
|
let(:options) { {expires_at: expire_at.to_s} }
|
646
705
|
|
647
|
-
specify { expect{ method_call }.to_not raise_error }
|
706
|
+
specify { expect { method_call }.to_not raise_error }
|
648
707
|
end
|
649
|
-
context
|
708
|
+
context "with a Time" do
|
650
709
|
let(:options) { {expires_at: expire_at.to_time} }
|
651
710
|
|
652
|
-
specify { expect{ method_call }.to_not raise_error }
|
711
|
+
specify { expect { method_call }.to_not raise_error }
|
653
712
|
end
|
654
|
-
context
|
713
|
+
context "with a Date" do
|
655
714
|
let(:options) { {expires_at: expire_at.to_date} }
|
656
715
|
|
657
|
-
specify { expect{ method_call }.to_not raise_error }
|
716
|
+
specify { expect { method_call }.to_not raise_error }
|
658
717
|
end
|
659
|
-
context
|
718
|
+
context "with a DateTime" do
|
660
719
|
let(:options) { {expires_at: expire_at.in_time_zone} }
|
661
720
|
|
662
|
-
specify { expect{ method_call }.to_not raise_error }
|
721
|
+
specify { expect { method_call }.to_not raise_error }
|
663
722
|
end
|
664
723
|
end
|
665
724
|
end
|