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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: d18d5ac685043630bc71743acdbdfa01954ca26d
4
- data.tar.gz: decb6e92a43ee69c13b753d1fe7ba350011aea9b
2
+ SHA256:
3
+ metadata.gz: 46ff4fd39c8ca309d9b5b9cfa02a23c8130d76f5d30ab9dbc8ceb33b0cb4c1ad
4
+ data.tar.gz: 4f2980bd906c8ac50030a65cc7c9b8a11b6750160df4910e2c874be1b15a5b93
5
5
  SHA512:
6
- metadata.gz: 218dc267dee725e8084a96c09ed05403ea2b6591a9b3ad438349f3584fe5499a635e6d46c204cd5f1731d3e01015bfc95fd639b41c04ce856b7d28acac7e404e
7
- data.tar.gz: ffae98b515dd4d3ac1068c87e484e5b32b9cd47e8abbccfb5a780bf28e108879849c37a842ce654592d5ee52416b0fa33a7ec1b8a3140a1fbc6e3fdc87f02c1e
6
+ metadata.gz: 3d0b5b07c94c3929a4711454b417181fa6f8a7dd390a4a163ca30678e1e0b4f819cc875dcab351220ca6685a0a9ad29c6cbaf050b21ba44fb8bb243e5192275b
7
+ data.tar.gz: 171bfc5e77948a5a5552357d97ad647ddea9f89c091bf2eb062a9f250427bed1357ab4059a1e1104253f9bf6ebee9f09504b41c7e92004f4e672838bdd20f81c
data/.gitignore CHANGED
@@ -1,2 +1,8 @@
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/*
8
+ .idea/
@@ -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
- - 1.9.2
6
- - 1.9.3
7
- - 2.0.0
8
- - 2.1.0
9
- - 2.1.1
8
+ - 2.4
9
+ - 2.5
10
+ - 2.6
11
+ - ruby-head
10
12
  gemfile:
11
- - gemfiles/rails3_2.gemfile
12
- - gemfiles/rails4_0.gemfile
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: 1.9.2
16
- gemfile: gemfiles/rails4_0.gemfile
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 "rails3-2" do
3
- version = "3.2.17"
4
- gem 'activesupport', version
5
- gem 'actionpack', version
6
- gem 'activerecord', version
7
- end
8
-
9
- appraise "rails4-0" do
10
- version = "4.0.3"
11
- gem 'activesupport', version
12
- gem 'actionpack', version
13
- gem 'activerecord', version
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
@@ -1,15 +1,105 @@
1
- ### Changelog
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
- - **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
6
+ ## [Unreleased]
9
7
 
10
- - **0.2.0**
11
- - Add option `expire_at` to #set_session
12
- - Use semantic versioning
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 'https://rubygems.org'
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
- [![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)
6
+ ## Status
17
7
 
18
- Install
19
- =======
8
+ [![Build Status](http://img.shields.io/travis/PikachuEXE/action_controller_tweaks.svg?style=flat-square)](https://travis-ci.org/PikachuEXE/action_controller_tweaks)
9
+ [![Gem Version](http://img.shields.io/gem/v/action_controller_tweaks.svg?style=flat-square)](http://badge.fury.io/rb/action_controller_tweaks)
10
+ [![Dependency Status](http://img.shields.io/gemnasium/PikachuEXE/action_controller_tweaks.svg?style=flat-square)](https://gemnasium.com/PikachuEXE/action_controller_tweaks)
11
+ [![Coverage Status](http://img.shields.io/coveralls/PikachuEXE/action_controller_tweaks.svg?style=flat-square)](https://coveralls.io/r/PikachuEXE/action_controller_tweaks)
12
+ [![Code Climate](http://img.shields.io/codeclimate/github/PikachuEXE/action_controller_tweaks.svg?style=flat-square)](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
- Usage
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 "rake appraisal:install && rake appraisal spec"
11
+ sh "appraisal install && rake appraisal spec"
12
12
  end
13
13
  else
14
- task :default => :spec
14
+ task default: [:spec]
15
15
  end
@@ -1,5 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
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", ">= 3.2.0", "< 5.0.0"
28
- s.add_dependency "actionpack", ">= 3.2.0", "< 5.0.0"
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.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...
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
@@ -0,0 +1,2 @@
1
+ ---
2
+ BUNDLE_RETRY: "1"
@@ -0,0 +1,11 @@
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
+ gem "sqlite3", "~> 1.3.6"
10
+
11
+ gemspec path: "../"
@@ -0,0 +1,11 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 5.0.0"
6
+ gem "actionpack", "~> 5.0.0"
7
+ gem "activerecord", "~> 5.0.0"
8
+ gem "railties", "~> 5.0.0"
9
+ gem "sqlite3", "~> 1.3.6"
10
+
11
+ gemspec path: "../"
@@ -0,0 +1,10 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 5.1.0"
6
+ gem "actionpack", "~> 5.1.0"
7
+ gem "activerecord", "~> 5.1.0"
8
+ gem "railties", "~> 5.1.0"
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", "~> 5.2.0"
6
+ gem "actionpack", "~> 5.2.0"
7
+ gem "activerecord", "~> 5.2.0"
8
+ gem "railties", "~> 5.2.0"
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", "~> 6.0.0"
6
+ gem "actionpack", "~> 6.0.0"
7
+ gem "activerecord", "~> 6.0.0"
8
+ gem "railties", "~> 6.0.0"
9
+
10
+ gemspec path: "../"
@@ -1,8 +1,8 @@
1
- require 'active_support/concern'
1
+ require "active_support/concern"
2
2
 
3
- require 'action_controller_tweaks/version'
4
- require 'action_controller_tweaks/caching'
5
- require 'action_controller_tweaks/session'
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 'active_support/concern'
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
- "Cache-Control" => "no-cache, no-store, max-age=0, must-revalidate, pre-check=0, post-check=0", # HTTP 1.1
9
- "Pragma" => "no-cache", # HTTP 1.0
10
- "Expires" => "Fri, 01 Jan 1990 00:00:00 GMT", # HTTP 1.0
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 'active_support/concern'
2
- require 'active_support/time'
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
- before_filter :delete_expired_session_keys
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] 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`
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
- raise Errors::ReservedSessionKeyConflict.new, "you are trying to set #{value} to #{key}, but reserved by ActionControllerTweaks::Session"
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
- # 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
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 |key|
76
- VALID_OPTION_KEYS.include?(key)
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
- (required_option_key_present && invalid_option_key_absent) or raise ActionControllerTweaks::Session::Errors::InvalidOptionKeys
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 delete_expired_session_keys
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
- begin
88
- if Time.now > Time.parse(expire_at_str.to_s)
89
- session.delete(key)
90
- session_keys_to_expire.delete(key)
91
- end
92
- rescue
93
- # Parse error
94
- # Let's expire it to be safe
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