action_controller_tweaks 0.3.0 → 0.3.1
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 +6 -1
- data/.travis.yml +11 -9
- data/Appraisals +22 -4
- data/CHANGELOG.md +4 -0
- data/README.md +5 -8
- data/Rakefile +1 -1
- data/action_controller_tweaks.gemspec +5 -2
- data/gemfiles/rails_3_2.gemfile +10 -0
- data/gemfiles/rails_4_0.gemfile +10 -0
- data/gemfiles/rails_4_1.gemfile +10 -0
- data/gemfiles/rails_4_2.gemfile +10 -0
- data/lib/action_controller_tweaks/session.rb +28 -23
- data/lib/action_controller_tweaks/version.rb +1 -1
- data/spec/action_controller_tweaks_spec.rb +305 -20
- data/spec/spec_helper.rb +7 -0
- metadata +74 -44
- data/gemfiles/rails3_2.gemfile +0 -9
- data/gemfiles/rails4_0.gemfile +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: feadb1e4e2545cb5b2adc42b4ce47aeef0955947
|
4
|
+
data.tar.gz: a0e5eb6fbf78fb8fec5d37a303d836c19dbbc67c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4367c9a17979a053bbb94a16022fdfeb2f491e66028e53fa856e3f048323ce0d182ca1052fe7cdb2d62f0b4726ce4ed12f9effaeeb28ee99a19b739073ce118c
|
7
|
+
data.tar.gz: eb0f9cafd5ea2274e88bfe04899da73966508f919907d25ec2593c568d45241ea7abd99d17d8ebfc66edd46d32d124274e1a8b5a836f5e5267f9573ac841fe05
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -2,16 +2,18 @@ language: ruby
|
|
2
2
|
cache:
|
3
3
|
- bundler
|
4
4
|
rvm:
|
5
|
-
- 1.9.2
|
6
5
|
- 1.9.3
|
7
|
-
- 2.0
|
8
|
-
- 2.1
|
9
|
-
- 2.
|
6
|
+
- 2.0
|
7
|
+
- 2.1
|
8
|
+
- 2.2
|
9
|
+
- ruby-head
|
10
10
|
gemfile:
|
11
|
-
- gemfiles/
|
12
|
-
- gemfiles/
|
11
|
+
- gemfiles/rails_3_2.gemfile
|
12
|
+
- gemfiles/rails_4_0.gemfile
|
13
|
+
- gemfiles/rails_4_1.gemfile
|
14
|
+
- gemfiles/rails_4_2.gemfile
|
13
15
|
matrix:
|
14
|
-
|
15
|
-
|
16
|
-
|
16
|
+
fast_finish: true
|
17
|
+
allow_failures:
|
18
|
+
- rvm: ruby-head
|
17
19
|
|
data/Appraisals
CHANGED
@@ -1,14 +1,32 @@
|
|
1
1
|
|
2
|
-
appraise "
|
3
|
-
version = "3.2.
|
2
|
+
appraise "rails_3_2" do
|
3
|
+
version = "~> 3.2.20"
|
4
4
|
gem 'activesupport', version
|
5
5
|
gem 'actionpack', version
|
6
6
|
gem 'activerecord', version
|
7
|
+
gem 'railties', version
|
7
8
|
end
|
8
9
|
|
9
|
-
appraise "
|
10
|
-
version = "4.0.
|
10
|
+
appraise "rails_4_0" do
|
11
|
+
version = "~> 4.0.12"
|
11
12
|
gem 'activesupport', version
|
12
13
|
gem 'actionpack', version
|
13
14
|
gem 'activerecord', version
|
15
|
+
gem 'railties', version
|
16
|
+
end
|
17
|
+
|
18
|
+
appraise "rails_4_1" do
|
19
|
+
version = "~> 4.1.8"
|
20
|
+
gem 'activesupport', version
|
21
|
+
gem 'actionpack', version
|
22
|
+
gem 'activerecord', version
|
23
|
+
gem 'railties', version
|
24
|
+
end
|
25
|
+
|
26
|
+
appraise "rails_4_2" do
|
27
|
+
version = "~> 4.2.0"
|
28
|
+
gem 'activesupport', version
|
29
|
+
gem 'actionpack', version
|
30
|
+
gem 'activerecord', version
|
31
|
+
gem 'railties', version
|
14
32
|
end
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
### Changelog
|
2
2
|
|
3
3
|
|
4
|
+
- **0.3.1**
|
5
|
+
- Fix session key still gets deleted when no option is set
|
6
|
+
- Fix options not passed to `#set_session` when `#set_session_with_expiry` is called
|
7
|
+
|
4
8
|
- **0.3.0**
|
5
9
|
- Add method `#set_session_with_expiry`
|
6
10
|
- Add option `expires_in` and `expires_at` to #set_session
|
data/README.md
CHANGED
@@ -5,15 +5,12 @@ ActionController is great, but could be better. Here are some tweaks for it.
|
|
5
5
|
|
6
6
|
### Support
|
7
7
|
===========
|
8
|
-
Tested against:
|
9
|
-
- Action Controller of version `3.2` and `4.0` (`3.1` and below got problem with buggy `rspec-rails`)
|
10
|
-
- Ruby `1.9.2`, `1.9.3`, `2.0.0` (except Rails 4 with `1.9.2`)
|
11
8
|
|
12
|
-
[](https://travis-ci.org/PikachuEXE/action_controller_tweaks)
|
13
|
-
[](http://badge.fury.io/rb/action_controller_tweaks)
|
14
|
-
[](https://gemnasium.com/PikachuEXE/action_controller_tweaks)
|
15
|
-
[](https://coveralls.io/r/PikachuEXE/action_controller_tweaks)
|
16
|
-
[](https://codeclimate.com/github/PikachuEXE/action_controller_tweaks)
|
9
|
+
[](https://travis-ci.org/PikachuEXE/action_controller_tweaks)
|
10
|
+
[](http://badge.fury.io/rb/action_controller_tweaks)
|
11
|
+
[](https://gemnasium.com/PikachuEXE/action_controller_tweaks)
|
12
|
+
[](https://coveralls.io/r/PikachuEXE/action_controller_tweaks)
|
13
|
+
[](https://codeclimate.com/github/PikachuEXE/action_controller_tweaks)
|
17
14
|
|
18
15
|
Install
|
19
16
|
=======
|
data/Rakefile
CHANGED
@@ -31,14 +31,17 @@ Gem::Specification.new do |s|
|
|
31
31
|
|
32
32
|
s.add_development_dependency "bundler", ">= 1.0.0"
|
33
33
|
s.add_development_dependency "rake", ">= 0.9.2"
|
34
|
-
s.add_development_dependency "appraisal", "
|
35
|
-
s.add_development_dependency "rspec-rails", "~>
|
34
|
+
s.add_development_dependency "appraisal", "~> 1.0"
|
35
|
+
s.add_development_dependency "rspec-rails", "~> 3.0"
|
36
|
+
s.add_development_dependency "rspec-its", "~> 1.0"
|
36
37
|
s.add_development_dependency "activerecord", ">= 3.2.0", "< 5.0.0" # rspec-rails needs activerecord...
|
37
38
|
s.add_development_dependency "sqlite3", ">= 1.3"
|
38
39
|
s.add_development_dependency "database_cleaner", ">= 1.0"
|
39
40
|
s.add_development_dependency "timecop", ">= 0.6"
|
40
41
|
s.add_development_dependency "coveralls", ">= 0.7"
|
41
42
|
s.add_development_dependency "gem-release", ">= 0.7"
|
43
|
+
# This is for rails < 4.1 on MRI 2.2 (and other later version I suppose)
|
44
|
+
s.add_development_dependency "test-unit", ">= 3.0.0"
|
42
45
|
|
43
46
|
s.required_rubygems_version = ">= 1.4.0"
|
44
47
|
end
|
@@ -37,34 +37,13 @@ module ActionControllerTweaks
|
|
37
37
|
# @option expires_at [Integer] What time should the session value be expired (using a time in the past would expire at next request)
|
38
38
|
# @option expire_at [Integer] same as `expires_at`
|
39
39
|
def set_session(key, value, options = {})
|
40
|
-
options.symbolize_keys!
|
41
|
-
|
42
40
|
if RESERVED_SESSION_KEYS.include?(key.to_s)
|
43
41
|
raise Errors::ReservedSessionKeyConflict.new, "you are trying to set #{value} to #{key}, but reserved by ActionControllerTweaks::Session"
|
44
42
|
end
|
45
43
|
|
46
44
|
session[key] = value
|
47
45
|
|
48
|
-
|
49
|
-
new_session_keys_to_expire = session_keys_to_expire
|
50
|
-
|
51
|
-
expires_in = options.delete(:expires_in) || options.delete(:expire_in)
|
52
|
-
expires_at = options.delete(:expires_at) || options.delete(:expire_at)
|
53
|
-
|
54
|
-
if expires_at && expires_at.respond_to?(:to_time)
|
55
|
-
expires_at = expires_at.to_time
|
56
|
-
end
|
57
|
-
|
58
|
-
raise InvalidOptionValue.new(:expires_in, expires_in, Numeric) if expires_in && !expires_in.is_a?(Numeric)
|
59
|
-
raise InvalidOptionValue.new(:expires_at, expires_at, Time) if expires_at && !expires_at.is_a?(Time)
|
60
|
-
|
61
|
-
new_session_keys_to_expire[key] = if expires_in
|
62
|
-
expires_in.from_now
|
63
|
-
elsif expires_at
|
64
|
-
expires_at
|
65
|
-
end
|
66
|
-
|
67
|
-
session[:session_keys_to_expire] = new_session_keys_to_expire
|
46
|
+
session[:session_keys_to_expire] = new_session_keys_to_expire(key, options)
|
68
47
|
end
|
69
48
|
|
70
49
|
# set value in session just like `set_session`, but checked option keys
|
@@ -78,7 +57,7 @@ module ActionControllerTweaks
|
|
78
57
|
invalid_option_key_absent = (option_keys - VALID_OPTION_KEYS.dup).empty?
|
79
58
|
(required_option_key_present && invalid_option_key_absent) or raise ActionControllerTweaks::Session::Errors::InvalidOptionKeys
|
80
59
|
|
81
|
-
set_session(key, value, options
|
60
|
+
set_session(key, value, options)
|
82
61
|
end
|
83
62
|
|
84
63
|
def delete_expired_session_keys
|
@@ -106,6 +85,32 @@ module ActionControllerTweaks
|
|
106
85
|
|
107
86
|
session[:session_keys_to_expire]
|
108
87
|
end
|
88
|
+
|
89
|
+
def new_session_keys_to_expire(key, options = {})
|
90
|
+
options.symbolize_keys!
|
91
|
+
|
92
|
+
result = session_keys_to_expire
|
93
|
+
|
94
|
+
expires_in = options.delete(:expires_in) || options.delete(:expire_in)
|
95
|
+
expires_at = options.delete(:expires_at) || options.delete(:expire_at)
|
96
|
+
|
97
|
+
if expires_at && expires_at.respond_to?(:to_time)
|
98
|
+
expires_at = expires_at.to_time
|
99
|
+
end
|
100
|
+
|
101
|
+
raise InvalidOptionValue.new(:expires_in, expires_in, Numeric) if expires_in && !expires_in.is_a?(Numeric)
|
102
|
+
raise InvalidOptionValue.new(:expires_at, expires_at, Time) if expires_at && !expires_at.is_a?(Time)
|
103
|
+
|
104
|
+
if expires_in || expires_at
|
105
|
+
result[key] = if expires_in
|
106
|
+
expires_in.seconds.from_now
|
107
|
+
elsif expires_at
|
108
|
+
expires_at
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
result
|
113
|
+
end
|
109
114
|
end
|
110
115
|
end
|
111
116
|
end
|
@@ -2,8 +2,8 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe PostsController, type: :controller do
|
4
4
|
describe 'included modules' do
|
5
|
-
|
6
|
-
described_class.ancestors.
|
5
|
+
specify do
|
6
|
+
expect(described_class.ancestors).to include(ActionControllerTweaks)
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
@@ -14,8 +14,8 @@ describe PostsController, type: :controller do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'includes the pre defined headeres' do
|
17
|
-
|
18
|
-
|
17
|
+
expect(controller.headers.deep_include?(ActionControllerTweaks::Caching::HEADERS)).to be true
|
18
|
+
end
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
@@ -42,7 +42,7 @@ describe PostsController, type: :controller do
|
|
42
42
|
end
|
43
43
|
|
44
44
|
it 'set the session' do
|
45
|
-
session[session_key].
|
45
|
+
expect(session[session_key]).to eq session_value
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
@@ -70,7 +70,7 @@ describe PostsController, type: :controller do
|
|
70
70
|
end
|
71
71
|
|
72
72
|
it 'set the session' do
|
73
|
-
session[session_key].
|
73
|
+
expect(session[session_key]).to eq session_value
|
74
74
|
end
|
75
75
|
|
76
76
|
context 'before expire time' do
|
@@ -81,7 +81,7 @@ describe PostsController, type: :controller do
|
|
81
81
|
end
|
82
82
|
|
83
83
|
it 'keeps the session key' do
|
84
|
-
session[session_key].
|
84
|
+
expect(session[session_key]).to eq session_value
|
85
85
|
end
|
86
86
|
end
|
87
87
|
context 'after expire time' do
|
@@ -92,11 +92,25 @@ describe PostsController, type: :controller do
|
|
92
92
|
end
|
93
93
|
|
94
94
|
it 'keeps the session key' do
|
95
|
-
session.key?(session_key).
|
95
|
+
expect(session.key?(session_key)).to be false
|
96
96
|
end
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
100
|
+
context 'when calling it with no option' do
|
101
|
+
before do
|
102
|
+
controller.send(:set_session, session_key, session_value)
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'set the session' do
|
106
|
+
expect(session[session_key]).to eq session_value
|
107
|
+
end
|
108
|
+
|
109
|
+
it 'does NOT add the session key to `session_keys_to_expire`' do
|
110
|
+
expect(session['session_keys_to_expire'].keys).to_not include(session_key)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
100
114
|
context 'when calling it with option expire_at' do
|
101
115
|
let!(:time_before_expire) { expire_at - 1 }
|
102
116
|
let!(:time_after_expire) { expire_at + 1 }
|
@@ -111,7 +125,7 @@ describe PostsController, type: :controller do
|
|
111
125
|
end
|
112
126
|
|
113
127
|
it 'set the session' do
|
114
|
-
session[session_key].
|
128
|
+
expect(session[session_key]).to eq session_value
|
115
129
|
end
|
116
130
|
|
117
131
|
context 'before expire time' do
|
@@ -122,7 +136,7 @@ describe PostsController, type: :controller do
|
|
122
136
|
end
|
123
137
|
|
124
138
|
it 'keeps the session key' do
|
125
|
-
session[session_key].
|
139
|
+
expect(session[session_key]).to eq session_value
|
126
140
|
end
|
127
141
|
end
|
128
142
|
context 'after expire time' do
|
@@ -133,7 +147,7 @@ describe PostsController, type: :controller do
|
|
133
147
|
end
|
134
148
|
|
135
149
|
it 'keeps the session key' do
|
136
|
-
session.key?(session_key).
|
150
|
+
expect(session.key?(session_key)).to be false
|
137
151
|
end
|
138
152
|
end
|
139
153
|
end
|
@@ -153,7 +167,7 @@ describe PostsController, type: :controller do
|
|
153
167
|
end
|
154
168
|
|
155
169
|
it 'set the session' do
|
156
|
-
session[session_key].
|
170
|
+
expect(session[session_key]).to eq session_value
|
157
171
|
end
|
158
172
|
|
159
173
|
context 'before expire time' do
|
@@ -164,7 +178,7 @@ describe PostsController, type: :controller do
|
|
164
178
|
end
|
165
179
|
|
166
180
|
it 'keeps the session key' do
|
167
|
-
session[session_key].
|
181
|
+
expect(session[session_key]).to eq session_value
|
168
182
|
end
|
169
183
|
end
|
170
184
|
context 'after expire time' do
|
@@ -175,7 +189,7 @@ describe PostsController, type: :controller do
|
|
175
189
|
end
|
176
190
|
|
177
191
|
it 'keeps the session key' do
|
178
|
-
session.key?(session_key).
|
192
|
+
expect(session.key?(session_key)).to be false
|
179
193
|
end
|
180
194
|
end
|
181
195
|
end
|
@@ -194,7 +208,7 @@ describe PostsController, type: :controller do
|
|
194
208
|
end
|
195
209
|
|
196
210
|
it 'set the session' do
|
197
|
-
session[session_key].
|
211
|
+
expect(session[session_key]).to eq session_value
|
198
212
|
end
|
199
213
|
|
200
214
|
context 'before expire time' do
|
@@ -205,7 +219,7 @@ describe PostsController, type: :controller do
|
|
205
219
|
end
|
206
220
|
|
207
221
|
it 'keeps the session key' do
|
208
|
-
session[session_key].
|
222
|
+
expect(session[session_key]).to eq session_value
|
209
223
|
end
|
210
224
|
end
|
211
225
|
context 'after expire time' do
|
@@ -216,7 +230,7 @@ describe PostsController, type: :controller do
|
|
216
230
|
end
|
217
231
|
|
218
232
|
it 'keeps the session key' do
|
219
|
-
session.key?(session_key).
|
233
|
+
expect(session.key?(session_key)).to be false
|
220
234
|
end
|
221
235
|
end
|
222
236
|
end
|
@@ -326,23 +340,30 @@ describe PostsController, type: :controller do
|
|
326
340
|
end
|
327
341
|
|
328
342
|
it 'destroys the session key' do
|
329
|
-
session.key?(session_key).
|
343
|
+
expect(session.key?(session_key)).to be false
|
330
344
|
end
|
331
345
|
end
|
332
346
|
|
333
|
-
context 'when someone set non
|
347
|
+
context 'when someone set non-hash to session_keys_to_expire' do
|
334
348
|
before do
|
335
349
|
session['session_keys_to_expire'] = []
|
336
350
|
end
|
337
351
|
|
338
352
|
it 'does not destroy the session key' do
|
339
|
-
session.key?(session_key).
|
353
|
+
expect(session.key?(session_key)).to be true
|
340
354
|
end
|
341
355
|
end
|
342
356
|
end
|
343
357
|
end
|
344
358
|
|
345
359
|
describe '#set_session_with_expiry' do
|
360
|
+
let(:expire_in) { 60 * 60 } # 1 hour
|
361
|
+
let(:expire_at) { Time.new(2014, 1, 1).in_time_zone }
|
362
|
+
let(:time_now) { Time.new(2013, 1, 1).in_time_zone }
|
363
|
+
# Corrected option keys
|
364
|
+
let(:expires_in) { expire_in }
|
365
|
+
let(:expires_at) { expire_at }
|
366
|
+
|
346
367
|
let(:method_call) do
|
347
368
|
controller.send(:set_session_with_expiry, session_key, session_value, options)
|
348
369
|
end
|
@@ -379,6 +400,270 @@ describe PostsController, type: :controller do
|
|
379
400
|
specify { expect{method_call}.to_not raise_error }
|
380
401
|
end
|
381
402
|
end
|
403
|
+
|
404
|
+
context 'for old option keys' do
|
405
|
+
context 'when calling it with option expire_in' do
|
406
|
+
let!(:time_before_expire) { time_now + (expire_in / 2) }
|
407
|
+
let!(:time_after_expire) { time_now + (expire_in * 2) }
|
408
|
+
|
409
|
+
before do
|
410
|
+
Timecop.freeze(time_now)
|
411
|
+
controller.send(:set_session_with_expiry, session_key, session_value, expire_in: expire_in)
|
412
|
+
end
|
413
|
+
|
414
|
+
after do
|
415
|
+
Timecop.return
|
416
|
+
end
|
417
|
+
|
418
|
+
it 'set the session' do
|
419
|
+
expect(session[session_key]).to eq session_value
|
420
|
+
end
|
421
|
+
|
422
|
+
context 'before expire time' do
|
423
|
+
before do
|
424
|
+
Timecop.travel(time_before_expire)
|
425
|
+
# Runs before_filter
|
426
|
+
get :index
|
427
|
+
end
|
428
|
+
|
429
|
+
it 'keeps the session key' do
|
430
|
+
expect(session[session_key]).to eq session_value
|
431
|
+
end
|
432
|
+
end
|
433
|
+
context 'after expire time' do
|
434
|
+
before do
|
435
|
+
Timecop.travel(time_after_expire)
|
436
|
+
# Runs before_filter
|
437
|
+
get :index
|
438
|
+
end
|
439
|
+
|
440
|
+
it 'keeps the session key' do
|
441
|
+
expect(session.key?(session_key)).to be false
|
442
|
+
end
|
443
|
+
end
|
444
|
+
end
|
445
|
+
|
446
|
+
context 'when calling it with no option' do
|
447
|
+
let(:method_call) do
|
448
|
+
controller.send(:set_session_with_expiry, session_key, session_value)
|
449
|
+
end
|
450
|
+
|
451
|
+
specify { expect{ method_call }.to raise_error(ActionControllerTweaks::Session::Errors::InvalidOptionKeys) }
|
452
|
+
end
|
453
|
+
|
454
|
+
context 'when calling it with option expire_at' do
|
455
|
+
let!(:time_before_expire) { expire_at - 1 }
|
456
|
+
let!(:time_after_expire) { expire_at + 1 }
|
457
|
+
|
458
|
+
before do
|
459
|
+
Timecop.freeze(time_now)
|
460
|
+
controller.send(:set_session_with_expiry, session_key, session_value, expire_at: expire_at)
|
461
|
+
end
|
462
|
+
|
463
|
+
after do
|
464
|
+
Timecop.return
|
465
|
+
end
|
466
|
+
|
467
|
+
it 'set the session' do
|
468
|
+
expect(session[session_key]).to eq session_value
|
469
|
+
end
|
470
|
+
|
471
|
+
context 'before expire time' do
|
472
|
+
before do
|
473
|
+
Timecop.travel(time_before_expire)
|
474
|
+
# Runs before_filter
|
475
|
+
get :index
|
476
|
+
end
|
477
|
+
|
478
|
+
it 'keeps the session key' do
|
479
|
+
expect(session[session_key]).to eq session_value
|
480
|
+
end
|
481
|
+
end
|
482
|
+
context 'after expire time' do
|
483
|
+
before do
|
484
|
+
Timecop.travel(time_after_expire)
|
485
|
+
# Runs before_filter
|
486
|
+
get :index
|
487
|
+
end
|
488
|
+
|
489
|
+
it 'keeps the session key' do
|
490
|
+
expect(session.key?(session_key)).to be false
|
491
|
+
end
|
492
|
+
end
|
493
|
+
end
|
494
|
+
end
|
495
|
+
context 'for new option keys' do
|
496
|
+
context 'when calling it with option expires_in' do
|
497
|
+
let!(:time_before_expire) { time_now + (expires_in / 2) }
|
498
|
+
let!(:time_after_expire) { time_now + (expires_in * 2) }
|
499
|
+
|
500
|
+
before do
|
501
|
+
Timecop.freeze(time_now)
|
502
|
+
controller.send(:set_session_with_expiry, session_key, session_value, expires_in: expires_in)
|
503
|
+
end
|
504
|
+
|
505
|
+
after do
|
506
|
+
Timecop.return
|
507
|
+
end
|
508
|
+
|
509
|
+
it 'set the session' do
|
510
|
+
expect(session[session_key]).to eq session_value
|
511
|
+
end
|
512
|
+
|
513
|
+
context 'before expire time' do
|
514
|
+
before do
|
515
|
+
Timecop.travel(time_before_expire)
|
516
|
+
# Runs before_filter
|
517
|
+
get :index
|
518
|
+
end
|
519
|
+
|
520
|
+
it 'keeps the session key' do
|
521
|
+
expect(session[session_key]).to eq session_value
|
522
|
+
end
|
523
|
+
end
|
524
|
+
context 'after expire time' do
|
525
|
+
before do
|
526
|
+
Timecop.travel(time_after_expire)
|
527
|
+
# Runs before_filter
|
528
|
+
get :index
|
529
|
+
end
|
530
|
+
|
531
|
+
it 'keeps the session key' do
|
532
|
+
expect(session.key?(session_key)).to be false
|
533
|
+
end
|
534
|
+
end
|
535
|
+
end
|
536
|
+
|
537
|
+
context 'when calling it with option expires_at' do
|
538
|
+
let!(:time_before_expire) { expires_at - 1 }
|
539
|
+
let!(:time_after_expire) { expires_at + 1 }
|
540
|
+
|
541
|
+
before do
|
542
|
+
Timecop.freeze(time_now)
|
543
|
+
controller.send(:set_session_with_expiry, session_key, session_value, expire_at: expires_at)
|
544
|
+
end
|
545
|
+
|
546
|
+
after do
|
547
|
+
Timecop.return
|
548
|
+
end
|
549
|
+
|
550
|
+
it 'set the session' do
|
551
|
+
expect(session[session_key]).to eq session_value
|
552
|
+
end
|
553
|
+
|
554
|
+
context 'before expire time' do
|
555
|
+
before do
|
556
|
+
Timecop.travel(time_before_expire)
|
557
|
+
# Runs before_filter
|
558
|
+
get :index
|
559
|
+
end
|
560
|
+
|
561
|
+
it 'keeps the session key' do
|
562
|
+
expect(session[session_key]).to eq session_value
|
563
|
+
end
|
564
|
+
end
|
565
|
+
context 'after expire time' do
|
566
|
+
before do
|
567
|
+
Timecop.travel(time_after_expire)
|
568
|
+
# Runs before_filter
|
569
|
+
get :index
|
570
|
+
end
|
571
|
+
|
572
|
+
it 'keeps the session key' do
|
573
|
+
expect(session.key?(session_key)).to be false
|
574
|
+
end
|
575
|
+
end
|
576
|
+
end
|
577
|
+
end
|
578
|
+
|
579
|
+
context 'when option value with different types is passed into options' do
|
580
|
+
let(:method_call) do
|
581
|
+
controller.send(:set_session_with_expiry, session_key, session_value, options)
|
582
|
+
end
|
583
|
+
|
584
|
+
context 'for old option keys' do
|
585
|
+
context 'for expire_in' do
|
586
|
+
let(:options) { {expire_in: expire_in.to_s} }
|
587
|
+
|
588
|
+
specify { expect{ method_call }.to raise_error(ActionControllerTweaks::Session::InvalidOptionValue) }
|
589
|
+
end
|
590
|
+
context 'for expire_at' do
|
591
|
+
context 'with a Hash' do
|
592
|
+
# String#to_time would be nil if format invalid
|
593
|
+
let(:options) { {expire_at: {}} }
|
594
|
+
|
595
|
+
specify { expect{ method_call }.to raise_error(ActionControllerTweaks::Session::InvalidOptionValue) }
|
596
|
+
end
|
597
|
+
context 'with a blank String' do
|
598
|
+
# String#to_time would be nil if format invalid
|
599
|
+
let(:options) { {expire_at: ''} }
|
600
|
+
|
601
|
+
specify { expect{ method_call }.to_not raise_error }
|
602
|
+
end
|
603
|
+
context 'with a time String' do
|
604
|
+
let(:options) { {expire_at: expire_at.to_s} }
|
605
|
+
|
606
|
+
specify { expect{ method_call }.to_not raise_error }
|
607
|
+
end
|
608
|
+
context 'with a Time' do
|
609
|
+
let(:options) { {expire_at: expire_at.to_time} }
|
610
|
+
|
611
|
+
specify { expect{ method_call }.to_not raise_error }
|
612
|
+
end
|
613
|
+
context 'with a Date' do
|
614
|
+
let(:options) { {expire_at: expire_at.to_date} }
|
615
|
+
|
616
|
+
specify { expect{ method_call }.to_not raise_error }
|
617
|
+
end
|
618
|
+
context 'with a DateTime' do
|
619
|
+
let(:options) { {expire_at: expire_at.in_time_zone} }
|
620
|
+
|
621
|
+
specify { expect{ method_call }.to_not raise_error }
|
622
|
+
end
|
623
|
+
end
|
624
|
+
end
|
625
|
+
context 'for new option keys' do
|
626
|
+
context 'for expires_in' do
|
627
|
+
let(:options) { {expires_in: expires_in.to_s} }
|
628
|
+
|
629
|
+
specify { expect{ method_call }.to raise_error(ActionControllerTweaks::Session::InvalidOptionValue) }
|
630
|
+
end
|
631
|
+
context 'for expires_at' do
|
632
|
+
context 'with a Hash' do
|
633
|
+
# String#to_time would be nil if format invalid
|
634
|
+
let(:options) { {expires_at: {}} }
|
635
|
+
|
636
|
+
specify { expect{ method_call }.to raise_error(ActionControllerTweaks::Session::InvalidOptionValue) }
|
637
|
+
end
|
638
|
+
context 'with a blank String' do
|
639
|
+
# String#to_time would be nil if format invalid
|
640
|
+
let(:options) { {expires_at: ''} }
|
641
|
+
|
642
|
+
specify { expect{ method_call }.to_not raise_error }
|
643
|
+
end
|
644
|
+
context 'with a time String' do
|
645
|
+
let(:options) { {expires_at: expire_at.to_s} }
|
646
|
+
|
647
|
+
specify { expect{ method_call }.to_not raise_error }
|
648
|
+
end
|
649
|
+
context 'with a Time' do
|
650
|
+
let(:options) { {expires_at: expire_at.to_time} }
|
651
|
+
|
652
|
+
specify { expect{ method_call }.to_not raise_error }
|
653
|
+
end
|
654
|
+
context 'with a Date' do
|
655
|
+
let(:options) { {expires_at: expire_at.to_date} }
|
656
|
+
|
657
|
+
specify { expect{ method_call }.to_not raise_error }
|
658
|
+
end
|
659
|
+
context 'with a DateTime' do
|
660
|
+
let(:options) { {expires_at: expire_at.in_time_zone} }
|
661
|
+
|
662
|
+
specify { expect{ method_call }.to_not raise_error }
|
663
|
+
end
|
664
|
+
end
|
665
|
+
end
|
666
|
+
end
|
382
667
|
end
|
383
668
|
end
|
384
669
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -7,12 +7,19 @@ require 'action_controller_tweaks'
|
|
7
7
|
|
8
8
|
require 'fixtures/application'
|
9
9
|
require 'fixtures/controllers'
|
10
|
+
|
10
11
|
require 'rspec/rails'
|
12
|
+
require 'rspec/its'
|
11
13
|
|
12
14
|
require 'timecop'
|
13
15
|
require 'logger'
|
14
16
|
|
15
17
|
|
18
|
+
# see https://github.com/rspec/rspec-rails/issues/1171
|
19
|
+
# prevent Test::Unit's AutoRunner from executing during RSpec's rake task
|
20
|
+
Test::Unit.run = true if defined?(Test::Unit) && Test::Unit.respond_to?(:run=)
|
21
|
+
|
22
|
+
|
16
23
|
# For comparison
|
17
24
|
class Hash
|
18
25
|
def deep_include?(sub_hash)
|
metadata
CHANGED
@@ -1,201 +1,229 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: action_controller_tweaks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- PikachuEXE
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-03-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 3.2.0
|
20
|
-
- - <
|
20
|
+
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: 5.0.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: 3.2.0
|
30
|
-
- - <
|
30
|
+
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 5.0.0
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: actionpack
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
|
-
- -
|
37
|
+
- - ">="
|
38
38
|
- !ruby/object:Gem::Version
|
39
39
|
version: 3.2.0
|
40
|
-
- - <
|
40
|
+
- - "<"
|
41
41
|
- !ruby/object:Gem::Version
|
42
42
|
version: 5.0.0
|
43
43
|
type: :runtime
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
|
-
- -
|
47
|
+
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
49
|
version: 3.2.0
|
50
|
-
- - <
|
50
|
+
- - "<"
|
51
51
|
- !ruby/object:Gem::Version
|
52
52
|
version: 5.0.0
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
54
|
name: bundler
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
56
56
|
requirements:
|
57
|
-
- -
|
57
|
+
- - ">="
|
58
58
|
- !ruby/object:Gem::Version
|
59
59
|
version: 1.0.0
|
60
60
|
type: :development
|
61
61
|
prerelease: false
|
62
62
|
version_requirements: !ruby/object:Gem::Requirement
|
63
63
|
requirements:
|
64
|
-
- -
|
64
|
+
- - ">="
|
65
65
|
- !ruby/object:Gem::Version
|
66
66
|
version: 1.0.0
|
67
67
|
- !ruby/object:Gem::Dependency
|
68
68
|
name: rake
|
69
69
|
requirement: !ruby/object:Gem::Requirement
|
70
70
|
requirements:
|
71
|
-
- -
|
71
|
+
- - ">="
|
72
72
|
- !ruby/object:Gem::Version
|
73
73
|
version: 0.9.2
|
74
74
|
type: :development
|
75
75
|
prerelease: false
|
76
76
|
version_requirements: !ruby/object:Gem::Requirement
|
77
77
|
requirements:
|
78
|
-
- -
|
78
|
+
- - ">="
|
79
79
|
- !ruby/object:Gem::Version
|
80
80
|
version: 0.9.2
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
82
|
name: appraisal
|
83
83
|
requirement: !ruby/object:Gem::Requirement
|
84
84
|
requirements:
|
85
|
-
- -
|
85
|
+
- - "~>"
|
86
86
|
- !ruby/object:Gem::Version
|
87
|
-
version: 0
|
87
|
+
version: '1.0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
90
|
version_requirements: !ruby/object:Gem::Requirement
|
91
91
|
requirements:
|
92
|
-
- -
|
92
|
+
- - "~>"
|
93
93
|
- !ruby/object:Gem::Version
|
94
|
-
version: 0
|
94
|
+
version: '1.0'
|
95
95
|
- !ruby/object:Gem::Dependency
|
96
96
|
name: rspec-rails
|
97
97
|
requirement: !ruby/object:Gem::Requirement
|
98
98
|
requirements:
|
99
|
-
- - ~>
|
99
|
+
- - "~>"
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '3.0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - "~>"
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '3.0'
|
109
|
+
- !ruby/object:Gem::Dependency
|
110
|
+
name: rspec-its
|
111
|
+
requirement: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - "~>"
|
100
114
|
- !ruby/object:Gem::Version
|
101
|
-
version: '
|
115
|
+
version: '1.0'
|
102
116
|
type: :development
|
103
117
|
prerelease: false
|
104
118
|
version_requirements: !ruby/object:Gem::Requirement
|
105
119
|
requirements:
|
106
|
-
- - ~>
|
120
|
+
- - "~>"
|
107
121
|
- !ruby/object:Gem::Version
|
108
|
-
version: '
|
122
|
+
version: '1.0'
|
109
123
|
- !ruby/object:Gem::Dependency
|
110
124
|
name: activerecord
|
111
125
|
requirement: !ruby/object:Gem::Requirement
|
112
126
|
requirements:
|
113
|
-
- -
|
127
|
+
- - ">="
|
114
128
|
- !ruby/object:Gem::Version
|
115
129
|
version: 3.2.0
|
116
|
-
- - <
|
130
|
+
- - "<"
|
117
131
|
- !ruby/object:Gem::Version
|
118
132
|
version: 5.0.0
|
119
133
|
type: :development
|
120
134
|
prerelease: false
|
121
135
|
version_requirements: !ruby/object:Gem::Requirement
|
122
136
|
requirements:
|
123
|
-
- -
|
137
|
+
- - ">="
|
124
138
|
- !ruby/object:Gem::Version
|
125
139
|
version: 3.2.0
|
126
|
-
- - <
|
140
|
+
- - "<"
|
127
141
|
- !ruby/object:Gem::Version
|
128
142
|
version: 5.0.0
|
129
143
|
- !ruby/object:Gem::Dependency
|
130
144
|
name: sqlite3
|
131
145
|
requirement: !ruby/object:Gem::Requirement
|
132
146
|
requirements:
|
133
|
-
- -
|
147
|
+
- - ">="
|
134
148
|
- !ruby/object:Gem::Version
|
135
149
|
version: '1.3'
|
136
150
|
type: :development
|
137
151
|
prerelease: false
|
138
152
|
version_requirements: !ruby/object:Gem::Requirement
|
139
153
|
requirements:
|
140
|
-
- -
|
154
|
+
- - ">="
|
141
155
|
- !ruby/object:Gem::Version
|
142
156
|
version: '1.3'
|
143
157
|
- !ruby/object:Gem::Dependency
|
144
158
|
name: database_cleaner
|
145
159
|
requirement: !ruby/object:Gem::Requirement
|
146
160
|
requirements:
|
147
|
-
- -
|
161
|
+
- - ">="
|
148
162
|
- !ruby/object:Gem::Version
|
149
163
|
version: '1.0'
|
150
164
|
type: :development
|
151
165
|
prerelease: false
|
152
166
|
version_requirements: !ruby/object:Gem::Requirement
|
153
167
|
requirements:
|
154
|
-
- -
|
168
|
+
- - ">="
|
155
169
|
- !ruby/object:Gem::Version
|
156
170
|
version: '1.0'
|
157
171
|
- !ruby/object:Gem::Dependency
|
158
172
|
name: timecop
|
159
173
|
requirement: !ruby/object:Gem::Requirement
|
160
174
|
requirements:
|
161
|
-
- -
|
175
|
+
- - ">="
|
162
176
|
- !ruby/object:Gem::Version
|
163
177
|
version: '0.6'
|
164
178
|
type: :development
|
165
179
|
prerelease: false
|
166
180
|
version_requirements: !ruby/object:Gem::Requirement
|
167
181
|
requirements:
|
168
|
-
- -
|
182
|
+
- - ">="
|
169
183
|
- !ruby/object:Gem::Version
|
170
184
|
version: '0.6'
|
171
185
|
- !ruby/object:Gem::Dependency
|
172
186
|
name: coveralls
|
173
187
|
requirement: !ruby/object:Gem::Requirement
|
174
188
|
requirements:
|
175
|
-
- -
|
189
|
+
- - ">="
|
176
190
|
- !ruby/object:Gem::Version
|
177
191
|
version: '0.7'
|
178
192
|
type: :development
|
179
193
|
prerelease: false
|
180
194
|
version_requirements: !ruby/object:Gem::Requirement
|
181
195
|
requirements:
|
182
|
-
- -
|
196
|
+
- - ">="
|
183
197
|
- !ruby/object:Gem::Version
|
184
198
|
version: '0.7'
|
185
199
|
- !ruby/object:Gem::Dependency
|
186
200
|
name: gem-release
|
187
201
|
requirement: !ruby/object:Gem::Requirement
|
188
202
|
requirements:
|
189
|
-
- -
|
203
|
+
- - ">="
|
190
204
|
- !ruby/object:Gem::Version
|
191
205
|
version: '0.7'
|
192
206
|
type: :development
|
193
207
|
prerelease: false
|
194
208
|
version_requirements: !ruby/object:Gem::Requirement
|
195
209
|
requirements:
|
196
|
-
- -
|
210
|
+
- - ">="
|
197
211
|
- !ruby/object:Gem::Version
|
198
212
|
version: '0.7'
|
213
|
+
- !ruby/object:Gem::Dependency
|
214
|
+
name: test-unit
|
215
|
+
requirement: !ruby/object:Gem::Requirement
|
216
|
+
requirements:
|
217
|
+
- - ">="
|
218
|
+
- !ruby/object:Gem::Version
|
219
|
+
version: 3.0.0
|
220
|
+
type: :development
|
221
|
+
prerelease: false
|
222
|
+
version_requirements: !ruby/object:Gem::Requirement
|
223
|
+
requirements:
|
224
|
+
- - ">="
|
225
|
+
- !ruby/object:Gem::Version
|
226
|
+
version: 3.0.0
|
199
227
|
description: ActionController is great, but could be better. Here are some tweaks
|
200
228
|
for it.
|
201
229
|
email:
|
@@ -204,9 +232,9 @@ executables: []
|
|
204
232
|
extensions: []
|
205
233
|
extra_rdoc_files: []
|
206
234
|
files:
|
207
|
-
- .gitignore
|
208
|
-
- .rspec
|
209
|
-
- .travis.yml
|
235
|
+
- ".gitignore"
|
236
|
+
- ".rspec"
|
237
|
+
- ".travis.yml"
|
210
238
|
- Appraisals
|
211
239
|
- CHANGELOG.md
|
212
240
|
- Gemfile
|
@@ -214,8 +242,10 @@ files:
|
|
214
242
|
- README.md
|
215
243
|
- Rakefile
|
216
244
|
- action_controller_tweaks.gemspec
|
217
|
-
- gemfiles/
|
218
|
-
- gemfiles/
|
245
|
+
- gemfiles/rails_3_2.gemfile
|
246
|
+
- gemfiles/rails_4_0.gemfile
|
247
|
+
- gemfiles/rails_4_1.gemfile
|
248
|
+
- gemfiles/rails_4_2.gemfile
|
219
249
|
- lib/action_controller_tweaks.rb
|
220
250
|
- lib/action_controller_tweaks/caching.rb
|
221
251
|
- lib/action_controller_tweaks/session.rb
|
@@ -234,17 +264,17 @@ require_paths:
|
|
234
264
|
- lib
|
235
265
|
required_ruby_version: !ruby/object:Gem::Requirement
|
236
266
|
requirements:
|
237
|
-
- -
|
267
|
+
- - ">="
|
238
268
|
- !ruby/object:Gem::Version
|
239
269
|
version: '0'
|
240
270
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
241
271
|
requirements:
|
242
|
-
- -
|
272
|
+
- - ">="
|
243
273
|
- !ruby/object:Gem::Version
|
244
274
|
version: 1.4.0
|
245
275
|
requirements: []
|
246
276
|
rubyforge_project:
|
247
|
-
rubygems_version: 2.
|
277
|
+
rubygems_version: 2.4.5
|
248
278
|
signing_key:
|
249
279
|
specification_version: 4
|
250
280
|
summary: Some Tweaks for ActionController
|
data/gemfiles/rails3_2.gemfile
DELETED