cache_rules 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,7 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ # 0.3.0 (2015-05-03)
4
+
5
+ * Make cache rules consistent based RFC spec
6
+ * Add required 'cached' headers to tests
7
+
3
8
  # 0.2.0 (2015-05-02)
4
9
 
10
+ * Version bump
11
+
5
12
  # 0.1.20 (2015-05-01)
6
13
 
7
14
  * Recently cached responses are cached correctly. Fixes issue #11
data/cache_rules.gemspec CHANGED
@@ -6,7 +6,7 @@ require 'date'
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = 'cache_rules'
9
- s.version = '0.2.0'
9
+ s.version = '0.3.0'
10
10
 
11
11
  s.date = Date.today.to_s
12
12
 
data/lib/helpers.rb CHANGED
@@ -293,9 +293,9 @@ module CacheRules
293
293
  if cached['Last-Modified']
294
294
  result = (now - cached['Last-Modified']['timestamp']) / 10
295
295
 
296
- # Don't cache heuristic responses more than 24 hours old, and avoid sending a 113 Warning ;)
296
+ # Don't return heuristic responses more than 24 hours old, and avoid sending a 113 Warning ;)
297
297
  # source: https://tools.ietf.org/html/rfc7234#section-4.2.2
298
- current_age > 86400 ? 0 : (now + result)
298
+ current_age > 86400 ? 0 : result
299
299
  else
300
300
  0
301
301
  end
data/lib/validations.rb CHANGED
@@ -51,6 +51,7 @@ module CacheRules
51
51
  headers[:cached]['Cache-Control']['max-age'] &&
52
52
  current_age > headers[:cached]['Cache-Control']['max-age']['token'].to_i
53
53
 
54
+
54
55
  to_bit { (response_is_fresh != true) }
55
56
  end
56
57
 
@@ -82,23 +83,22 @@ module CacheRules
82
83
  to_bit { (( cached = headers[:cached]['Cache-Control'] )) && ( cached['must-revalidate'] || cached['proxy-revalidate'] ) }
83
84
  end
84
85
 
85
- # Verify if we're explicitly told not to cache the response
86
+ # Verify if we're explicitly told not to serve a response without revalidation
86
87
  def validate_no_cache?(headers)
87
88
  request_headers, cached_headers = headers.values_at :request, :cached
88
89
  return 1 if cached_headers.length == 0
89
90
 
90
91
  # Must revalidate if this request header exists
91
92
  # source: https://tools.ietf.org/html/rfc7234#section-5.2.1.4
92
- if request_headers['Cache-Control']
93
- _, current_age = helper_freshness_lifetime.call cached_headers
94
-
95
- # If max-age is 0 or if the current age is above the max-age
96
- # source: https://tools.ietf.org/html/rfc7234#section-5.2.1.1
97
- return 1 if (( request = request_headers['Cache-Control'] )) &&
98
- request['no-cache'] ||
99
- (request['max-age'] &&
100
- (request['max-age']['token'].to_s == "0" || current_age > request['max-age']['token'].to_i))
101
- end
93
+ return 1 if (request_headers['Cache-Control'] && request_headers['Cache-Control']['no-cache'])
94
+
95
+ _, current_age = helper_freshness_lifetime.call cached_headers
96
+
97
+ # If max-age is 0 or if the current age is above the max-age
98
+ # source: https://tools.ietf.org/html/rfc7234#section-5.2.1.1
99
+ return 1 if request_headers['Cache-Control'] &&
100
+ request_headers['Cache-Control']['max-age'] &&
101
+ (request_headers['Cache-Control']['max-age']['token'].to_s == "0" || current_age > request_headers['Cache-Control']['max-age']['token'].to_i)
102
102
 
103
103
  # source: https://tools.ietf.org/html/rfc7234#section-5.2.2.2
104
104
  # source: https://tools.ietf.org/html/rfc7234#section-3.2
data/test/test_helpers.rb CHANGED
@@ -362,7 +362,7 @@ class TestHelpers < MiniTest::Test
362
362
  too_old = CacheRules.helper_heuristic now, @cached_headers, 86401
363
363
  noop = CacheRules.helper_heuristic(now, {}, 42)
364
364
 
365
- assert_equal last_modified, 1420378785
365
+ assert_equal last_modified, 16560
366
366
  assert_equal not_public, 0
367
367
  assert_equal too_old, 0
368
368
  assert_equal noop, 0
@@ -168,23 +168,23 @@ class TestValidations < MiniTest::Test
168
168
  }
169
169
  headers2 = {
170
170
  :request => {},
171
- :cached => {'Cache-Control' => {'no-cache'=>{'quoted_string'=>"Cookie"}}}
171
+ :cached => {'Cache-Control' => {'no-cache'=>{'quoted_string'=>"Cookie"}}, "Date" => {"httpdate" => "Thu, 01 Jan 2015 07:03:45 GMT", "timestamp"=>1420095825}, "X-Cache-Req-Date" => {"httpdate"=>"Sat, 03 Jan 2015 07:03:45 GMT", "timestamp"=>1420268625}, "X-Cache-Res-Date" => {"httpdate"=>"Sat, 03 Jan 2015 07:03:45 GMT", "timestamp"=>1420268625}}
172
172
  }
173
173
  headers2_nil = {
174
174
  :request => {},
175
- :cached => {'Cache-Control' => {'no-cache'=>{'quoted_string'=>nil}}}
175
+ :cached => {'Cache-Control' => {'no-cache'=>{'quoted_string'=>nil}}, "Date" => {"httpdate" => "Thu, 01 Jan 2015 07:03:45 GMT", "timestamp"=>1420095825}, "X-Cache-Req-Date" => {"httpdate"=>"Sat, 03 Jan 2015 07:03:45 GMT", "timestamp"=>1420268625}, "X-Cache-Res-Date" => {"httpdate"=>"Sat, 03 Jan 2015 07:03:45 GMT", "timestamp"=>1420268625}}
176
176
  }
177
177
  headers3 = {
178
178
  :request => {},
179
- :cached => {'Cache-Control' => {'s-maxage'=>{'token'=>"0"}}}
179
+ :cached => {'Cache-Control' => {'s-maxage'=>{'token'=>"0"}}, "Date" => {"httpdate" => "Thu, 01 Jan 2015 07:03:45 GMT", "timestamp"=>1420095825}, "X-Cache-Req-Date" => {"httpdate"=>"Sat, 03 Jan 2015 07:03:45 GMT", "timestamp"=>1420268625}, "X-Cache-Res-Date" => {"httpdate"=>"Sat, 03 Jan 2015 07:03:45 GMT", "timestamp"=>1420268625}}
180
180
  }
181
181
  headers4 = {
182
182
  :request => {},
183
- :cached => {'Cache-Control' => {'max-age'=>{'token'=>0}}}
183
+ :cached => {'Cache-Control' => {'max-age'=>{'token'=>0}}, "Date" => {"httpdate" => "Thu, 01 Jan 2015 07:03:45 GMT", "timestamp"=>1420095825}, "X-Cache-Req-Date" => {"httpdate"=>"Sat, 03 Jan 2015 07:03:45 GMT", "timestamp"=>1420268625}, "X-Cache-Res-Date" => {"httpdate"=>"Sat, 03 Jan 2015 07:03:45 GMT", "timestamp"=>1420268625}}
184
184
  }
185
185
  headers5 = {
186
186
  :request => {'Pragma' => {'no-cache'=>{'token'=>nil}}},
187
- :cached => {'Cache-Control' => {}}
187
+ :cached => {'Cache-Control' => {}, "Date" => {"httpdate" => "Thu, 01 Jan 2015 07:03:45 GMT", "timestamp"=>1420095825}, "X-Cache-Req-Date" => {"httpdate"=>"Sat, 03 Jan 2015 07:03:45 GMT", "timestamp"=>1420268625}, "X-Cache-Res-Date" => {"httpdate"=>"Sat, 03 Jan 2015 07:03:45 GMT", "timestamp"=>1420268625}}
188
188
  }
189
189
 
190
190
  guard = CacheRules.validate_no_cache? @no_headers
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cache_rules
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-05-02 00:00:00.000000000 Z
12
+ date: 2015-05-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fakeweb