hurley-http-cache 0.1.0.beta

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.
@@ -0,0 +1,103 @@
1
+ module Hurley
2
+ class Test
3
+ module HttpCacheServer
4
+ def self.registered(app)
5
+ app.helpers Helpers
6
+ app.set :counter, 0
7
+ app.set :requests, 0
8
+ app.set :yesterday, (Date.today - 1).httpdate
9
+
10
+ app.delete '/' do
11
+ settings.counter = 0
12
+ settings.requests = 0
13
+ status 204
14
+ end
15
+
16
+ app.get '/counter' do
17
+ [200, { 'Cache-Control' => 'max-age=200' }, increment_requests]
18
+ end
19
+
20
+ app.post '/counter' do
21
+ [200, { 'Cache-Control' => 'max-age=200' }, increment_requests]
22
+ end
23
+
24
+ app.patch '/counter' do
25
+ [200, { 'Cache-Control' => 'max-age=200' }, increment_requests]
26
+ end
27
+
28
+ app.put '/counter' do
29
+ [200, { 'Cache-Control' => 'max-age=200' }, increment_requests]
30
+ end
31
+
32
+ app.delete '/counter' do
33
+ [200, { 'Cache-Control' => 'max-age=200' }, increment_requests]
34
+ end
35
+
36
+ app.get '/broken' do
37
+ [500, { 'Cache-Control' => 'max-age=400' }, increment_requests]
38
+ end
39
+
40
+ app.post '/delete-with-location' do
41
+ [200, { 'Location' => "#{request.base_url}/counter" }, '']
42
+ end
43
+
44
+ app.post '/delete-with-content-location' do
45
+ [200, { 'Content-Location' => "#{request.base_url}/counter" }, '']
46
+ end
47
+
48
+ app.get '/dontstore' do
49
+ [200, { 'Cache-Control' => 'no-store' }, increment_requests]
50
+ end
51
+
52
+ app.get '/expires' do
53
+ [200, { 'Expires' => (Time.now + 10).httpdate }, increment_requests]
54
+ end
55
+
56
+ app.get '/timestamped' do
57
+ settings.counter += 1
58
+ header = settings.counter > 2 ? '1' : '2'
59
+
60
+ if env['HTTP_IF_MODIFIED_SINCE'] == header
61
+ [304, {}, '']
62
+ else
63
+ [200, { 'Last-Modified' => header }, increment_requests]
64
+ end
65
+ end
66
+
67
+ app.get '/etag' do
68
+ settings.counter += 1
69
+ tag = settings.counter > 2 ? '1' : '2'
70
+
71
+ if env['HTTP_IF_NONE_MATCH'] == tag
72
+ [304, { 'ETag' => tag, 'Cache-Control' => 'max-age=200', 'Date' => Time.now.httpdate, 'Expires' => (Time.now + 200).httpdate, 'Vary' => '*' }, ""]
73
+ else
74
+ [200, { 'ETag' => tag, 'Cache-Control' => 'max-age=0', 'Date' => settings.yesterday, 'Expires' => Time.now.httpdate, 'Vary' => 'Accept' }, increment_requests]
75
+ end
76
+ end
77
+
78
+ app.get '/old' do
79
+ [200, { 'Date' => settings.yesterday, 'Expires' => settings.yesterday }, increment_requests]
80
+ end
81
+
82
+ app.get '/vary' do
83
+ [200, { 'Cache-Control' => 'max-age=50', 'Vary' => 'User-Agent' }, increment_requests]
84
+ end
85
+
86
+ app.get '/vary-wildcard' do
87
+ [200, { 'Cache-Control' => 'max-age=50', 'Vary' => '*' }, increment_requests]
88
+ end
89
+
90
+ app.get '/private' do
91
+ [200, { 'Cache-Control' => 'private, max-age=100' }, increment_requests]
92
+ end
93
+ end
94
+
95
+ module Helpers
96
+ # Increments the 'requests' counter to act as a newly processed response.
97
+ def increment_requests
98
+ (settings.requests += 1).to_s
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,23 @@
1
+ require 'logger'
2
+ require 'minitest/autorun'
3
+ require 'hurley'
4
+ $:.push File.expand_path('../../lib', __FILE__)
5
+ require 'hurley-http-cache'
6
+
7
+ class TestLogger < Logger
8
+ def initialize
9
+ @entries = Hash.new([])
10
+ end
11
+
12
+ def debugs
13
+ @entries[Logger::DEBUG]
14
+ end
15
+
16
+ def warns
17
+ @entries[Logger::WARN]
18
+ end
19
+
20
+ def add(severity, message = nil, progname = nil)
21
+ @entries[severity] << (message || yield)
22
+ end
23
+ end
metadata ADDED
@@ -0,0 +1,114 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hurley-http-cache
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0.beta
5
+ platform: ruby
6
+ authors:
7
+ - Lucas Mazza
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-02-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: hurley
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.1'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: '0.1'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '0.1'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0.1'
33
+ - !ruby/object:Gem::Dependency
34
+ name: bundler
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.7'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.7'
47
+ - !ruby/object:Gem::Dependency
48
+ name: rake
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '10.0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '10.0'
61
+ description: Hurley connection to handle HTTP caching
62
+ email:
63
+ - opensource@plataformatec.com.br
64
+ executables: []
65
+ extensions: []
66
+ extra_rdoc_files: []
67
+ files:
68
+ - LICENSE
69
+ - README.md
70
+ - lib/hurley-http-cache.rb
71
+ - lib/hurley/http_cache.rb
72
+ - lib/hurley/http_cache/cache_control.rb
73
+ - lib/hurley/http_cache/request.rb
74
+ - lib/hurley/http_cache/response.rb
75
+ - lib/hurley/http_cache/storage.rb
76
+ - test/http_cache/cache_control_test.rb
77
+ - test/http_cache/request_test.rb
78
+ - test/http_cache/response_test.rb
79
+ - test/http_cache/storage_test.rb
80
+ - test/live_http_cache_test.rb
81
+ - test/support/server.rb
82
+ - test/test_helper.rb
83
+ homepage: https://github.com/plataformatec/hurley-http-cache
84
+ licenses:
85
+ - Apache 2.0
86
+ metadata: {}
87
+ post_install_message:
88
+ rdoc_options: []
89
+ require_paths:
90
+ - lib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: 2.0.0
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">"
99
+ - !ruby/object:Gem::Version
100
+ version: 1.3.1
101
+ requirements: []
102
+ rubyforge_project:
103
+ rubygems_version: 2.4.5
104
+ signing_key:
105
+ specification_version: 4
106
+ summary: A Hurley connection that caches HTTP responses.
107
+ test_files:
108
+ - test/http_cache/cache_control_test.rb
109
+ - test/http_cache/request_test.rb
110
+ - test/http_cache/response_test.rb
111
+ - test/http_cache/storage_test.rb
112
+ - test/live_http_cache_test.rb
113
+ - test/support/server.rb
114
+ - test/test_helper.rb