action_controller_tweaks 0.3.1 → 0.3.2

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.
@@ -1,14 +1,15 @@
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
6
  - bundler
4
7
  rvm:
5
- - 1.9.3
6
- - 2.0
7
- - 2.1
8
- - 2.2
8
+ - 2.1.10
9
+ - 2.2.6
10
+ - 2.3.3
9
11
  - ruby-head
10
12
  gemfile:
11
- - gemfiles/rails_3_2.gemfile
12
13
  - gemfiles/rails_4_0.gemfile
13
14
  - gemfiles/rails_4_1.gemfile
14
15
  - gemfiles/rails_4_2.gemfile
@@ -16,4 +17,9 @@ matrix:
16
17
  fast_finish: true
17
18
  allow_failures:
18
19
  - rvm: ruby-head
20
+ include:
21
+ - rvm: 2.3.3
22
+ gemfile: gemfiles/rails_5_0.gemfile
23
+ - rvm: ruby-head
24
+ gemfile: gemfiles/rails_5_0.gemfile
19
25
 
data/Appraisals CHANGED
@@ -1,32 +1,32 @@
1
1
 
2
- appraise "rails_3_2" do
3
- version = "~> 3.2.20"
4
- gem 'activesupport', version
5
- gem 'actionpack', version
6
- gem 'activerecord', version
7
- gem 'railties', version
8
- end
9
-
10
2
  appraise "rails_4_0" do
11
3
  version = "~> 4.0.12"
12
- gem 'activesupport', version
13
- gem 'actionpack', version
14
- gem 'activerecord', version
15
- gem 'railties', version
4
+ gem "activesupport", version
5
+ gem "actionpack", version
6
+ gem "activerecord", version
7
+ gem "railties", version
16
8
  end
17
9
 
18
10
  appraise "rails_4_1" do
19
11
  version = "~> 4.1.8"
20
- gem 'activesupport', version
21
- gem 'actionpack', version
22
- gem 'activerecord', version
23
- gem 'railties', version
12
+ gem "activesupport", version
13
+ gem "actionpack", version
14
+ gem "activerecord", version
15
+ gem "railties", version
24
16
  end
25
17
 
26
18
  appraise "rails_4_2" do
27
19
  version = "~> 4.2.0"
28
- gem 'activesupport', version
29
- gem 'actionpack', version
30
- gem 'activerecord', version
31
- gem 'railties', version
20
+ gem "activesupport", version
21
+ gem "actionpack", version
22
+ gem "activerecord", version
23
+ gem "railties", version
24
+ end
25
+
26
+ appraise "rails_5_0" do
27
+ version = "~> 5.0.0"
28
+ gem "activesupport", version
29
+ gem "actionpack", version
30
+ gem "activerecord", version
31
+ gem "railties", version
32
32
  end
@@ -1,19 +1,78 @@
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.1**
5
- - Fix session key still gets deleted when no option is set
6
- - Fix options not passed to `#set_session` when `#set_session_with_expiry` is called
6
+ ## [Unreleased]
7
7
 
8
- - **0.3.0**
9
- - Add method `#set_session_with_expiry`
10
- - Add option `expires_in` and `expires_at` to #set_session
11
- - Fix invalid header when using `#set_no_cache` for HTTP 1.0
12
- - Raise error when reserved session key(s) is set through the provided method
8
+ ### Added
13
9
 
14
- - **0.2.0**
15
- - Add option `expire_at` to #set_session
16
- - Use semantic versioning
10
+ - Nothing
11
+
12
+ ### Changed
13
+
14
+ - Nothing
15
+
16
+ ### Fixed
17
+
18
+ - Nothing
19
+
20
+
21
+ ## [0.3.2] - 2016-12-23
22
+
23
+ ### Changed
24
+
25
+ - Call `before_action` on included class if exists
26
+ - Add support for AR 5.0.x
27
+ - Drop support for AR 3.x
28
+ - Drop support for Ruby < 2.1
29
+
30
+ ### Fixed
31
+
32
+ - Raise error if both `before_action` and `before_filter` does not exists
33
+
34
+
35
+ ## [0.3.1] - 2015-03-03
36
+
37
+ ### Fixed
38
+
39
+ - Fix session key still gets deleted when no option is set
40
+ - Fix options not passed to `#set_session` when `#set_session_with_expiry` is called
41
+
42
+
43
+ ## [0.3.0] - 2014-03-14
44
+
45
+ ### Added
46
+
47
+ - Add method `#set_session_with_expiry`
48
+ - Add option `expires_in` and `expires_at` to #set_session
49
+
50
+ ### Changed
51
+
52
+ - Raise error when reserved session key(s) is set through the provided method
53
+
54
+ ### Fixed
55
+
56
+ - Fix invalid header when using `#set_no_cache` for HTTP 1.0
57
+
58
+
59
+ ## [0.2.0] - 2014-01-17
60
+
61
+ ### Added
62
+
63
+ - Add option `expire_at` to #set_session
64
+
65
+
66
+ ## 0.1 - 2013-08-30
67
+
68
+ ### Added
69
+
70
+ - Initial Release
71
+
72
+
73
+ [Unreleased]: https://github.com/AssetSync/asset_sync/compare/v0.3.2...HEAD
74
+ [0.3.1]: https://github.com/AssetSync/asset_sync/compare/v0.3.1...v0.3.2
75
+ [0.3.1]: https://github.com/AssetSync/asset_sync/compare/v0.3.0...v0.3.1
76
+ [0.3.0]: https://github.com/AssetSync/asset_sync/compare/v0.2.0...v0.3.0
77
+ [0.2.0]: https://github.com/AssetSync/asset_sync/compare/v0.1...v0.2.0
17
78
 
18
- - **0.1**
19
- - 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,10 +1,9 @@
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
- ===========
5
+
6
+ ## Status
8
7
 
9
8
  [![Build Status](http://img.shields.io/travis/PikachuEXE/action_controller_tweaks.svg?style=flat-square)](https://travis-ci.org/PikachuEXE/action_controller_tweaks)
10
9
  [![Gem Version](http://img.shields.io/gem/v/action_controller_tweaks.svg?style=flat-square)](http://badge.fury.io/rb/action_controller_tweaks)
@@ -12,15 +11,15 @@ ActionController is great, but could be better. Here are some tweaks for it.
12
11
  [![Coverage Status](http://img.shields.io/coveralls/PikachuEXE/action_controller_tweaks.svg?style=flat-square)](https://coveralls.io/r/PikachuEXE/action_controller_tweaks)
13
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)
14
13
 
15
- Install
16
- =======
14
+
15
+ ## Installation
17
16
 
18
17
  ```ruby
19
18
  gem 'action_controller_tweaks'
20
19
  ```
21
20
 
22
- Usage
23
- =====
21
+
22
+ ## Usage
24
23
 
25
24
  Either include it in specific controller or just `ApplicationController`
26
25
  ```ruby
data/Rakefile CHANGED
@@ -1,15 +1,18 @@
1
1
  require "appraisal"
2
2
  require "bundler"
3
3
  require "rspec/core/rake_task"
4
+ require "rubocop/rake_task"
4
5
 
5
6
  Bundler::GemHelper.install_tasks
6
7
 
7
8
  RSpec::Core::RakeTask.new(:spec)
8
9
 
10
+ RuboCop::RakeTask.new(:rubocop)
11
+
9
12
  if !ENV["APPRAISAL_INITIALIZED"] && !ENV["TRAVIS"]
10
13
  task :default do
11
14
  sh "appraisal install && rake appraisal spec"
12
15
  end
13
16
  else
14
- task :default => :spec
17
+ task default: [:spec]
15
18
  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,20 +21,19 @@ 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.0.0", "< 5.1.0"
28
+ s.add_dependency "actionpack", ">= 4.0.0", "< 5.1.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", "~> 1.0"
31
+ s.add_development_dependency "rake", "~> 10.0"
32
+ s.add_development_dependency "appraisal", "~> 2.0"
35
33
  s.add_development_dependency "rspec-rails", "~> 3.0"
36
34
  s.add_development_dependency "rspec-its", "~> 1.0"
37
- s.add_development_dependency "activerecord", ">= 3.2.0", "< 5.0.0" # rspec-rails needs activerecord...
35
+ # rspec-rails needs activerecord...
36
+ s.add_development_dependency "activerecord", ">= 3.2.0", "< 5.0.0"
38
37
  s.add_development_dependency "sqlite3", ">= 1.3"
39
38
  s.add_development_dependency "database_cleaner", ">= 1.0"
40
39
  s.add_development_dependency "timecop", ">= 0.6"
@@ -42,6 +41,9 @@ Gem::Specification.new do |s|
42
41
  s.add_development_dependency "gem-release", ">= 0.7"
43
42
  # This is for rails < 4.1 on MRI 2.2 (and other later version I suppose)
44
43
  s.add_development_dependency "test-unit", ">= 3.0.0"
44
+ s.add_development_dependency "rubocop", "~> 0.30"
45
+
46
+ s.required_ruby_version = ">= 2.1.0"
45
47
 
46
48
  s.required_rubygems_version = ">= 1.4.0"
47
49
  end
@@ -0,0 +1,10 @@
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
+
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,17 @@
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, max-age=0, "\
10
+ "must-revalidate, pre-check=0, post-check=0",
11
+ # HTTP 1.0
12
+ "Pragma" => "no-cache",
13
+ # HTTP 1.0
14
+ "Expires" => "Fri, 01 Jan 1990 00:00:00 GMT",
11
15
  }.freeze
12
16
 
13
17
  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,30 +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
75
  if RESERVED_SESSION_KEYS.include?(key.to_s)
41
- 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"
42
79
  end
43
80
 
44
81
  session[key] = value
45
82
 
46
- session[:session_keys_to_expire] = new_session_keys_to_expire(key, options)
83
+ session[:session_keys_to_expire] = _new_session_keys_to_expire(key, options)
47
84
  end
48
85
 
49
86
  # set value in session just like `set_session`, but checked option keys
@@ -51,30 +88,34 @@ module ActionControllerTweaks
51
88
  # @raise [ActionControllerTweaks::Session::Errors::InvalidOptionKeys]
52
89
  def set_session_with_expiry(key, value, options = {})
53
90
  option_keys = options.symbolize_keys.keys
54
- required_option_key_present = option_keys.any? do |key|
55
- VALID_OPTION_KEYS.include?(key)
91
+ required_option_key_present = option_keys.any? do |k|
92
+ VALID_OPTION_KEYS.include?(k)
56
93
  end
57
94
  invalid_option_key_absent = (option_keys - VALID_OPTION_KEYS.dup).empty?
58
- (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
59
98
 
60
99
  set_session(key, value, options)
61
100
  end
62
101
 
63
- def delete_expired_session_keys
102
+ def _delete_expired_session_keys
64
103
  # Remove keys that are expired
65
104
  session_keys_to_expire.each do |key, expire_at_str|
66
- begin
67
- if Time.now > Time.parse(expire_at_str.to_s)
68
- session.delete(key)
69
- session_keys_to_expire.delete(key)
70
- end
71
- rescue
72
- # Parse error
73
- # Let's expire it to be safe
74
- session.delete(key)
75
- session_keys_to_expire.delete(key)
76
- 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)
77
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)
78
119
  end
79
120
 
80
121
  def session_keys_to_expire
@@ -86,27 +127,15 @@ module ActionControllerTweaks
86
127
  session[:session_keys_to_expire]
87
128
  end
88
129
 
89
- def new_session_keys_to_expire(key, options = {})
130
+ def _new_session_keys_to_expire(key, options = {})
90
131
  options.symbolize_keys!
91
132
 
92
133
  result = session_keys_to_expire
134
+ expires_in = OptionProcessor.extract_expires_in(options)
135
+ expires_at = OptionProcessor.extract_expires_at(options)
93
136
 
94
- expires_in = options.delete(:expires_in) || options.delete(:expire_in)
95
- expires_at = options.delete(:expires_at) || options.delete(:expire_at)
96
-
97
- if expires_at && expires_at.respond_to?(:to_time)
98
- expires_at = expires_at.to_time
99
- end
100
-
101
- raise InvalidOptionValue.new(:expires_in, expires_in, Numeric) if expires_in && !expires_in.is_a?(Numeric)
102
- raise InvalidOptionValue.new(:expires_at, expires_at, Time) if expires_at && !expires_at.is_a?(Time)
103
-
104
- if expires_in || expires_at
105
- result[key] = if expires_in
106
- expires_in.seconds.from_now
107
- elsif expires_at
108
- expires_at
109
- end
137
+ if [expires_in, expires_at].any?
138
+ result[key] = expires_in ? expires_in.seconds.from_now : expires_at
110
139
  end
111
140
 
112
141
  result