action_controller_tweaks 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9549506d76d4ea2032b34467b985b9ae3bc173d2
4
- data.tar.gz: cf82467af5dc365d2a9638cdc2ee282854a69640
3
+ metadata.gz: d18d5ac685043630bc71743acdbdfa01954ca26d
4
+ data.tar.gz: decb6e92a43ee69c13b753d1fe7ba350011aea9b
5
5
  SHA512:
6
- metadata.gz: ceba069ed9da41fd92bf3ab52c1e578929ef38fc059b041d6bd4ee6fd1fee0ac7a1e5fd8db718a2303e6a8335314dca388c2b654d7ecea6a7bd73264c0fbbd1d
7
- data.tar.gz: b10c3a0d6a0feb7cf2c30e48ab479856d7dc8052617d5c2959486cfc5119b8aedd4eb08d25250671f91119ab961debe2bf322e50675a5fbe55fcfb93ea47452f
6
+ metadata.gz: 218dc267dee725e8084a96c09ed05403ea2b6591a9b3ad438349f3584fe5499a635e6d46c204cd5f1731d3e01015bfc95fd639b41c04ce856b7d28acac7e404e
7
+ data.tar.gz: ffae98b515dd4d3ac1068c87e484e5b32b9cd47e8abbccfb5a780bf28e108879849c37a842ce654592d5ee52416b0fa33a7ec1b8a3140a1fbc6e3fdc87f02c1e
data/.travis.yml CHANGED
@@ -1,11 +1,12 @@
1
- before_install:
2
- - gem install bundler -v=1.5.2
3
- - bundle --version
1
+ language: ruby
2
+ cache:
3
+ - bundler
4
4
  rvm:
5
5
  - 1.9.2
6
6
  - 1.9.3
7
7
  - 2.0.0
8
8
  - 2.1.0
9
+ - 2.1.1
9
10
  gemfile:
10
11
  - gemfiles/rails3_2.gemfile
11
12
  - gemfiles/rails4_0.gemfile
data/Appraisals CHANGED
@@ -1,12 +1,14 @@
1
1
 
2
2
  appraise "rails3-2" do
3
- version = "3.2.16"
3
+ version = "3.2.17"
4
4
  gem 'activesupport', version
5
5
  gem 'actionpack', version
6
+ gem 'activerecord', version
6
7
  end
7
8
 
8
9
  appraise "rails4-0" do
9
- version = "4.0.2"
10
+ version = "4.0.3"
10
11
  gem 'activesupport', version
11
12
  gem 'actionpack', version
13
+ gem 'activerecord', version
12
14
  end
data/CHANGELOG.md CHANGED
@@ -1,6 +1,12 @@
1
1
  ### Changelog
2
2
 
3
3
 
4
+ - **0.3.0**
5
+ - Add method `#set_session_with_expiry`
6
+ - Add option `expires_in` and `expires_at` to #set_session
7
+ - Fix invalid header when using `#set_no_cache` for HTTP 1.0
8
+ - Raise error when reserved session key(s) is set through the provided method
9
+
4
10
  - **0.2.0**
5
11
  - Add option `expire_at` to #set_session
6
12
  - Use semantic versioning
data/README.md CHANGED
@@ -9,11 +9,11 @@ Tested against:
9
9
  - Action Controller of version `3.2` and `4.0` (`3.1` and below got problem with buggy `rspec-rails`)
10
10
  - Ruby `1.9.2`, `1.9.3`, `2.0.0` (except Rails 4 with `1.9.2`)
11
11
 
12
- [![Build Status](https://travis-ci.org/PikachuEXE/action_controller_tweaks.png?branch=master)](https://travis-ci.org/PikachuEXE/action_controller_tweaks)
13
- [![Gem Version](https://badge.fury.io/rb/action_controller_tweaks.png)](http://badge.fury.io/rb/action_controller_tweaks)
14
- [![Dependency Status](https://gemnasium.com/PikachuEXE/action_controller_tweaks.png)](https://gemnasium.com/PikachuEXE/action_controller_tweaks)
15
- [![Coverage Status](https://coveralls.io/repos/PikachuEXE/action_controller_tweaks/badge.png)](https://coveralls.io/r/PikachuEXE/action_controller_tweaks)
16
- [![Code Climate](https://codeclimate.com/github/PikachuEXE/action_controller_tweaks.png)](https://codeclimate.com/github/PikachuEXE/action_controller_tweaks)
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)
17
17
 
18
18
  Install
19
19
  =======
@@ -41,11 +41,24 @@ Usage:
41
41
  set_no_cache
42
42
  ```
43
43
 
44
- ### `#set_session`
44
+ ### `#set_session` & `#set_session_with_expiry`
45
45
  I write this on my own, it's ok to blame me if it's buggy :P
46
46
  This method let's you set session, with expiry time!
47
+ It depends on `before_filter`/`before_action` to remove expired session keys
48
+ Valid options: `expire_in`, `expires_in`, `expire_at`, `expires_at`
47
49
  Example:
48
50
  ```ruby
51
+ # Option keys are NOT checked
52
+ set_session(:key, 'value') # => Just like session[:key] = 'value'
53
+
49
54
  set_session(:key, 'value', expire_in: 1.day)
55
+ set_session(:key, 'value', expires_in: 1.day)
56
+
57
+ set_session(:key, 'value', expire_at: 1.day.from_now)
58
+ set_session(:key, 'value', expires_at: 1.day.from_now)
59
+
60
+ # Option keys are checked
61
+ # You must pass valid options or error will be raised
62
+ set_session_with_expiry(:key, 'value', expires_in: 1.day)
50
63
  ```
51
64
  Note: Please don't use the session key `session_keys_to_expire`, it's reserved for internal processing
@@ -9,7 +9,7 @@ require "#{gem_name}/version"
9
9
  Gem::Specification.new do |s|
10
10
  s.platform = Gem::Platform::RUBY
11
11
  s.name = gem_name
12
- s.version = ActionControllerTweaks::VERSION
12
+ s.version = ActionControllerTweaks.version
13
13
  s.summary = "Some Tweaks for ActionController"
14
14
  s.description = "ActionController is great, but could be better. Here are some tweaks for it."
15
15
 
@@ -2,7 +2,8 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "activesupport", "3.2.16"
6
- gem "actionpack", "3.2.16"
5
+ gem "activesupport", "3.2.17"
6
+ gem "actionpack", "3.2.17"
7
+ gem "activerecord", "3.2.17"
7
8
 
8
9
  gemspec :path=>"../"
@@ -2,7 +2,8 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "activesupport", "4.0.2"
6
- gem "actionpack", "4.0.2"
5
+ gem "activesupport", "4.0.3"
6
+ gem "actionpack", "4.0.3"
7
+ gem "activerecord", "4.0.3"
7
8
 
8
9
  gemspec :path=>"../"
@@ -6,8 +6,8 @@ module ActionControllerTweaks
6
6
 
7
7
  HEADERS = {
8
8
  "Cache-Control" => "no-cache, no-store, max-age=0, must-revalidate, pre-check=0, post-check=0", # HTTP 1.1
9
- "no-cache" => "no-cache", # HTTP 1.0
10
- "Expires" => "Fri, 01 Jan 1990 00:00:00 GMT", # Proxies
9
+ "Pragma" => "no-cache", # HTTP 1.0
10
+ "Expires" => "Fri, 01 Jan 1990 00:00:00 GMT", # HTTP 1.0
11
11
  }.freeze
12
12
 
13
13
  included do
@@ -5,7 +5,18 @@ module ActionControllerTweaks
5
5
  module Session
6
6
  extend ActiveSupport::Concern
7
7
 
8
- SPECIAL_KEYS = %w( session_keys_to_expire )
8
+ module Errors
9
+ InvalidOptionKeys = Class.new(ArgumentError)
10
+ ReservedSessionKeyConflict = Class.new(ArgumentError)
11
+ end
12
+
13
+ RESERVED_SESSION_KEYS = %w( session_keys_to_expire )
14
+ VALID_OPTION_KEYS = [
15
+ :expires_in,
16
+ :expires_at,
17
+ :expire_in,
18
+ :expire_at,
19
+ ].freeze
9
20
 
10
21
  class InvalidOptionValue < ArgumentError
11
22
  def self.new(option_key, options_value, expected_types)
@@ -19,13 +30,17 @@ module ActionControllerTweaks
19
30
 
20
31
  private
21
32
 
33
+ # Set session just like `session[key] = value` but accept some options about expiry
34
+ #
35
+ # @option expires_in [Integer] How long from now should the session value be expired
36
+ # @option expire_in [Integer] same as `expires_in`
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
+ # @option expire_at [Integer] same as `expires_at`
22
39
  def set_session(key, value, options = {})
23
40
  options.symbolize_keys!
24
41
 
25
- key = key.to_sym
26
-
27
- if SPECIAL_KEYS.include?(key.to_s)
28
- return
42
+ if RESERVED_SESSION_KEYS.include?(key.to_s)
43
+ raise Errors::ReservedSessionKeyConflict.new, "you are trying to set #{value} to #{key}, but reserved by ActionControllerTweaks::Session"
29
44
  end
30
45
 
31
46
  session[key] = value
@@ -33,24 +48,39 @@ module ActionControllerTweaks
33
48
  # Set special session
34
49
  new_session_keys_to_expire = session_keys_to_expire
35
50
 
36
- expire_in, expire_at = options.delete(:expire_in), options.delete(:expire_at)
51
+ expires_in = options.delete(:expires_in) || options.delete(:expire_in)
52
+ expires_at = options.delete(:expires_at) || options.delete(:expire_at)
37
53
 
38
- if expire_at && expire_at.respond_to?(:to_time)
39
- expire_at = expire_at.to_time
54
+ if expires_at && expires_at.respond_to?(:to_time)
55
+ expires_at = expires_at.to_time
40
56
  end
41
57
 
42
- raise InvalidOptionValue.new(:expire_in, expire_in, Numeric) if expire_in && !expire_in.is_a?(Numeric)
43
- raise InvalidOptionValue.new(:expire_at, expire_at, Time) if expire_at && !expire_at.is_a?(Time)
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)
44
60
 
45
- new_session_keys_to_expire[key] = if expire_in
46
- expire_in.from_now
47
- elsif expire_at
48
- expire_at
61
+ new_session_keys_to_expire[key] = if expires_in
62
+ expires_in.from_now
63
+ elsif expires_at
64
+ expires_at
49
65
  end
50
66
 
51
67
  session[:session_keys_to_expire] = new_session_keys_to_expire
52
68
  end
53
69
 
70
+ # set value in session just like `set_session`, but checked option keys
71
+ #
72
+ # @raise [ActionControllerTweaks::Session::Errors::InvalidOptionKeys]
73
+ def set_session_with_expiry(key, value, options = {})
74
+ option_keys = options.symbolize_keys.keys
75
+ required_option_key_present = option_keys.any? do |key|
76
+ VALID_OPTION_KEYS.include?(key)
77
+ end
78
+ invalid_option_key_absent = (option_keys - VALID_OPTION_KEYS.dup).empty?
79
+ (required_option_key_present && invalid_option_key_absent) or raise ActionControllerTweaks::Session::Errors::InvalidOptionKeys
80
+
81
+ set_session(key, value, options = {})
82
+ end
83
+
54
84
  def delete_expired_session_keys
55
85
  # Remove keys that are expired
56
86
  session_keys_to_expire.each do |key, expire_at_str|
@@ -1,3 +1,7 @@
1
1
  module ActionControllerTweaks
2
- VERSION = '0.2.0'
2
+ VERSION = '0.3.0'
3
+
4
+ def self.version
5
+ Gem::Version.new(VERSION)
6
+ end
3
7
  end
@@ -20,154 +20,294 @@ describe PostsController, type: :controller do
20
20
  end
21
21
 
22
22
  describe '::Session' do
23
+ let(:session_key) { :key }
24
+ let(:session_value) { 'value' }
25
+
23
26
  describe '#set_session' do
24
- let(:session_key) { :key }
25
- let(:session_value) { 'value' }
26
27
  let(:expire_in) { 60 * 60 } # 1 hour
27
28
  let(:expire_at) { Time.new(2014, 1, 1).in_time_zone }
28
29
  let(:time_now) { Time.new(2013, 1, 1).in_time_zone }
30
+ # Corrected option keys
31
+ let(:expires_in) { expire_in }
32
+ let(:expires_at) { expire_at }
29
33
 
30
34
  context 'when calling it without option' do
31
- before do
35
+ let :set_session do
32
36
  controller.send(:set_session, session_key, session_value)
33
37
  end
34
38
 
35
- it 'set the session' do
36
- session[session_key].should eq session_value
39
+ context 'with normal key' do
40
+ before do
41
+ set_session
42
+ end
43
+
44
+ it 'set the session' do
45
+ session[session_key].should eq session_value
46
+ end
37
47
  end
38
48
 
39
- context 'with a special key' do
40
- let(:session_key) { ActionControllerTweaks::Session::SPECIAL_KEYS.first }
49
+ context 'with a reserved key' do
50
+ let(:session_key) { ActionControllerTweaks::Session::RESERVED_SESSION_KEYS.first }
41
51
 
42
- it 'does not set the session' do
43
- session[session_key].should be_nil
52
+ it 'raise error' do
53
+ expect { set_session }.to raise_error(ActionControllerTweaks::Session::Errors::ReservedSessionKeyConflict)
44
54
  end
45
55
  end
46
56
  end
47
57
 
48
- context 'when calling it with option expire_in' do
49
- let!(:time_before_expire) { time_now + (expire_in / 2) }
50
- let!(:time_after_expire) { time_now + (expire_in * 2) }
58
+ context 'for old option keys' do
59
+ context 'when calling it with option expire_in' do
60
+ let!(:time_before_expire) { time_now + (expire_in / 2) }
61
+ let!(:time_after_expire) { time_now + (expire_in * 2) }
51
62
 
52
- before do
53
- Timecop.freeze(time_now)
54
- controller.send(:set_session, session_key, session_value, expire_in: expire_in)
55
- end
63
+ before do
64
+ Timecop.freeze(time_now)
65
+ controller.send(:set_session, session_key, session_value, expire_in: expire_in)
66
+ end
56
67
 
57
- after do
58
- Timecop.return
59
- end
68
+ after do
69
+ Timecop.return
70
+ end
71
+
72
+ it 'set the session' do
73
+ session[session_key].should eq session_value
74
+ end
60
75
 
61
- it 'set the session' do
62
- session[session_key].should eq session_value
76
+ context 'before expire time' do
77
+ before do
78
+ Timecop.travel(time_before_expire)
79
+ # Runs before_filter
80
+ get :index
81
+ end
82
+
83
+ it 'keeps the session key' do
84
+ session[session_key].should eq session_value
85
+ end
86
+ end
87
+ context 'after expire time' do
88
+ before do
89
+ Timecop.travel(time_after_expire)
90
+ # Runs before_filter
91
+ get :index
92
+ end
93
+
94
+ it 'keeps the session key' do
95
+ session.key?(session_key).should be_false
96
+ end
97
+ end
63
98
  end
64
99
 
65
- context 'before expire time' do
100
+ context 'when calling it with option expire_at' do
101
+ let!(:time_before_expire) { expire_at - 1 }
102
+ let!(:time_after_expire) { expire_at + 1 }
103
+
66
104
  before do
67
- Timecop.travel(time_before_expire)
68
- # Runs before_filter
69
- get :index
105
+ Timecop.freeze(time_now)
106
+ controller.send(:set_session, session_key, session_value, expire_at: expire_at)
107
+ end
108
+
109
+ after do
110
+ Timecop.return
70
111
  end
71
112
 
72
- it 'keeps the session key' do
113
+ it 'set the session' do
73
114
  session[session_key].should eq session_value
74
115
  end
116
+
117
+ context 'before expire time' do
118
+ before do
119
+ Timecop.travel(time_before_expire)
120
+ # Runs before_filter
121
+ get :index
122
+ end
123
+
124
+ it 'keeps the session key' do
125
+ session[session_key].should eq session_value
126
+ end
127
+ end
128
+ context 'after expire time' do
129
+ before do
130
+ Timecop.travel(time_after_expire)
131
+ # Runs before_filter
132
+ get :index
133
+ end
134
+
135
+ it 'keeps the session key' do
136
+ session.key?(session_key).should be_false
137
+ end
138
+ end
75
139
  end
76
- context 'after expire time' do
140
+ end
141
+ context 'for new option keys' do
142
+ context 'when calling it with option expires_in' do
143
+ let!(:time_before_expire) { time_now + (expires_in / 2) }
144
+ let!(:time_after_expire) { time_now + (expires_in * 2) }
145
+
77
146
  before do
78
- Timecop.travel(time_after_expire)
79
- # Runs before_filter
80
- get :index
147
+ Timecop.freeze(time_now)
148
+ controller.send(:set_session, session_key, session_value, expires_in: expires_in)
81
149
  end
82
150
 
83
- it 'keeps the session key' do
84
- session.key?(session_key).should be_false
151
+ after do
152
+ Timecop.return
85
153
  end
86
- end
87
- end
88
154
 
89
- context 'when calling it with option expire_at' do
90
- let!(:time_before_expire) { expire_at - 1 }
91
- let!(:time_after_expire) { expire_at + 1 }
155
+ it 'set the session' do
156
+ session[session_key].should eq session_value
157
+ end
92
158
 
93
- before do
94
- Timecop.freeze(time_now)
95
- controller.send(:set_session, session_key, session_value, expire_at: expire_at)
96
- end
159
+ context 'before expire time' do
160
+ before do
161
+ Timecop.travel(time_before_expire)
162
+ # Runs before_filter
163
+ get :index
164
+ end
97
165
 
98
- after do
99
- Timecop.return
166
+ it 'keeps the session key' do
167
+ session[session_key].should eq session_value
168
+ end
169
+ end
170
+ context 'after expire time' do
171
+ before do
172
+ Timecop.travel(time_after_expire)
173
+ # Runs before_filter
174
+ get :index
175
+ end
176
+
177
+ it 'keeps the session key' do
178
+ session.key?(session_key).should be_false
179
+ end
180
+ end
100
181
  end
101
182
 
102
- it 'set the session' do
103
- session[session_key].should eq session_value
104
- end
183
+ context 'when calling it with option expires_at' do
184
+ let!(:time_before_expire) { expires_at - 1 }
185
+ let!(:time_after_expire) { expires_at + 1 }
105
186
 
106
- context 'before expire time' do
107
187
  before do
108
- Timecop.travel(time_before_expire)
109
- # Runs before_filter
110
- get :index
188
+ Timecop.freeze(time_now)
189
+ controller.send(:set_session, session_key, session_value, expire_at: expires_at)
111
190
  end
112
191
 
113
- it 'keeps the session key' do
114
- session[session_key].should eq session_value
192
+ after do
193
+ Timecop.return
115
194
  end
116
- end
117
- context 'after expire time' do
118
- before do
119
- Timecop.travel(time_after_expire)
120
- # Runs before_filter
121
- get :index
195
+
196
+ it 'set the session' do
197
+ session[session_key].should eq session_value
122
198
  end
123
199
 
124
- it 'keeps the session key' do
125
- session.key?(session_key).should be_false
200
+ context 'before expire time' do
201
+ before do
202
+ Timecop.travel(time_before_expire)
203
+ # Runs before_filter
204
+ get :index
205
+ end
206
+
207
+ it 'keeps the session key' do
208
+ session[session_key].should eq session_value
209
+ end
210
+ end
211
+ context 'after expire time' do
212
+ before do
213
+ Timecop.travel(time_after_expire)
214
+ # Runs before_filter
215
+ get :index
216
+ end
217
+
218
+ it 'keeps the session key' do
219
+ session.key?(session_key).should be_false
220
+ end
126
221
  end
127
222
  end
128
223
  end
129
224
 
225
+
130
226
  context 'when option value with different types is passed into options' do
131
227
  let(:method_call) do
132
228
  controller.send(:set_session, session_key, session_value, options)
133
229
  end
134
- context 'for expire_in' do
135
- let(:options) { {expire_in: expire_in.to_s} }
136
230
 
137
- specify { expect{ method_call }.to raise_error(ActionControllerTweaks::Session::InvalidOptionValue) }
138
- end
139
- context 'for expire_at' do
140
- context 'with a Hash' do
141
- # String#to_time would be nil if format invalid
142
- let(:options) { {expire_at: {}} }
231
+ context 'for old option keys' do
232
+ context 'for expire_in' do
233
+ let(:options) { {expire_in: expire_in.to_s} }
143
234
 
144
235
  specify { expect{ method_call }.to raise_error(ActionControllerTweaks::Session::InvalidOptionValue) }
145
236
  end
146
- context 'with a blank String' do
147
- # String#to_time would be nil if format invalid
148
- let(:options) { {expire_at: ''} }
149
-
150
- specify { expect{ method_call }.to_not raise_error }
151
- end
152
- context 'with a time String' do
153
- let(:options) { {expire_at: expire_at.to_s} }
154
-
155
- specify { expect{ method_call }.to_not raise_error }
156
- end
157
- context 'with a Time' do
158
- let(:options) { {expire_at: expire_at.to_time} }
159
-
160
- specify { expect{ method_call }.to_not raise_error }
237
+ context 'for expire_at' do
238
+ context 'with a Hash' do
239
+ # String#to_time would be nil if format invalid
240
+ let(:options) { {expire_at: {}} }
241
+
242
+ specify { expect{ method_call }.to raise_error(ActionControllerTweaks::Session::InvalidOptionValue) }
243
+ end
244
+ context 'with a blank String' do
245
+ # String#to_time would be nil if format invalid
246
+ let(:options) { {expire_at: ''} }
247
+
248
+ specify { expect{ method_call }.to_not raise_error }
249
+ end
250
+ context 'with a time String' do
251
+ let(:options) { {expire_at: expire_at.to_s} }
252
+
253
+ specify { expect{ method_call }.to_not raise_error }
254
+ end
255
+ context 'with a Time' do
256
+ let(:options) { {expire_at: expire_at.to_time} }
257
+
258
+ specify { expect{ method_call }.to_not raise_error }
259
+ end
260
+ context 'with a Date' do
261
+ let(:options) { {expire_at: expire_at.to_date} }
262
+
263
+ specify { expect{ method_call }.to_not raise_error }
264
+ end
265
+ context 'with a DateTime' do
266
+ let(:options) { {expire_at: expire_at.in_time_zone} }
267
+
268
+ specify { expect{ method_call }.to_not raise_error }
269
+ end
161
270
  end
162
- context 'with a Date' do
163
- let(:options) { {expire_at: expire_at.to_date} }
271
+ end
272
+ context 'for new option keys' do
273
+ context 'for expires_in' do
274
+ let(:options) { {expires_in: expires_in.to_s} }
164
275
 
165
- specify { expect{ method_call }.to_not raise_error }
276
+ specify { expect{ method_call }.to raise_error(ActionControllerTweaks::Session::InvalidOptionValue) }
166
277
  end
167
- context 'with a DateTime' do
168
- let(:options) { {expire_at: expire_at.in_time_zone} }
169
-
170
- specify { expect{ method_call }.to_not raise_error }
278
+ context 'for expires_at' do
279
+ context 'with a Hash' do
280
+ # String#to_time would be nil if format invalid
281
+ let(:options) { {expires_at: {}} }
282
+
283
+ specify { expect{ method_call }.to raise_error(ActionControllerTweaks::Session::InvalidOptionValue) }
284
+ end
285
+ context 'with a blank String' do
286
+ # String#to_time would be nil if format invalid
287
+ let(:options) { {expires_at: ''} }
288
+
289
+ specify { expect{ method_call }.to_not raise_error }
290
+ end
291
+ context 'with a time String' do
292
+ let(:options) { {expires_at: expire_at.to_s} }
293
+
294
+ specify { expect{ method_call }.to_not raise_error }
295
+ end
296
+ context 'with a Time' do
297
+ let(:options) { {expires_at: expire_at.to_time} }
298
+
299
+ specify { expect{ method_call }.to_not raise_error }
300
+ end
301
+ context 'with a Date' do
302
+ let(:options) { {expires_at: expire_at.to_date} }
303
+
304
+ specify { expect{ method_call }.to_not raise_error }
305
+ end
306
+ context 'with a DateTime' do
307
+ let(:options) { {expires_at: expire_at.in_time_zone} }
308
+
309
+ specify { expect{ method_call }.to_not raise_error }
310
+ end
171
311
  end
172
312
  end
173
313
  end
@@ -201,5 +341,44 @@ describe PostsController, type: :controller do
201
341
  end
202
342
  end
203
343
  end
344
+
345
+ describe '#set_session_with_expiry' do
346
+ let(:method_call) do
347
+ controller.send(:set_session_with_expiry, session_key, session_value, options)
348
+ end
349
+
350
+ context 'when call with no options' do
351
+ let!(:options) { {} }
352
+
353
+ specify { expect{method_call}.to raise_error(ActionControllerTweaks::Session::Errors::InvalidOptionKeys) }
354
+ end
355
+ context 'when call with invalid option keys' do
356
+ let!(:options) { {key: :value} }
357
+
358
+ specify { expect{method_call}.to raise_error(ActionControllerTweaks::Session::Errors::InvalidOptionKeys) }
359
+ end
360
+ context 'when call with valid option keys' do
361
+ context 'like expire_in' do
362
+ let!(:options) { {expire_in: 1.day} }
363
+
364
+ specify { expect{method_call}.to_not raise_error }
365
+ end
366
+ context 'like expire_at' do
367
+ let!(:options) { {expire_at: 1.day.from_now} }
368
+
369
+ specify { expect{method_call}.to_not raise_error }
370
+ end
371
+ context 'like expires_in' do
372
+ let!(:options) { {expires_in: 1.day} }
373
+
374
+ specify { expect{method_call}.to_not raise_error }
375
+ end
376
+ context 'like expires_at' do
377
+ let!(:options) { {expires_at: 1.day.from_now} }
378
+
379
+ specify { expect{method_call}.to_not raise_error }
380
+ end
381
+ end
382
+ end
204
383
  end
205
384
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: action_controller_tweaks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - PikachuEXE
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-17 00:00:00.000000000 Z
11
+ date: 2014-03-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -244,7 +244,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
244
244
  version: 1.4.0
245
245
  requirements: []
246
246
  rubyforge_project:
247
- rubygems_version: 2.2.1
247
+ rubygems_version: 2.2.2
248
248
  signing_key:
249
249
  specification_version: 4
250
250
  summary: Some Tweaks for ActionController