action_controller_tweaks 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
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=>"../"