action_controller_tweaks 0.1 → 0.2.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: aeeb3006ab00803aac920b909546dbfcb1853544
4
- data.tar.gz: ed85182325fced848b6d19bc30f18c996197d583
3
+ metadata.gz: 9549506d76d4ea2032b34467b985b9ae3bc173d2
4
+ data.tar.gz: cf82467af5dc365d2a9638cdc2ee282854a69640
5
5
  SHA512:
6
- metadata.gz: 43e666c777d955b2da529f99afa44054ea51e2915ad4c6d61c30df1524cd41881179817170cb541b19d47787bda3b22b4f4ce7679757326102be9f4f1b29f30d
7
- data.tar.gz: 4b68f979cc6074dbbe199cd11b857bc6f3c01ccfe1a9c82cf9d800468140bced99a692e611feb82f36704ef5b7cc60fedf08a108c7a4845cde3df04726ca21e8
6
+ metadata.gz: ceba069ed9da41fd92bf3ab52c1e578929ef38fc059b041d6bd4ee6fd1fee0ac7a1e5fd8db718a2303e6a8335314dca388c2b654d7ecea6a7bd73264c0fbbd1d
7
+ data.tar.gz: b10c3a0d6a0feb7cf2c30e48ab479856d7dc8052617d5c2959486cfc5119b8aedd4eb08d25250671f91119ab961debe2bf322e50675a5fbe55fcfb93ea47452f
@@ -1,8 +1,11 @@
1
- script: "bundle exec rspec"
1
+ before_install:
2
+ - gem install bundler -v=1.5.2
3
+ - bundle --version
2
4
  rvm:
3
5
  - 1.9.2
4
6
  - 1.9.3
5
7
  - 2.0.0
8
+ - 2.1.0
6
9
  gemfile:
7
10
  - gemfiles/rails3_2.gemfile
8
11
  - gemfiles/rails4_0.gemfile
data/Appraisals CHANGED
@@ -1,12 +1,12 @@
1
1
 
2
2
  appraise "rails3-2" do
3
- version = "3.2.14"
3
+ version = "3.2.16"
4
4
  gem 'activesupport', version
5
5
  gem 'actionpack', version
6
6
  end
7
7
 
8
8
  appraise "rails4-0" do
9
- version = "4.0.0"
9
+ version = "4.0.2"
10
10
  gem 'activesupport', version
11
11
  gem 'actionpack', version
12
12
  end
@@ -1,5 +1,9 @@
1
1
  ### Changelog
2
2
 
3
3
 
4
+ - **0.2.0**
5
+ - Add option `expire_at` to #set_session
6
+ - Use semantic versioning
7
+
4
8
  - **0.1**
5
- - Initial Release
9
+ - Initial Release
data/Rakefile CHANGED
@@ -1,11 +1,15 @@
1
- require 'appraisal'
2
- require 'rubygems'
3
- require 'bundler/setup'
4
- require 'bundler/gem_tasks'
5
- require 'rspec/core/rake_task'
1
+ require "appraisal"
2
+ require "bundler"
3
+ require "rspec/core/rake_task"
6
4
 
7
- task :default do
8
- sh "rake appraisal:install && rake appraisal spec"
9
- end
5
+ Bundler::GemHelper.install_tasks
10
6
 
11
7
  RSpec::Core::RakeTask.new(:spec)
8
+
9
+ if !ENV["APPRAISAL_INITIALIZED"] && !ENV["TRAVIS"]
10
+ task :default do
11
+ sh "rake appraisal:install && rake appraisal spec"
12
+ end
13
+ else
14
+ task :default => :spec
15
+ end
@@ -1,8 +1,8 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
- author_name = 'PikachuEXE'
5
- gem_name = 'action_controller_tweaks'
4
+ author_name = "PikachuEXE"
5
+ gem_name = "action_controller_tweaks"
6
6
 
7
7
  require "#{gem_name}/version"
8
8
 
@@ -10,28 +10,35 @@ Gem::Specification.new do |s|
10
10
  s.platform = Gem::Platform::RUBY
11
11
  s.name = gem_name
12
12
  s.version = ActionControllerTweaks::VERSION
13
- s.summary = 'Some Tweaks for ActionController'
14
- s.description = 'ActionController is great, but could be better. Here are some tweaks for it.'
13
+ s.summary = "Some Tweaks for ActionController"
14
+ s.description = "ActionController is great, but could be better. Here are some tweaks for it."
15
15
 
16
- s.license = 'MIT'
16
+ s.license = "MIT"
17
17
 
18
18
  s.authors = [author_name]
19
- s.email = ['pikachuexe@gmail.com']
19
+ s.email = ["pikachuexe@gmail.com"]
20
20
  s.homepage = "http://github.com/#{author_name}/#{gem_name}"
21
21
 
22
22
  s.files = `git ls-files`.split("\n")
23
23
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
24
24
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
25
- s.require_paths = ['lib']
26
-
27
- s.add_dependency 'activesupport', '>= 3.2.0', '< 5.0.0'
28
- s.add_dependency 'actionpack', '>= 3.2.0', '< 5.0.0'
29
-
30
- s.add_development_dependency 'rake'
31
- s.add_development_dependency 'appraisal'
32
- s.add_development_dependency 'rspec'
33
- s.add_development_dependency 'rspec-rails'
34
- s.add_development_dependency 'activerecord', '>= 3.2.0', '< 5.0.0' # rspec-rails needs activerecord...
35
- s.add_development_dependency 'timecop'
36
- s.add_development_dependency 'coveralls'
25
+ s.require_paths = ["lib"]
26
+
27
+ s.add_dependency "activesupport", ">= 3.2.0", "< 5.0.0"
28
+ s.add_dependency "actionpack", ">= 3.2.0", "< 5.0.0"
29
+
30
+
31
+
32
+ s.add_development_dependency "bundler", ">= 1.0.0"
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"
36
+ s.add_development_dependency "activerecord", ">= 3.2.0", "< 5.0.0" # rspec-rails needs activerecord...
37
+ s.add_development_dependency "sqlite3", ">= 1.3"
38
+ s.add_development_dependency "database_cleaner", ">= 1.0"
39
+ s.add_development_dependency "timecop", ">= 0.6"
40
+ s.add_development_dependency "coveralls", ">= 0.7"
41
+ s.add_development_dependency "gem-release", ">= 0.7"
42
+
43
+ s.required_rubygems_version = ">= 1.4.0"
37
44
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "activesupport", "3.2.14"
6
- gem "actionpack", "3.2.14"
5
+ gem "activesupport", "3.2.16"
6
+ gem "actionpack", "3.2.16"
7
7
 
8
8
  gemspec :path=>"../"
@@ -2,7 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "activesupport", "4.0.0"
6
- gem "actionpack", "4.0.0"
5
+ gem "activesupport", "4.0.2"
6
+ gem "actionpack", "4.0.2"
7
7
 
8
8
  gemspec :path=>"../"
@@ -7,12 +7,21 @@ module ActionControllerTweaks
7
7
 
8
8
  SPECIAL_KEYS = %w( session_keys_to_expire )
9
9
 
10
+ class InvalidOptionValue < ArgumentError
11
+ def self.new(option_key, options_value, expected_types)
12
+ super("option key `#{option_key}` should contain value with type(s): #{expected_types}, " +
13
+ "but got <#{options_value.inspect}> (#{options_value.class})")
14
+ end
15
+ end
16
+
10
17
  included do
11
18
  before_filter :delete_expired_session_keys
12
19
 
13
20
  private
14
21
 
15
22
  def set_session(key, value, options = {})
23
+ options.symbolize_keys!
24
+
16
25
  key = key.to_sym
17
26
 
18
27
  if SPECIAL_KEYS.include?(key.to_s)
@@ -24,9 +33,19 @@ module ActionControllerTweaks
24
33
  # Set special session
25
34
  new_session_keys_to_expire = session_keys_to_expire
26
35
 
27
- expire_in = options.delete(:expire_in)
28
- if expire_in && expire_in.is_a?(Integer) # Time period
29
- new_session_keys_to_expire[key] = expire_in.from_now
36
+ expire_in, expire_at = options.delete(:expire_in), options.delete(:expire_at)
37
+
38
+ if expire_at && expire_at.respond_to?(:to_time)
39
+ expire_at = expire_at.to_time
40
+ end
41
+
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)
44
+
45
+ new_session_keys_to_expire[key] = if expire_in
46
+ expire_in.from_now
47
+ elsif expire_at
48
+ expire_at
30
49
  end
31
50
 
32
51
  session[:session_keys_to_expire] = new_session_keys_to_expire
@@ -40,7 +59,7 @@ module ActionControllerTweaks
40
59
  session.delete(key)
41
60
  session_keys_to_expire.delete(key)
42
61
  end
43
- rescue ArgumentError
62
+ rescue
44
63
  # Parse error
45
64
  # Let's expire it to be safe
46
65
  session.delete(key)
@@ -50,7 +69,12 @@ module ActionControllerTweaks
50
69
  end
51
70
 
52
71
  def session_keys_to_expire
53
- session[:session_keys_to_expire] || {}
72
+ # Check whether session key is a hash to prevent exception
73
+ unless session[:session_keys_to_expire].is_a?(Hash)
74
+ session[:session_keys_to_expire] = {}
75
+ end
76
+
77
+ session[:session_keys_to_expire]
54
78
  end
55
79
  end
56
80
  end
@@ -1,3 +1,3 @@
1
1
  module ActionControllerTweaks
2
- VERSION = '0.1'.freeze
2
+ VERSION = '0.2.0'
3
3
  end
@@ -24,9 +24,8 @@ describe PostsController, type: :controller do
24
24
  let(:session_key) { :key }
25
25
  let(:session_value) { 'value' }
26
26
  let(:expire_in) { 60 * 60 } # 1 hour
27
- let!(:time_now) { Time.new(2013, 1, 1) }
28
- let!(:time_before_expire) { time_now + (expire_in / 2) }
29
- let!(:time_after_expire) { time_now + (expire_in * 2) }
27
+ let(:expire_at) { Time.new(2014, 1, 1).in_time_zone }
28
+ let(:time_now) { Time.new(2013, 1, 1).in_time_zone }
30
29
 
31
30
  context 'when calling it without option' do
32
31
  before do
@@ -47,11 +46,59 @@ describe PostsController, type: :controller do
47
46
  end
48
47
 
49
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) }
51
+
50
52
  before do
51
53
  Timecop.freeze(time_now)
52
54
  controller.send(:set_session, session_key, session_value, expire_in: expire_in)
53
55
  end
54
56
 
57
+ after do
58
+ Timecop.return
59
+ end
60
+
61
+ it 'set the session' do
62
+ session[session_key].should eq session_value
63
+ end
64
+
65
+ context 'before expire time' do
66
+ before do
67
+ Timecop.travel(time_before_expire)
68
+ # Runs before_filter
69
+ get :index
70
+ end
71
+
72
+ it 'keeps the session key' do
73
+ session[session_key].should eq session_value
74
+ end
75
+ end
76
+ context 'after expire time' do
77
+ before do
78
+ Timecop.travel(time_after_expire)
79
+ # Runs before_filter
80
+ get :index
81
+ end
82
+
83
+ it 'keeps the session key' do
84
+ session.key?(session_key).should be_false
85
+ end
86
+ end
87
+ end
88
+
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 }
92
+
93
+ before do
94
+ Timecop.freeze(time_now)
95
+ controller.send(:set_session, session_key, session_value, expire_at: expire_at)
96
+ end
97
+
98
+ after do
99
+ Timecop.return
100
+ end
101
+
55
102
  it 'set the session' do
56
103
  session[session_key].should eq session_value
57
104
  end
@@ -79,6 +126,80 @@ describe PostsController, type: :controller do
79
126
  end
80
127
  end
81
128
  end
129
+
130
+ context 'when option value with different types is passed into options' do
131
+ let(:method_call) do
132
+ controller.send(:set_session, session_key, session_value, options)
133
+ end
134
+ context 'for expire_in' do
135
+ let(:options) { {expire_in: expire_in.to_s} }
136
+
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: {}} }
143
+
144
+ specify { expect{ method_call }.to raise_error(ActionControllerTweaks::Session::InvalidOptionValue) }
145
+ 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 }
161
+ end
162
+ context 'with a Date' do
163
+ let(:options) { {expire_at: expire_at.to_date} }
164
+
165
+ specify { expect{ method_call }.to_not raise_error }
166
+ 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 }
171
+ end
172
+ end
173
+ end
174
+
175
+ context 'when someone screw up the special session key' do
176
+ before do
177
+ session[session_key] = session_value
178
+ end
179
+
180
+ context 'when someone set non time string in expire_at_str' do
181
+ before do
182
+ session['session_keys_to_expire'] = {session_key => ''}
183
+
184
+ # Runs before_filter
185
+ get :index
186
+ end
187
+
188
+ it 'destroys the session key' do
189
+ session.key?(session_key).should be_false
190
+ end
191
+ end
192
+
193
+ context 'when someone set non has to session_keys_to_expire' do
194
+ before do
195
+ session['session_keys_to_expire'] = []
196
+ end
197
+
198
+ it 'does not destroy the session key' do
199
+ session.key?(session_key).should be_true
200
+ end
201
+ end
202
+ end
82
203
  end
83
204
  end
84
205
  end
@@ -1,5 +1,7 @@
1
- require 'coveralls'
2
- Coveralls.wear!('rails')
1
+ if ENV["TRAVIS"]
2
+ require 'coveralls'
3
+ Coveralls.wear!('rails')
4
+ end
3
5
 
4
6
  require 'action_controller_tweaks'
5
7
 
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.1'
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - PikachuEXE
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-30 00:00:00.000000000 Z
11
+ date: 2014-01-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -51,61 +51,61 @@ dependencies:
51
51
  - !ruby/object:Gem::Version
52
52
  version: 5.0.0
53
53
  - !ruby/object:Gem::Dependency
54
- name: rake
54
+ name: bundler
55
55
  requirement: !ruby/object:Gem::Requirement
56
56
  requirements:
57
57
  - - '>='
58
58
  - !ruby/object:Gem::Version
59
- version: '0'
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
- version: '0'
66
+ version: 1.0.0
67
67
  - !ruby/object:Gem::Dependency
68
- name: appraisal
68
+ name: rake
69
69
  requirement: !ruby/object:Gem::Requirement
70
70
  requirements:
71
71
  - - '>='
72
72
  - !ruby/object:Gem::Version
73
- version: '0'
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
- version: '0'
80
+ version: 0.9.2
81
81
  - !ruby/object:Gem::Dependency
82
- name: rspec
82
+ name: appraisal
83
83
  requirement: !ruby/object:Gem::Requirement
84
84
  requirements:
85
85
  - - '>='
86
86
  - !ruby/object:Gem::Version
87
- version: '0'
87
+ version: 0.5.2
88
88
  type: :development
89
89
  prerelease: false
90
90
  version_requirements: !ruby/object:Gem::Requirement
91
91
  requirements:
92
92
  - - '>='
93
93
  - !ruby/object:Gem::Version
94
- version: '0'
94
+ version: 0.5.2
95
95
  - !ruby/object:Gem::Dependency
96
96
  name: rspec-rails
97
97
  requirement: !ruby/object:Gem::Requirement
98
98
  requirements:
99
- - - '>='
99
+ - - ~>
100
100
  - !ruby/object:Gem::Version
101
- version: '0'
101
+ version: '2.6'
102
102
  type: :development
103
103
  prerelease: false
104
104
  version_requirements: !ruby/object:Gem::Requirement
105
105
  requirements:
106
- - - '>='
106
+ - - ~>
107
107
  - !ruby/object:Gem::Version
108
- version: '0'
108
+ version: '2.6'
109
109
  - !ruby/object:Gem::Dependency
110
110
  name: activerecord
111
111
  requirement: !ruby/object:Gem::Requirement
@@ -126,34 +126,76 @@ dependencies:
126
126
  - - <
127
127
  - !ruby/object:Gem::Version
128
128
  version: 5.0.0
129
+ - !ruby/object:Gem::Dependency
130
+ name: sqlite3
131
+ requirement: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - '>='
134
+ - !ruby/object:Gem::Version
135
+ version: '1.3'
136
+ type: :development
137
+ prerelease: false
138
+ version_requirements: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '1.3'
143
+ - !ruby/object:Gem::Dependency
144
+ name: database_cleaner
145
+ requirement: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '1.0'
150
+ type: :development
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - '>='
155
+ - !ruby/object:Gem::Version
156
+ version: '1.0'
129
157
  - !ruby/object:Gem::Dependency
130
158
  name: timecop
131
159
  requirement: !ruby/object:Gem::Requirement
132
160
  requirements:
133
161
  - - '>='
134
162
  - !ruby/object:Gem::Version
135
- version: '0'
163
+ version: '0.6'
136
164
  type: :development
137
165
  prerelease: false
138
166
  version_requirements: !ruby/object:Gem::Requirement
139
167
  requirements:
140
168
  - - '>='
141
169
  - !ruby/object:Gem::Version
142
- version: '0'
170
+ version: '0.6'
143
171
  - !ruby/object:Gem::Dependency
144
172
  name: coveralls
145
173
  requirement: !ruby/object:Gem::Requirement
146
174
  requirements:
147
175
  - - '>='
148
176
  - !ruby/object:Gem::Version
149
- version: '0'
177
+ version: '0.7'
178
+ type: :development
179
+ prerelease: false
180
+ version_requirements: !ruby/object:Gem::Requirement
181
+ requirements:
182
+ - - '>='
183
+ - !ruby/object:Gem::Version
184
+ version: '0.7'
185
+ - !ruby/object:Gem::Dependency
186
+ name: gem-release
187
+ requirement: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - '>='
190
+ - !ruby/object:Gem::Version
191
+ version: '0.7'
150
192
  type: :development
151
193
  prerelease: false
152
194
  version_requirements: !ruby/object:Gem::Requirement
153
195
  requirements:
154
196
  - - '>='
155
197
  - !ruby/object:Gem::Version
156
- version: '0'
198
+ version: '0.7'
157
199
  description: ActionController is great, but could be better. Here are some tweaks
158
200
  for it.
159
201
  email:
@@ -199,10 +241,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
199
241
  requirements:
200
242
  - - '>='
201
243
  - !ruby/object:Gem::Version
202
- version: '0'
244
+ version: 1.4.0
203
245
  requirements: []
204
246
  rubyforge_project:
205
- rubygems_version: 2.0.7
247
+ rubygems_version: 2.2.1
206
248
  signing_key:
207
249
  specification_version: 4
208
250
  summary: Some Tweaks for ActionController
@@ -211,3 +253,4 @@ test_files:
211
253
  - spec/fixtures/application.rb
212
254
  - spec/fixtures/controllers.rb
213
255
  - spec/spec_helper.rb
256
+ has_rdoc: