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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d18d5ac685043630bc71743acdbdfa01954ca26d
4
- data.tar.gz: decb6e92a43ee69c13b753d1fe7ba350011aea9b
3
+ metadata.gz: feadb1e4e2545cb5b2adc42b4ce47aeef0955947
4
+ data.tar.gz: a0e5eb6fbf78fb8fec5d37a303d836c19dbbc67c
5
5
  SHA512:
6
- metadata.gz: 218dc267dee725e8084a96c09ed05403ea2b6591a9b3ad438349f3584fe5499a635e6d46c204cd5f1731d3e01015bfc95fd639b41c04ce856b7d28acac7e404e
7
- data.tar.gz: ffae98b515dd4d3ac1068c87e484e5b32b9cd47e8abbccfb5a780bf28e108879849c37a842ce654592d5ee52416b0fa33a7ec1b8a3140a1fbc6e3fdc87f02c1e
6
+ metadata.gz: 4367c9a17979a053bbb94a16022fdfeb2f491e66028e53fa856e3f048323ce0d182ca1052fe7cdb2d62f0b4726ce4ed12f9effaeeb28ee99a19b739073ce118c
7
+ data.tar.gz: eb0f9cafd5ea2274e88bfe04899da73966508f919907d25ec2593c568d45241ea7abd99d17d8ebfc66edd46d32d124274e1a8b5a836f5e5267f9573ac841fe05
data/.gitignore CHANGED
@@ -1,2 +1,7 @@
1
- gemfiles/*.gemfile.lock
2
1
  Gemfile.lock
2
+ # Ignore Coverage Report
3
+ coverage/.last_run.json
4
+ coverage/.resultset.json
5
+ # Ignore Appraisal related files
6
+ gemfiles/*.gemfile.lock
7
+ pkg/*
@@ -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.0
8
- - 2.1.0
9
- - 2.1.1
6
+ - 2.0
7
+ - 2.1
8
+ - 2.2
9
+ - ruby-head
10
10
  gemfile:
11
- - gemfiles/rails3_2.gemfile
12
- - gemfiles/rails4_0.gemfile
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
- exclude:
15
- - rvm: 1.9.2
16
- gemfile: gemfiles/rails4_0.gemfile
16
+ fast_finish: true
17
+ allow_failures:
18
+ - rvm: ruby-head
17
19
 
data/Appraisals CHANGED
@@ -1,14 +1,32 @@
1
1
 
2
- appraise "rails3-2" do
3
- version = "3.2.17"
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 "rails4-0" do
10
- version = "4.0.3"
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
@@ -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
- [![Build Status](http://img.shields.io/travis/PikachuEXE/action_controller_tweaks.svg)](https://travis-ci.org/PikachuEXE/action_controller_tweaks)
13
- [![Gem Version](http://img.shields.io/gem/v/action_controller_tweaks.svg)](http://badge.fury.io/rb/action_controller_tweaks)
14
- [![Dependency Status](http://img.shields.io/gemnasium/PikachuEXE/action_controller_tweaks.svg)](https://gemnasium.com/PikachuEXE/action_controller_tweaks)
15
- [![Coverage Status](http://img.shields.io/coveralls/PikachuEXE/action_controller_tweaks.svg)](https://coveralls.io/r/PikachuEXE/action_controller_tweaks)
16
- [![Code Climate](http://img.shields.io/codeclimate/github/PikachuEXE/action_controller_tweaks.svg)](https://codeclimate.com/github/PikachuEXE/action_controller_tweaks)
9
+ [![Build Status](http://img.shields.io/travis/PikachuEXE/action_controller_tweaks.svg?style=flat-square)](https://travis-ci.org/PikachuEXE/action_controller_tweaks)
10
+ [![Gem Version](http://img.shields.io/gem/v/action_controller_tweaks.svg?style=flat-square)](http://badge.fury.io/rb/action_controller_tweaks)
11
+ [![Dependency Status](http://img.shields.io/gemnasium/PikachuEXE/action_controller_tweaks.svg?style=flat-square)](https://gemnasium.com/PikachuEXE/action_controller_tweaks)
12
+ [![Coverage Status](http://img.shields.io/coveralls/PikachuEXE/action_controller_tweaks.svg?style=flat-square)](https://coveralls.io/r/PikachuEXE/action_controller_tweaks)
13
+ [![Code Climate](http://img.shields.io/codeclimate/github/PikachuEXE/action_controller_tweaks.svg?style=flat-square)](https://codeclimate.com/github/PikachuEXE/action_controller_tweaks)
17
14
 
18
15
  Install
19
16
  =======
data/Rakefile CHANGED
@@ -8,7 +8,7 @@ RSpec::Core::RakeTask.new(:spec)
8
8
 
9
9
  if !ENV["APPRAISAL_INITIALIZED"] && !ENV["TRAVIS"]
10
10
  task :default do
11
- sh "rake appraisal:install && rake appraisal spec"
11
+ sh "appraisal install && rake appraisal spec"
12
12
  end
13
13
  else
14
14
  task :default => :spec
@@ -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", ">= 0.5.2"
35
- s.add_development_dependency "rspec-rails", "~> 2.6"
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
@@ -0,0 +1,10 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 3.2.20"
6
+ gem "actionpack", "~> 3.2.20"
7
+ gem "activerecord", "~> 3.2.20"
8
+ gem "railties", "~> 3.2.20"
9
+
10
+ gemspec :path => "../"
@@ -0,0 +1,10 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 4.0.12"
6
+ gem "actionpack", "~> 4.0.12"
7
+ gem "activerecord", "~> 4.0.12"
8
+ gem "railties", "~> 4.0.12"
9
+
10
+ gemspec :path => "../"
@@ -0,0 +1,10 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 4.1.8"
6
+ gem "actionpack", "~> 4.1.8"
7
+ gem "activerecord", "~> 4.1.8"
8
+ gem "railties", "~> 4.1.8"
9
+
10
+ gemspec :path => "../"
@@ -0,0 +1,10 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 4.2.0"
6
+ gem "actionpack", "~> 4.2.0"
7
+ gem "activerecord", "~> 4.2.0"
8
+ gem "railties", "~> 4.2.0"
9
+
10
+ gemspec :path => "../"
@@ -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
- # Set special session
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
@@ -1,5 +1,5 @@
1
1
  module ActionControllerTweaks
2
- VERSION = '0.3.0'
2
+ VERSION = '0.3.1'
3
3
 
4
4
  def self.version
5
5
  Gem::Version.new(VERSION)
@@ -2,8 +2,8 @@ require 'spec_helper'
2
2
 
3
3
  describe PostsController, type: :controller do
4
4
  describe 'included modules' do
5
- it do
6
- described_class.ancestors.should include(ActionControllerTweaks)
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
- controller.headers.deep_include?(ActionControllerTweaks::Caching::HEADERS).should be_true
18
- end
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].should eq session_value
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].should eq session_value
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].should eq session_value
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).should be_false
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].should eq session_value
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].should eq session_value
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).should be_false
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].should eq session_value
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].should eq session_value
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).should be_false
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].should eq session_value
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].should eq session_value
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).should be_false
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).should be_false
343
+ expect(session.key?(session_key)).to be false
330
344
  end
331
345
  end
332
346
 
333
- context 'when someone set non has to session_keys_to_expire' do
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).should be_true
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
@@ -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.0
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: 2014-03-14 00:00:00.000000000 Z
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.5.2
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.5.2
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: '2.6'
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: '2.6'
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/rails3_2.gemfile
218
- - gemfiles/rails4_0.gemfile
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.2.2
277
+ rubygems_version: 2.4.5
248
278
  signing_key:
249
279
  specification_version: 4
250
280
  summary: Some Tweaks for ActionController
@@ -1,9 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "activesupport", "3.2.17"
6
- gem "actionpack", "3.2.17"
7
- gem "activerecord", "3.2.17"
8
-
9
- gemspec :path=>"../"
@@ -1,9 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "activesupport", "4.0.3"
6
- gem "actionpack", "4.0.3"
7
- gem "activerecord", "4.0.3"
8
-
9
- gemspec :path=>"../"