mongrel_page_cache_handler 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ #require 'mongrel_page_cache_handler'
@@ -0,0 +1,21 @@
1
+ module Mongrel
2
+ module PageCacheHandler
3
+
4
+ class CacheServer < Mongrel::HttpHandler
5
+
6
+ def process(request, response)
7
+ Mongrel::PageCacheHandler::Utils.do_work(request, response) do
8
+ file_path = Mongrel::PageCacheHandler::Utils.build_full_file_path(request)
9
+ if File.exists?(file_path)
10
+ puts "We found: #{file_path}, let's render it"
11
+ response.start(200, true) do |head, out|
12
+ out.write(File.open(file_path).read)
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+ end
19
+
20
+ end #PageCacheHandler
21
+ end #Mongrel
data/lib/cacher.rb ADDED
@@ -0,0 +1,25 @@
1
+ module Mongrel
2
+ module PageCacheHandler
3
+
4
+ class Cacher < Mongrel::HttpHandler
5
+
6
+ def process(request, response)
7
+ Mongrel::PageCacheHandler::Utils.do_work(request, response) do
8
+ if response.status == 200
9
+ sent = response.header.instance_variable_get("@sent")
10
+ mcm = sent["mongrel_cache_me"]
11
+ if mcm
12
+ file_path = Mongrel::PageCacheHandler::Utils.build_full_file_path(request, true)
13
+ puts "Let's cache this page: #{file_path}"
14
+ File.open(file_path, "w") do |f|
15
+ f.puts response.body.string
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+
22
+ end #Cacher
23
+
24
+ end #PageCacheHandler
25
+ end #Mongrel
@@ -0,0 +1,17 @@
1
+ class ActionController::Base
2
+
3
+ def self.m_cache_page(*args)
4
+ before_filter :set_mongrel_page_cache_header, *args
5
+ end
6
+
7
+ protected
8
+ def set_mongrel_page_cache_header
9
+ if request.get?
10
+ # puts "Setting mongrel page cache header for: #{params[:controller]}/#{params[:action]}"
11
+ response.headers['mongrel_cache_me'] = true
12
+ else
13
+ # puts "Won't set mongrel page cache header because the request was not a GET."
14
+ end
15
+ end
16
+
17
+ end
@@ -0,0 +1,8 @@
1
+ require 'gem_plugin'
2
+ require 'mongrel'
3
+ require 'pp'
4
+ require 'fileutils'
5
+ require 'utils'
6
+ require 'cacher'
7
+ require 'cache_server'
8
+ require 'm_action_controller_base'
@@ -0,0 +1,5 @@
1
+ --- !ruby/object:RubyForgeConfig
2
+ gem_name: mongrel_page_cache_handler
3
+ package: mongrel_page_cache_handler
4
+ project: magrathea
5
+ version: 1.6.0
data/lib/utils.rb ADDED
@@ -0,0 +1,66 @@
1
+ module Mongrel
2
+ module PageCacheHandler
3
+
4
+ class Utils
5
+
6
+ class << self
7
+
8
+ def do_work(request, response)
9
+ if ActionController::Base.perform_caching
10
+ if request.params[Mongrel::Const::REQUEST_METHOD] == "GET"
11
+ case request.params[Mongrel::Const::PATH_INFO]
12
+ when /\.[a-zA-Z]*$/
13
+ else
14
+ yield request, request if block_given?
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ def build_full_file_path(request, mk_dirs = false)
21
+ File.join(build_directory_path(request, mk_dirs), build_file_name(request))
22
+ end
23
+
24
+ def build_directory_path(request, mk_dirs = false)
25
+ path = request.params[Mongrel::Const::PATH_INFO]# + ActionController::Base.page_cache_extension
26
+ if path == "/"
27
+ path = "/index"
28
+ end
29
+ pcd = ActionController::Base.page_cache_directory
30
+ dir_path = File.join(pcd, path)
31
+ FileUtils.mkdir_p(dir_path) if mk_dirs
32
+ dir_path
33
+ end
34
+
35
+ def build_file_name(request)
36
+ path = request.params[Mongrel::Const::PATH_INFO]
37
+ path = "/index" if path == "/"
38
+ url = path
39
+ query_string = request.params["QUERY_STRING"]
40
+ query_params = {:page => "1"}
41
+ unless query_string.blank?
42
+ query_string.split("&").sort.each do |pair|
43
+ pair_values = pair.split("=")
44
+ query_params[pair_values.first.to_sym] = URI.unescape(pair_values.last)
45
+ end
46
+ end
47
+ query_params.delete(:gclid)
48
+ f_name = ""
49
+ query_params.each_pair do |key, value|
50
+ f_name << key.to_s
51
+ f_name << "_"
52
+ f_name << value
53
+ f_name << "-"
54
+ end
55
+ f_name.gsub!(" ", "_")
56
+ f_name.downcase!
57
+ f_name.chop!
58
+ f_name
59
+ end
60
+
61
+ end
62
+
63
+ end
64
+
65
+ end #PageCacheHandler
66
+ end #Mongrel
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.2
3
+ specification_version: 1
4
+ name: mongrel_page_cache_handler
5
+ version: !ruby/object:Gem::Version
6
+ version: 1.6.0
7
+ date: 2007-10-26 00:00:00 -04:00
8
+ summary: mongrel_page_cache_handler
9
+ require_paths:
10
+ - lib
11
+ - lib
12
+ - lib
13
+ - lib/tasks
14
+ email:
15
+ homepage:
16
+ rubyforge_project: magrathea
17
+ description: "mongrel_page_cache_handler was developed by: markbates"
18
+ autorequire:
19
+ - utils
20
+ - mongrel_page_cache_handler
21
+ - m_action_controller_base
22
+ - cacher
23
+ - cache_server
24
+ default_executable:
25
+ bindir: bin
26
+ has_rdoc: false
27
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
28
+ requirements:
29
+ - - ">"
30
+ - !ruby/object:Gem::Version
31
+ version: 0.0.0
32
+ version:
33
+ platform: ruby
34
+ signing_key:
35
+ cert_chain:
36
+ post_install_message:
37
+ authors:
38
+ - markbates
39
+ files:
40
+ - init.rb
41
+ - lib/cache_server.rb
42
+ - lib/cacher.rb
43
+ - lib/m_action_controller_base.rb
44
+ - lib/mongrel_page_cache_handler.rb
45
+ - lib/tasks/rubyforge_config.yml
46
+ - lib/utils.rb
47
+ test_files: []
48
+
49
+ rdoc_options: []
50
+
51
+ extra_rdoc_files: []
52
+
53
+ executables: []
54
+
55
+ extensions: []
56
+
57
+ requirements: []
58
+
59
+ dependencies: []
60
+