action_controller_tweaks 0.3.0 → 0.3.5
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 +5 -5
- data/.gitignore +7 -1
- data/.travis.yml +18 -11
- data/Appraisals +40 -12
- data/CHANGELOG.md +101 -11
- data/Gemfile +1 -1
- data/README.md +12 -16
- data/Rakefile +2 -2
- data/action_controller_tweaks.gemspec +14 -10
- data/gemfiles/.bundle/config +2 -0
- data/gemfiles/rails_4_2.gemfile +11 -0
- data/gemfiles/rails_5_0.gemfile +11 -0
- data/gemfiles/rails_5_1.gemfile +10 -0
- data/gemfiles/rails_5_2.gemfile +10 -0
- data/gemfiles/rails_6_0.gemfile +10 -0
- data/lib/action_controller_tweaks.rb +4 -4
- data/lib/action_controller_tweaks/caching.rb +7 -4
- data/lib/action_controller_tweaks/session.rb +81 -47
- data/lib/action_controller_tweaks/version.rb +3 -1
- data/spec/action_controller_tweaks_spec.rb +464 -120
- data/spec/fixtures/application.rb +8 -5
- data/spec/fixtures/controllers.rb +7 -5
- data/spec/spec_helper.rb +35 -10
- metadata +96 -66
- data/gemfiles/rails3_2.gemfile +0 -9
- data/gemfiles/rails4_0.gemfile +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 46ff4fd39c8ca309d9b5b9cfa02a23c8130d76f5d30ab9dbc8ceb33b0cb4c1ad
|
4
|
+
data.tar.gz: 4f2980bd906c8ac50030a65cc7c9b8a11b6750160df4910e2c874be1b15a5b93
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3d0b5b07c94c3929a4711454b417181fa6f8a7dd390a4a163ca30678e1e0b4f819cc875dcab351220ca6685a0a9ad29c6cbaf050b21ba44fb8bb243e5192275b
|
7
|
+
data.tar.gz: 171bfc5e77948a5a5552357d97ad647ddea9f89c091bf2eb062a9f250427bed1357ab4059a1e1104253f9bf6ebee9f09504b41c7e92004f4e672838bdd20f81c
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,17 +1,24 @@
|
|
1
|
+
# Send builds to container-based infrastructure
|
2
|
+
# http://docs.travis-ci.com/user/workers/container-based-infrastructure/
|
3
|
+
sudo: false
|
1
4
|
language: ruby
|
2
5
|
cache:
|
3
|
-
- bundler
|
6
|
+
- bundler
|
4
7
|
rvm:
|
5
|
-
-
|
6
|
-
-
|
7
|
-
- 2.
|
8
|
-
-
|
9
|
-
- 2.1.1
|
8
|
+
- 2.4
|
9
|
+
- 2.5
|
10
|
+
- 2.6
|
11
|
+
- ruby-head
|
10
12
|
gemfile:
|
11
|
-
- gemfiles/
|
12
|
-
- gemfiles/
|
13
|
+
- gemfiles/rails_4_2.gemfile
|
14
|
+
- gemfiles/rails_5_0.gemfile
|
15
|
+
- gemfiles/rails_5_1.gemfile
|
16
|
+
- gemfiles/rails_5_2.gemfile
|
17
|
+
- gemfiles/rails_6_0.gemfile
|
13
18
|
matrix:
|
19
|
+
fast_finish: true
|
14
20
|
exclude:
|
15
|
-
- rvm:
|
16
|
-
gemfile: gemfiles/
|
17
|
-
|
21
|
+
- rvm: 2.4
|
22
|
+
gemfile: gemfiles/rails_6_0.gemfile
|
23
|
+
allow_failures:
|
24
|
+
- rvm: ruby-head
|
data/Appraisals
CHANGED
@@ -1,14 +1,42 @@
|
|
1
1
|
|
2
|
-
appraise "
|
3
|
-
version = "
|
4
|
-
gem
|
5
|
-
gem
|
6
|
-
gem
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
gem
|
2
|
+
appraise "rails_4_2" do
|
3
|
+
version = "~> 4.2.0"
|
4
|
+
gem "activesupport", version
|
5
|
+
gem "actionpack", version
|
6
|
+
gem "activerecord", version
|
7
|
+
gem "railties", version
|
8
|
+
gem "sqlite3", "~> 1.3.6"
|
9
|
+
end
|
10
|
+
|
11
|
+
appraise "rails_5_0" do
|
12
|
+
version = "~> 5.0.0"
|
13
|
+
gem "activesupport", version
|
14
|
+
gem "actionpack", version
|
15
|
+
gem "activerecord", version
|
16
|
+
gem "railties", version
|
17
|
+
gem "sqlite3", "~> 1.3.6"
|
18
|
+
end
|
19
|
+
|
20
|
+
appraise "rails_5_1" do
|
21
|
+
version = "~> 5.1.0"
|
22
|
+
gem "activesupport", version
|
23
|
+
gem "actionpack", version
|
24
|
+
gem "activerecord", version
|
25
|
+
gem "railties", version
|
26
|
+
end
|
27
|
+
|
28
|
+
appraise "rails_5_2" do
|
29
|
+
version = "~> 5.2.0"
|
30
|
+
gem "activesupport", version
|
31
|
+
gem "actionpack", version
|
32
|
+
gem "activerecord", version
|
33
|
+
gem "railties", version
|
34
|
+
end
|
35
|
+
|
36
|
+
appraise "rails_6_0" do
|
37
|
+
version = "~> 6.0.0"
|
38
|
+
gem "activesupport", version
|
39
|
+
gem "actionpack", version
|
40
|
+
gem "activerecord", version
|
41
|
+
gem "railties", version
|
14
42
|
end
|
data/CHANGELOG.md
CHANGED
@@ -1,15 +1,105 @@
|
|
1
|
-
|
1
|
+
# Change Log
|
2
|
+
All notable changes to this project will be documented in this file.
|
3
|
+
This project adheres to [Semantic Versioning](http://semver.org/).
|
2
4
|
|
3
5
|
|
4
|
-
|
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
|
6
|
+
## [Unreleased]
|
9
7
|
|
10
|
-
|
11
|
-
|
12
|
-
|
8
|
+
### Added
|
9
|
+
|
10
|
+
- Nothing
|
11
|
+
|
12
|
+
### Changed
|
13
|
+
|
14
|
+
- Nothing
|
15
|
+
|
16
|
+
### Fixed
|
17
|
+
|
18
|
+
- Nothing
|
19
|
+
|
20
|
+
|
21
|
+
## [0.3.5] - 2020-09-07
|
22
|
+
|
23
|
+
### Fixed
|
24
|
+
|
25
|
+
- Fix support for Rails 6.x
|
26
|
+
|
27
|
+
|
28
|
+
## [0.3.4] - 2019-08-26
|
29
|
+
|
30
|
+
### Changed
|
31
|
+
|
32
|
+
- Add support for AR 6.x
|
33
|
+
- Drop support for Ruby < 2.4
|
34
|
+
|
35
|
+
|
36
|
+
## [0.3.3] - 2017-05-11
|
37
|
+
|
38
|
+
### Changed
|
39
|
+
|
40
|
+
- Add support for AR 5.1.x
|
41
|
+
- Drop support for AR 4.0.x
|
42
|
+
- Drop support for Ruby < 2.2
|
43
|
+
|
44
|
+
|
45
|
+
## [0.3.2] - 2016-12-23
|
46
|
+
|
47
|
+
### Changed
|
48
|
+
|
49
|
+
- Call `before_action` on included class if exists
|
50
|
+
- Add support for AR 5.0.x
|
51
|
+
- Drop support for AR 3.x
|
52
|
+
- Drop support for Ruby < 2.1
|
53
|
+
|
54
|
+
### Fixed
|
55
|
+
|
56
|
+
- Raise error if both `before_action` and `before_filter` does not exists
|
57
|
+
|
58
|
+
|
59
|
+
## [0.3.1] - 2015-03-03
|
60
|
+
|
61
|
+
### Fixed
|
62
|
+
|
63
|
+
- Fix session key still gets deleted when no option is set
|
64
|
+
- Fix options not passed to `#set_session` when `#set_session_with_expiry` is called
|
65
|
+
|
66
|
+
|
67
|
+
## [0.3.0] - 2014-03-14
|
68
|
+
|
69
|
+
### Added
|
70
|
+
|
71
|
+
- Add method `#set_session_with_expiry`
|
72
|
+
- Add option `expires_in` and `expires_at` to #set_session
|
73
|
+
|
74
|
+
### Changed
|
75
|
+
|
76
|
+
- Raise error when reserved session key(s) is set through the provided method
|
77
|
+
|
78
|
+
### Fixed
|
79
|
+
|
80
|
+
- Fix invalid header when using `#set_no_cache` for HTTP 1.0
|
81
|
+
|
82
|
+
|
83
|
+
## [0.2.0] - 2014-01-17
|
84
|
+
|
85
|
+
### Added
|
86
|
+
|
87
|
+
- Add option `expire_at` to #set_session
|
88
|
+
|
89
|
+
|
90
|
+
## 0.1 - 2013-08-30
|
91
|
+
|
92
|
+
### Added
|
93
|
+
|
94
|
+
- Initial Release
|
95
|
+
|
96
|
+
|
97
|
+
[Unreleased]: https://github.com/PikachuEXE/action_controller_tweaks/compare/v0.3.5...HEAD
|
98
|
+
[0.3.4]: https://github.com/PikachuEXE/action_controller_tweaks/compare/v0.3.4...v0.3.5
|
99
|
+
[0.3.4]: https://github.com/PikachuEXE/action_controller_tweaks/compare/v0.3.3...v0.3.4
|
100
|
+
[0.3.3]: https://github.com/PikachuEXE/action_controller_tweaks/compare/v0.3.2...v0.3.3
|
101
|
+
[0.3.2]: https://github.com/PikachuEXE/action_controller_tweaks/compare/v0.3.1...v0.3.2
|
102
|
+
[0.3.1]: https://github.com/PikachuEXE/action_controller_tweaks/compare/v0.3.0...v0.3.1
|
103
|
+
[0.3.0]: https://github.com/PikachuEXE/action_controller_tweaks/compare/v0.2.0...v0.3.0
|
104
|
+
[0.2.0]: https://github.com/PikachuEXE/action_controller_tweaks/compare/v0.1...v0.2.0
|
13
105
|
|
14
|
-
- **0.1**
|
15
|
-
- Initial Release
|
data/Gemfile
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
source
|
1
|
+
source "https://rubygems.org"
|
2
2
|
gemspec
|
data/README.md
CHANGED
@@ -1,29 +1,25 @@
|
|
1
|
-
Action Controller Tweaks
|
2
|
-
===========
|
1
|
+
# Action Controller Tweaks
|
3
2
|
|
4
3
|
ActionController is great, but could be better. Here are some tweaks for it.
|
5
4
|
|
6
|
-
### Support
|
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
5
|
|
12
|
-
|
13
|
-
[](http://badge.fury.io/rb/action_controller_tweaks)
|
14
|
-
[](https://gemnasium.com/PikachuEXE/action_controller_tweaks)
|
15
|
-
[](https://coveralls.io/r/PikachuEXE/action_controller_tweaks)
|
16
|
-
[](https://codeclimate.com/github/PikachuEXE/action_controller_tweaks)
|
6
|
+
## Status
|
17
7
|
|
18
|
-
|
19
|
-
|
8
|
+
[](https://travis-ci.org/PikachuEXE/action_controller_tweaks)
|
9
|
+
[](http://badge.fury.io/rb/action_controller_tweaks)
|
10
|
+
[](https://gemnasium.com/PikachuEXE/action_controller_tweaks)
|
11
|
+
[](https://coveralls.io/r/PikachuEXE/action_controller_tweaks)
|
12
|
+
[](https://codeclimate.com/github/PikachuEXE/action_controller_tweaks)
|
13
|
+
|
14
|
+
|
15
|
+
## Installation
|
20
16
|
|
21
17
|
```ruby
|
22
18
|
gem 'action_controller_tweaks'
|
23
19
|
```
|
24
20
|
|
25
|
-
|
26
|
-
|
21
|
+
|
22
|
+
## Usage
|
27
23
|
|
28
24
|
Either include it in specific controller or just `ApplicationController`
|
29
25
|
```ruby
|
data/Rakefile
CHANGED
@@ -8,8 +8,8 @@ RSpec::Core::RakeTask.new(:spec)
|
|
8
8
|
|
9
9
|
if !ENV["APPRAISAL_INITIALIZED"] && !ENV["TRAVIS"]
|
10
10
|
task :default do
|
11
|
-
sh "
|
11
|
+
sh "appraisal install && rake appraisal spec"
|
12
12
|
end
|
13
13
|
else
|
14
|
-
task :
|
14
|
+
task default: [:spec]
|
15
15
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
|
2
|
+
$LOAD_PATH.push File.expand_path("../lib", __FILE__)
|
3
3
|
|
4
4
|
author_name = "PikachuEXE"
|
5
5
|
gem_name = "action_controller_tweaks"
|
@@ -21,24 +21,28 @@ Gem::Specification.new do |s|
|
|
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
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
24
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
25
25
|
s.require_paths = ["lib"]
|
26
26
|
|
27
|
-
s.add_dependency "activesupport", ">=
|
28
|
-
s.add_dependency "actionpack", ">=
|
29
|
-
|
30
|
-
|
27
|
+
s.add_dependency "activesupport", ">= 4.1.0", "< 7.0.0"
|
28
|
+
s.add_dependency "actionpack", ">= 4.1.0", "< 7.0.0"
|
31
29
|
|
32
30
|
s.add_development_dependency "bundler", ">= 1.0.0"
|
33
|
-
s.add_development_dependency "rake", ">= 0.
|
34
|
-
s.add_development_dependency "appraisal", "
|
35
|
-
s.add_development_dependency "rspec-rails", "~>
|
36
|
-
s.add_development_dependency "
|
31
|
+
s.add_development_dependency "rake", ">= 10.0", "<= 14.0"
|
32
|
+
s.add_development_dependency "appraisal", "~> 2.0"
|
33
|
+
s.add_development_dependency "rspec-rails", "~> 4.0"
|
34
|
+
s.add_development_dependency "rspec-its", "~> 1.0"
|
35
|
+
# rspec-rails needs activerecord...
|
36
|
+
s.add_development_dependency "activerecord", ">= 4.0.0"
|
37
37
|
s.add_development_dependency "sqlite3", ">= 1.3"
|
38
38
|
s.add_development_dependency "database_cleaner", ">= 1.0"
|
39
39
|
s.add_development_dependency "timecop", ">= 0.6"
|
40
40
|
s.add_development_dependency "coveralls", ">= 0.7"
|
41
41
|
s.add_development_dependency "gem-release", ">= 0.7"
|
42
|
+
# This is for rails < 4.1 on MRI 2.2 (and other later version I suppose)
|
43
|
+
s.add_development_dependency "test-unit", ">= 3.0.0"
|
44
|
+
|
45
|
+
s.required_ruby_version = ">= 2.4.0"
|
42
46
|
|
43
47
|
s.required_rubygems_version = ">= 1.4.0"
|
44
48
|
end
|
@@ -1,8 +1,8 @@
|
|
1
|
-
require
|
1
|
+
require "active_support/concern"
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
3
|
+
require "action_controller_tweaks/version"
|
4
|
+
require "action_controller_tweaks/caching"
|
5
|
+
require "action_controller_tweaks/session"
|
6
6
|
|
7
7
|
module ActionControllerTweaks
|
8
8
|
extend ActiveSupport::Concern
|
@@ -1,13 +1,16 @@
|
|
1
|
-
require
|
1
|
+
require "active_support/concern"
|
2
2
|
|
3
3
|
module ActionControllerTweaks
|
4
4
|
module Caching
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
7
|
HEADERS = {
|
8
|
-
|
9
|
-
"
|
10
|
-
|
8
|
+
# HTTP 1.1
|
9
|
+
"Cache-Control" => "no-cache, no-store, pre-check=0, post-check=0",
|
10
|
+
# HTTP 1.0
|
11
|
+
"Pragma" => "no-cache",
|
12
|
+
# HTTP 1.0
|
13
|
+
"Expires" => "Mon, 01 Jan 1990 00:00:00 GMT",
|
11
14
|
}.freeze
|
12
15
|
|
13
16
|
included do
|
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "active_support/concern"
|
2
|
+
require "active_support/time"
|
3
3
|
|
4
4
|
module ActionControllerTweaks
|
5
5
|
module Session
|
@@ -10,6 +10,27 @@ module ActionControllerTweaks
|
|
10
10
|
ReservedSessionKeyConflict = Class.new(ArgumentError)
|
11
11
|
end
|
12
12
|
|
13
|
+
module OptionProcessor
|
14
|
+
def self.extract_expires_in(options)
|
15
|
+
expires_in = options.delete(:expires_in) || options.delete(:expire_in)
|
16
|
+
if expires_in && !expires_in.is_a?(Numeric)
|
17
|
+
fail InvalidOptionValue.new(:expires_in, expires_in, Numeric)
|
18
|
+
end
|
19
|
+
expires_in
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.extract_expires_at(options)
|
23
|
+
expires_at = options.delete(:expires_at) || options.delete(:expire_at)
|
24
|
+
if expires_at && expires_at.respond_to?(:to_time)
|
25
|
+
expires_at = expires_at.to_time
|
26
|
+
end
|
27
|
+
if expires_at && !expires_at.is_a?(Time)
|
28
|
+
fail InvalidOptionValue.new(:expires_at, expires_at, Time)
|
29
|
+
end
|
30
|
+
expires_at
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
13
34
|
RESERVED_SESSION_KEYS = %w( session_keys_to_expire )
|
14
35
|
VALID_OPTION_KEYS = [
|
15
36
|
:expires_in,
|
@@ -20,51 +41,46 @@ module ActionControllerTweaks
|
|
20
41
|
|
21
42
|
class InvalidOptionValue < ArgumentError
|
22
43
|
def self.new(option_key, options_value, expected_types)
|
23
|
-
super("option key `#{option_key}` should contain value with type(s): #{expected_types}, "
|
44
|
+
super("option key `#{option_key}` should contain value with type(s): #{expected_types}, "\
|
24
45
|
"but got <#{options_value.inspect}> (#{options_value.class})")
|
25
46
|
end
|
26
47
|
end
|
27
48
|
|
28
49
|
included do
|
29
|
-
|
50
|
+
if respond_to?(:before_action)
|
51
|
+
before_action :_delete_expired_session_keys
|
52
|
+
elsif respond_to?(:before_filter)
|
53
|
+
before_filter :_delete_expired_session_keys
|
54
|
+
else
|
55
|
+
fail(
|
56
|
+
NotImplementedError,
|
57
|
+
"There is no `.before_action` nor `.before_filter` in this class",
|
58
|
+
)
|
59
|
+
end
|
30
60
|
|
31
61
|
private
|
32
62
|
|
33
63
|
# Set session just like `session[key] = value` but accept some options about expiry
|
34
64
|
#
|
35
|
-
# @option expires_in [Integer]
|
36
|
-
#
|
37
|
-
# @option
|
38
|
-
#
|
65
|
+
# @option expires_in [Integer]
|
66
|
+
# How long from now should the session value be expired
|
67
|
+
# @option expire_in [Integer]
|
68
|
+
# same as `expires_in`
|
69
|
+
# @option expires_at [Integer]
|
70
|
+
# What time should the session value be expired
|
71
|
+
# (using a time in the past would expire at next request)
|
72
|
+
# @option expire_at [Integer]
|
73
|
+
# same as `expires_at`
|
39
74
|
def set_session(key, value, options = {})
|
40
|
-
options.symbolize_keys!
|
41
|
-
|
42
75
|
if RESERVED_SESSION_KEYS.include?(key.to_s)
|
43
|
-
|
76
|
+
fail Errors::ReservedSessionKeyConflict.new,
|
77
|
+
"you are trying to set #{value} to #{key}, "\
|
78
|
+
"but reserved by ActionControllerTweaks::Session"
|
44
79
|
end
|
45
80
|
|
46
81
|
session[key] = value
|
47
82
|
|
48
|
-
|
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
|
83
|
+
session[:session_keys_to_expire] = _new_session_keys_to_expire(key, options)
|
68
84
|
end
|
69
85
|
|
70
86
|
# set value in session just like `set_session`, but checked option keys
|
@@ -72,30 +88,34 @@ module ActionControllerTweaks
|
|
72
88
|
# @raise [ActionControllerTweaks::Session::Errors::InvalidOptionKeys]
|
73
89
|
def set_session_with_expiry(key, value, options = {})
|
74
90
|
option_keys = options.symbolize_keys.keys
|
75
|
-
required_option_key_present = option_keys.any? do |
|
76
|
-
VALID_OPTION_KEYS.include?(
|
91
|
+
required_option_key_present = option_keys.any? do |k|
|
92
|
+
VALID_OPTION_KEYS.include?(k)
|
77
93
|
end
|
78
94
|
invalid_option_key_absent = (option_keys - VALID_OPTION_KEYS.dup).empty?
|
79
|
-
|
95
|
+
unless required_option_key_present && invalid_option_key_absent
|
96
|
+
fail ActionControllerTweaks::Session::Errors::InvalidOptionKeys
|
97
|
+
end
|
80
98
|
|
81
|
-
set_session(key, value, options
|
99
|
+
set_session(key, value, options)
|
82
100
|
end
|
83
101
|
|
84
|
-
def
|
102
|
+
def _delete_expired_session_keys
|
85
103
|
# Remove keys that are expired
|
86
104
|
session_keys_to_expire.each do |key, expire_at_str|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
session.delete(key)
|
96
|
-
session_keys_to_expire.delete(key)
|
97
|
-
end
|
105
|
+
_delete_expired_session_key(key, expire_at_str)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def _delete_expired_session_key(key, expire_at_str)
|
110
|
+
if Time.now > Time.parse(expire_at_str.to_s)
|
111
|
+
session.delete(key)
|
112
|
+
session_keys_to_expire.delete(key)
|
98
113
|
end
|
114
|
+
rescue
|
115
|
+
# Parse error
|
116
|
+
# Let"s expire it to be safe
|
117
|
+
session.delete(key)
|
118
|
+
session_keys_to_expire.delete(key)
|
99
119
|
end
|
100
120
|
|
101
121
|
def session_keys_to_expire
|
@@ -106,6 +126,20 @@ module ActionControllerTweaks
|
|
106
126
|
|
107
127
|
session[:session_keys_to_expire]
|
108
128
|
end
|
129
|
+
|
130
|
+
def _new_session_keys_to_expire(key, options = {})
|
131
|
+
options.symbolize_keys!
|
132
|
+
|
133
|
+
result = session_keys_to_expire
|
134
|
+
expires_in = OptionProcessor.extract_expires_in(options)
|
135
|
+
expires_at = OptionProcessor.extract_expires_at(options)
|
136
|
+
|
137
|
+
if [expires_in, expires_at].any?
|
138
|
+
result[key] = expires_in ? expires_in.seconds.from_now : expires_at
|
139
|
+
end
|
140
|
+
|
141
|
+
result
|
142
|
+
end
|
109
143
|
end
|
110
144
|
end
|
111
145
|
end
|