action_controller_tweaks 0.1 → 0.2.0

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: 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: