mongrel_esi 0.4.0 → 0.4.1
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.
- data/README +8 -8
- data/Rakefile +4 -12
- data/doc/rdoc/classes/ESI.html +169 -0
- data/doc/rdoc/classes/ESI/Cache.html +178 -0
- data/doc/rdoc/classes/ESI/Cache.src/M000060.html +17 -0
- data/doc/rdoc/classes/ESI/Cache.src/M000061.html +20 -0
- data/doc/rdoc/classes/ESI/Config.html +291 -0
- data/doc/rdoc/classes/ESI/Config.src/M000043.html +18 -0
- data/doc/rdoc/classes/ESI/Config.src/M000044.html +18 -0
- data/doc/rdoc/classes/ESI/Config.src/M000045.html +35 -0
- data/doc/rdoc/classes/ESI/Config.src/M000046.html +38 -0
- data/doc/rdoc/classes/ESI/Config.src/M000047.html +23 -0
- data/doc/rdoc/classes/ESI/Config.src/M000048.html +18 -0
- data/doc/rdoc/classes/ESI/Config.src/M000049.html +20 -0
- data/doc/rdoc/classes/ESI/Config.src/M000050.html +18 -0
- data/doc/rdoc/classes/ESI/Config.src/M000051.html +24 -0
- data/doc/rdoc/classes/ESI/Config/CacheConfig.html +212 -0
- data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000055.html +19 -0
- data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000056.html +19 -0
- data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000057.html +18 -0
- data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000058.html +18 -0
- data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000059.html +18 -0
- data/doc/rdoc/classes/ESI/Config/ConfigRouter.html +187 -0
- data/doc/rdoc/classes/ESI/Config/ConfigRouter.src/M000052.html +19 -0
- data/doc/rdoc/classes/ESI/Config/ConfigRouter.src/M000053.html +21 -0
- data/doc/rdoc/classes/ESI/Config/ConfigRouter.src/M000054.html +21 -0
- data/doc/rdoc/classes/ESI/Dispatcher.html +172 -0
- data/doc/rdoc/classes/ESI/Dispatcher.src/M000062.html +23 -0
- data/doc/rdoc/classes/ESI/Dispatcher.src/M000063.html +20 -0
- data/doc/rdoc/classes/ESI/Fragment.html +218 -0
- data/doc/rdoc/classes/ESI/Fragment.src/M000076.html +21 -0
- data/doc/rdoc/classes/ESI/Fragment.src/M000077.html +18 -0
- data/doc/rdoc/classes/ESI/Fragment.src/M000078.html +18 -0
- data/doc/rdoc/classes/ESI/Handler.html +236 -0
- data/doc/rdoc/classes/ESI/Handler.src/M000079.html +19 -0
- data/doc/rdoc/classes/ESI/Handler.src/M000080.html +161 -0
- data/doc/rdoc/classes/ESI/Handler.src/M000081.html +24 -0
- data/doc/rdoc/classes/ESI/Handler.src/M000082.html +18 -0
- data/doc/rdoc/classes/ESI/Handler.src/M000083.html +26 -0
- data/doc/rdoc/classes/ESI/Handler.src/M000084.html +30 -0
- data/doc/rdoc/classes/ESI/Invalidator.html +131 -0
- data/doc/rdoc/classes/ESI/Invalidator.src/M000004.html +41 -0
- data/doc/rdoc/classes/ESI/Log.html +251 -0
- data/doc/rdoc/classes/ESI/Log.src/M000005.html +18 -0
- data/doc/rdoc/classes/ESI/Log.src/M000006.html +18 -0
- data/doc/rdoc/classes/ESI/Log.src/M000007.html +18 -0
- data/doc/rdoc/classes/ESI/Log.src/M000008.html +18 -0
- data/doc/rdoc/classes/ESI/Log.src/M000009.html +18 -0
- data/doc/rdoc/classes/ESI/Log.src/M000010.html +18 -0
- data/doc/rdoc/classes/ESI/Log.src/M000011.html +18 -0
- data/doc/rdoc/classes/ESI/Log.src/M000012.html +18 -0
- data/doc/rdoc/classes/ESI/Log.src/M000013.html +18 -0
- data/doc/rdoc/classes/ESI/MemcachedCache.html +314 -0
- data/doc/rdoc/classes/ESI/MemcachedCache.src/M000034.html +24 -0
- data/doc/rdoc/classes/ESI/MemcachedCache.src/M000035.html +22 -0
- data/doc/rdoc/classes/ESI/MemcachedCache.src/M000036.html +19 -0
- data/doc/rdoc/classes/ESI/MemcachedCache.src/M000037.html +23 -0
- data/doc/rdoc/classes/ESI/MemcachedCache.src/M000038.html +18 -0
- data/doc/rdoc/classes/ESI/MemcachedCache.src/M000039.html +19 -0
- data/doc/rdoc/classes/ESI/MemcachedCache.src/M000040.html +18 -0
- data/doc/rdoc/classes/ESI/MemcachedCache.src/M000041.html +18 -0
- data/doc/rdoc/classes/ESI/MemcachedCache.src/M000042.html +17 -0
- data/doc/rdoc/classes/ESI/Router.html +229 -0
- data/doc/rdoc/classes/ESI/Router.src/M000073.html +36 -0
- data/doc/rdoc/classes/ESI/Router.src/M000074.html +25 -0
- data/doc/rdoc/classes/ESI/Router.src/M000075.html +24 -0
- data/doc/rdoc/classes/ESI/RubyCache.html +278 -0
- data/doc/rdoc/classes/ESI/RubyCache.src/M000064.html +20 -0
- data/doc/rdoc/classes/ESI/RubyCache.src/M000065.html +22 -0
- data/doc/rdoc/classes/ESI/RubyCache.src/M000066.html +21 -0
- data/doc/rdoc/classes/ESI/RubyCache.src/M000067.html +22 -0
- data/doc/rdoc/classes/ESI/RubyCache.src/M000068.html +18 -0
- data/doc/rdoc/classes/ESI/RubyCache.src/M000069.html +22 -0
- data/doc/rdoc/classes/ESI/RubyCache.src/M000070.html +18 -0
- data/doc/rdoc/classes/ESI/RubyCache.src/M000071.html +18 -0
- data/doc/rdoc/classes/ESI/RubyCache.src/M000072.html +18 -0
- data/doc/rdoc/classes/ESI/Tag.html +137 -0
- data/doc/rdoc/classes/ESI/Tag/Attempt.html +113 -0
- data/doc/rdoc/classes/ESI/Tag/Base.html +267 -0
- data/doc/rdoc/classes/ESI/Tag/Base.src/M000028.html +26 -0
- data/doc/rdoc/classes/ESI/Tag/Base.src/M000029.html +23 -0
- data/doc/rdoc/classes/ESI/Tag/Base.src/M000030.html +22 -0
- data/doc/rdoc/classes/ESI/Tag/Base.src/M000031.html +18 -0
- data/doc/rdoc/classes/ESI/Tag/Base.src/M000032.html +22 -0
- data/doc/rdoc/classes/ESI/Tag/Base.src/M000033.html +23 -0
- data/doc/rdoc/classes/ESI/Tag/Except.html +184 -0
- data/doc/rdoc/classes/ESI/Tag/Except.src/M000020.html +21 -0
- data/doc/rdoc/classes/ESI/Tag/Except.src/M000021.html +20 -0
- data/doc/rdoc/classes/ESI/Tag/Except.src/M000022.html +18 -0
- data/doc/rdoc/classes/ESI/Tag/Include.html +189 -0
- data/doc/rdoc/classes/ESI/Tag/Include.src/M000017.html +20 -0
- data/doc/rdoc/classes/ESI/Tag/Include.src/M000018.html +18 -0
- data/doc/rdoc/classes/ESI/Tag/Include.src/M000019.html +125 -0
- data/doc/rdoc/classes/ESI/Tag/IncludeRequest.html +199 -0
- data/doc/rdoc/classes/ESI/Tag/IncludeRequest.src/M000014.html +18 -0
- data/doc/rdoc/classes/ESI/Tag/IncludeRequest.src/M000015.html +42 -0
- data/doc/rdoc/classes/ESI/Tag/IncludeRequest/Error.html +155 -0
- data/doc/rdoc/classes/ESI/Tag/IncludeRequest/Error.src/M000016.html +19 -0
- data/doc/rdoc/classes/ESI/Tag/Invalidate.html +171 -0
- data/doc/rdoc/classes/ESI/Tag/Invalidate.src/M000025.html +19 -0
- data/doc/rdoc/classes/ESI/Tag/Invalidate.src/M000026.html +51 -0
- data/doc/rdoc/classes/ESI/Tag/Invalidate.src/M000027.html +19 -0
- data/doc/rdoc/classes/ESI/Tag/Try.html +161 -0
- data/doc/rdoc/classes/ESI/Tag/Try.src/M000023.html +40 -0
- data/doc/rdoc/classes/ESI/Tag/Try.src/M000024.html +18 -0
- data/doc/rdoc/classes/MultiDirHandler.html +198 -0
- data/doc/rdoc/classes/MultiDirHandler.src/M000001.html +20 -0
- data/doc/rdoc/classes/MultiDirHandler.src/M000002.html +28 -0
- data/doc/rdoc/classes/MultiDirHandler.src/M000003.html +22 -0
- data/doc/rdoc/classes/Net.html +119 -0
- data/doc/rdoc/classes/Net/An.html +114 -0
- data/doc/rdoc/classes/Net/An/HTTP.html +137 -0
- data/doc/rdoc/classes/Net/An/HTTP.src/M000087.html +17 -0
- data/doc/rdoc/classes/Net/An/IORequest.html +139 -0
- data/doc/rdoc/classes/Net/An/IORequest.src/M000088.html +17 -0
- data/doc/rdoc/classes/Net/An/IOResponse.html +139 -0
- data/doc/rdoc/classes/Net/An/IOResponse.src/M000085.html +17 -0
- data/doc/rdoc/classes/Net/An/IOSocket.html +137 -0
- data/doc/rdoc/classes/Net/An/IOSocket.src/M000086.html +17 -0
- data/doc/rdoc/created.rid +1 -0
- data/doc/rdoc/files/COPYING.html +168 -0
- data/doc/rdoc/files/LICENSE.html +605 -0
- data/doc/rdoc/files/README.html +361 -0
- data/doc/rdoc/files/lib/esi/cache_rb.html +113 -0
- data/doc/rdoc/files/lib/esi/config_rb.html +108 -0
- data/doc/rdoc/files/lib/esi/dispatcher_rb.html +109 -0
- data/doc/rdoc/files/lib/esi/handler_rb.html +121 -0
- data/doc/rdoc/files/lib/esi/invalidator_rb.html +117 -0
- data/doc/rdoc/files/lib/esi/logger_rb.html +108 -0
- data/doc/rdoc/files/lib/esi/router_rb.html +101 -0
- data/doc/rdoc/files/lib/esi/tag/attempt_rb.html +101 -0
- data/doc/rdoc/files/lib/esi/tag/base_rb.html +108 -0
- data/doc/rdoc/files/lib/esi/tag/except_rb.html +101 -0
- data/doc/rdoc/files/lib/esi/tag/include_rb.html +109 -0
- data/doc/rdoc/files/lib/esi/tag/invalidate_rb.html +109 -0
- data/doc/rdoc/files/lib/esi/tag/try_rb.html +108 -0
- data/doc/rdoc/files/lib/multi_dirhandler_rb.html +109 -0
- data/doc/rdoc/files/lib/net/ahttp_rb.html +109 -0
- data/doc/rdoc/fr_class_index.html +55 -0
- data/doc/rdoc/fr_file_index.html +44 -0
- data/doc/rdoc/fr_method_index.html +114 -0
- data/doc/rdoc/index.html +24 -0
- data/doc/rdoc/rdoc-style.css +208 -0
- data/ext/esi/esi_parser.c +36 -156
- data/ext/esi/test/parser.c +42 -43
- data/ext/esi/test1.rb +2 -2
- data/lib/esi/cache.rb +83 -72
- data/lib/esi/handler.rb +5 -20
- data/lib/multi_dirhandler.rb +13 -0
- data/lib/net/ahttp.rb +36 -0
- data/test/integration/handler_test.rb +1 -1
- metadata +222 -45
- data/test/unit/sample.html +0 -21
data/ext/esi/test1.rb
CHANGED
data/lib/esi/cache.rb
CHANGED
|
@@ -1,56 +1,11 @@
|
|
|
1
1
|
require 'digest/sha1'
|
|
2
2
|
require 'thread'
|
|
3
|
-
|
|
3
|
+
require 'ostruct'
|
|
4
4
|
require 'esi/logger'
|
|
5
5
|
|
|
6
|
-
##
|
|
7
|
-
# Provide classes with an efficient method for dynamically changing from
|
|
8
|
-
# multiple threaded to single threaded when the class is created.
|
|
9
|
-
# rather then requiring multiple object types just change the object behavior
|
|
10
|
-
|
|
11
|
-
module Synchronizable
|
|
12
|
-
def synchronize_methods( *methods_names )
|
|
13
|
-
methods_names.flatten.each do|name|
|
|
14
|
-
base_name = name
|
|
15
|
-
if name.to_s.match(/!$/)
|
|
16
|
-
suffix = "!"
|
|
17
|
-
base_name = name.to_s.gsub(/!$/,'')
|
|
18
|
-
end
|
|
19
|
-
unlocked_name = "#{base_name}_unlocked#{suffix}".to_sym
|
|
20
|
-
locked_name = "#{base_name}_locked#{suffix}".to_sym
|
|
21
|
-
|
|
22
|
-
self.class.send :alias_method, unlocked_name, name
|
|
23
|
-
|
|
24
|
-
next unless @semaphore
|
|
25
|
-
|
|
26
|
-
self.class.send(:define_method, locked_name) do
|
|
27
|
-
@semaphore.synchronize do
|
|
28
|
-
send unlocked_name, args
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
6
|
module ESI
|
|
36
7
|
|
|
37
|
-
#
|
|
38
|
-
#
|
|
39
|
-
# all caches store Fragments
|
|
40
|
-
#
|
|
41
|
-
# get - uri,params => Fragment
|
|
42
|
-
#
|
|
43
|
-
# cached? - uri,params => boolean
|
|
44
|
-
#
|
|
45
|
-
# put - uri,params, max_age, body => nil
|
|
46
|
-
#
|
|
47
|
-
# sweep! - tells the cache to expire anything that needs expiring
|
|
48
|
-
#
|
|
49
|
-
# keys - is an optional method for iterating over all keys, may not be exposed by all cache backends
|
|
50
|
-
#
|
|
51
|
-
# delete - key remove the key from the cache
|
|
52
|
-
|
|
53
|
-
# Each object in the cache has a ttl
|
|
8
|
+
# Represents part of the cached page, typically an <esi:include
|
|
54
9
|
class Fragment
|
|
55
10
|
attr_accessor :body, :max_age, :uri
|
|
56
11
|
alias read_body body
|
|
@@ -62,6 +17,12 @@ module ESI
|
|
|
62
17
|
@body = body
|
|
63
18
|
end
|
|
64
19
|
|
|
20
|
+
# make a copy of the object, necessary for thread safety
|
|
21
|
+
def dup
|
|
22
|
+
Fragment.new( @uri, @max_age, @body )
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# determine if the fragment is still valid, given the max age associated when the object was created
|
|
65
26
|
def valid?
|
|
66
27
|
(Time.now.to_i < @max_age)
|
|
67
28
|
end
|
|
@@ -69,17 +30,26 @@ module ESI
|
|
|
69
30
|
end
|
|
70
31
|
|
|
71
32
|
|
|
33
|
+
# cache interface
|
|
34
|
+
#
|
|
35
|
+
# all caches store Fragments
|
|
36
|
+
#
|
|
37
|
+
# get - uri,params => Fragment
|
|
38
|
+
#
|
|
39
|
+
# cached? - uri,params => boolean
|
|
40
|
+
#
|
|
41
|
+
# put - uri,params, max_age, body => nil
|
|
42
|
+
#
|
|
43
|
+
# sweep! - tells the cache to expire anything that needs expiring
|
|
44
|
+
#
|
|
45
|
+
# keys - is an optional method for iterating over all keys, may not be exposed by all cache backends
|
|
46
|
+
#
|
|
47
|
+
# delete - key remove the key from the cache
|
|
48
|
+
#
|
|
72
49
|
# Base Cache object
|
|
73
50
|
class Cache
|
|
74
|
-
include Synchronizable
|
|
75
51
|
|
|
76
|
-
def initialize
|
|
77
|
-
options = OpenStruct.new(options) if options.is_a?(Hash)
|
|
78
|
-
if( options.locked )
|
|
79
|
-
@semaphore = Mutex.new
|
|
80
|
-
end
|
|
81
|
-
synchronize_methods :get, :put, :put, :sweep!, :keys, :delete
|
|
82
|
-
# TODO: load the cache_headers config
|
|
52
|
+
def initialize
|
|
83
53
|
end
|
|
84
54
|
|
|
85
55
|
protected
|
|
@@ -106,6 +76,19 @@ module ESI
|
|
|
106
76
|
# - We could also store the keys in the ruby process or alternatively look in INVALIDATION-WITH-MEMCACHED
|
|
107
77
|
#
|
|
108
78
|
# We can't support advanced selector with memcached backend
|
|
79
|
+
#
|
|
80
|
+
# Configuring:
|
|
81
|
+
#
|
|
82
|
+
# config.cache do|c|
|
|
83
|
+
# c.memcached do|mc|
|
|
84
|
+
# mc.servers = ['localhost:11211']
|
|
85
|
+
# mc.debug = false
|
|
86
|
+
# mc.namespace = 'mesi'
|
|
87
|
+
# mc.readonly = false
|
|
88
|
+
# end
|
|
89
|
+
# c.ttl = 600
|
|
90
|
+
# end
|
|
91
|
+
#
|
|
109
92
|
class MemcachedCache < Cache
|
|
110
93
|
require 'rubygems'
|
|
111
94
|
gem 'memcache-client' if respond_to? :gem
|
|
@@ -113,15 +96,12 @@ module ESI
|
|
|
113
96
|
include ESI::Log
|
|
114
97
|
|
|
115
98
|
def initialize( options )
|
|
116
|
-
super
|
|
117
|
-
|
|
118
|
-
options
|
|
119
|
-
:debug => options.debug,
|
|
120
|
-
:namespace => options.namespace,
|
|
121
|
-
:readonly => options.readonly }
|
|
99
|
+
super()
|
|
100
|
+
options = options.marshal_dump
|
|
101
|
+
options.merge!( :multithread => true )
|
|
122
102
|
puts "Using memcache with options => #{options.inspect}"
|
|
123
103
|
@cache = MemCache.new options
|
|
124
|
-
puts "Using memcache servers at #{options[
|
|
104
|
+
puts "Using memcache servers at #{options[:servers].inspect}"
|
|
125
105
|
@cache.servers = options[:servers]
|
|
126
106
|
end
|
|
127
107
|
|
|
@@ -129,11 +109,13 @@ module ESI
|
|
|
129
109
|
fragment = get(uri,params)
|
|
130
110
|
fragment and fragment.valid?
|
|
131
111
|
rescue Object => e # never raise an exception from this method
|
|
112
|
+
STDERR.puts "error in #{__FILE__}:#{__LINE__}"
|
|
132
113
|
false
|
|
133
114
|
end
|
|
134
115
|
|
|
135
116
|
def get( uri, params )
|
|
136
|
-
@cache.get(cache_key(uri,params))
|
|
117
|
+
fragment = @cache.get(cache_key(uri,params))
|
|
118
|
+
fragment.dup if fragment and fragment.respond_to?(:dup)
|
|
137
119
|
end
|
|
138
120
|
|
|
139
121
|
def put( uri, params, max_age, body )
|
|
@@ -141,6 +123,7 @@ module ESI
|
|
|
141
123
|
key = cache_key(uri,params)
|
|
142
124
|
@cache.add( key, fragment, fragment.max_age )
|
|
143
125
|
rescue Object => e
|
|
126
|
+
STDERR.puts "error in #{__FILE__}:#{__LINE__}"
|
|
144
127
|
log_error e.message
|
|
145
128
|
end
|
|
146
129
|
|
|
@@ -155,8 +138,16 @@ module ESI
|
|
|
155
138
|
end
|
|
156
139
|
|
|
157
140
|
def delete( key )
|
|
141
|
+
delete_unlocked
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def delete_unlocked( key )
|
|
158
145
|
@cache.delete(key)
|
|
159
146
|
end
|
|
147
|
+
|
|
148
|
+
def sweep_unlocked!
|
|
149
|
+
end
|
|
150
|
+
|
|
160
151
|
end
|
|
161
152
|
|
|
162
153
|
#
|
|
@@ -164,43 +155,63 @@ module ESI
|
|
|
164
155
|
#
|
|
165
156
|
# A hash table indexed by cache_key of Fragments.
|
|
166
157
|
# the cache is made thread safe if the external invalidator is active otherwise the Mutex is a no op
|
|
158
|
+
#
|
|
159
|
+
# Default cache.
|
|
167
160
|
class RubyCache < Cache
|
|
168
161
|
|
|
169
162
|
def initialize( options = {} )
|
|
170
|
-
super
|
|
163
|
+
super()
|
|
164
|
+
@semaphore = Mutex.new
|
|
171
165
|
@cache = {}
|
|
172
166
|
end
|
|
173
167
|
|
|
174
168
|
def cached?( uri, params )
|
|
175
169
|
key = cache_key(uri,params)
|
|
176
|
-
|
|
177
|
-
|
|
170
|
+
@semaphore.synchronize do
|
|
171
|
+
fragment = @cache[key]
|
|
172
|
+
fragment and fragment.valid?
|
|
173
|
+
end
|
|
178
174
|
end
|
|
179
175
|
|
|
180
176
|
def get( uri, params )
|
|
181
|
-
@
|
|
177
|
+
@semaphore.synchronize do
|
|
178
|
+
fragment = @cache[cache_key(uri,params)]
|
|
179
|
+
fragment.dup if fragment and fragment.respond_to?(:dup)
|
|
180
|
+
end
|
|
182
181
|
end
|
|
183
182
|
|
|
184
183
|
def put( uri, params, max_age, body )
|
|
185
184
|
key = cache_key(uri,params)
|
|
186
|
-
@
|
|
187
|
-
|
|
185
|
+
@semaphore.synchronize do
|
|
186
|
+
@cache[key] = Fragment.new(uri,max_age,body)
|
|
187
|
+
sweep_unlocked!
|
|
188
|
+
end
|
|
188
189
|
end
|
|
189
190
|
|
|
190
191
|
# run through the cache and dump anything that has expired
|
|
191
192
|
def sweep!
|
|
192
|
-
@
|
|
193
|
+
@semaphore.synchronize { sweep_unlocked! }
|
|
193
194
|
end
|
|
194
195
|
|
|
195
196
|
def keys(&block)
|
|
196
|
-
@
|
|
197
|
-
|
|
197
|
+
@semaphore.synchronize do
|
|
198
|
+
@cache.each do|key,data|
|
|
199
|
+
yield key, data
|
|
200
|
+
end
|
|
198
201
|
end
|
|
199
202
|
end
|
|
200
203
|
|
|
201
204
|
def delete( key )
|
|
205
|
+
@semaphore.synchronize { @cache.delete(key) }
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def delete_unlocked( key )
|
|
202
209
|
@cache.delete(key)
|
|
203
210
|
end
|
|
211
|
+
|
|
212
|
+
def sweep_unlocked!
|
|
213
|
+
@cache.reject! {|k,v| !v.valid? }
|
|
214
|
+
end
|
|
204
215
|
|
|
205
216
|
end
|
|
206
217
|
|
data/lib/esi/handler.rb
CHANGED
|
@@ -141,15 +141,9 @@ module ESI
|
|
|
141
141
|
|
|
142
142
|
#t = Time.now
|
|
143
143
|
proxy_response.read_body do|data|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
#puts "Time in process: #{Time.now - pt}"
|
|
148
|
-
rescue => e
|
|
149
|
-
puts e.message
|
|
150
|
-
puts e.backtrace.join("\n")
|
|
151
|
-
raise e
|
|
152
|
-
end
|
|
144
|
+
#pt = Time.now
|
|
145
|
+
parser.process data
|
|
146
|
+
#puts "Time in process: #{Time.now - pt}"
|
|
153
147
|
end
|
|
154
148
|
#puts "Response Time: #{Time.now - t}"
|
|
155
149
|
|
|
@@ -163,8 +157,7 @@ module ESI
|
|
|
163
157
|
end
|
|
164
158
|
|
|
165
159
|
rescue => e
|
|
166
|
-
|
|
167
|
-
response.write( error )
|
|
160
|
+
STDERR.puts "\n#{e.class}: error in #{__FILE__}:#{__LINE__}\n"
|
|
168
161
|
end
|
|
169
162
|
response.write( "0\r\n\r\n" )
|
|
170
163
|
response.done = true
|
|
@@ -172,7 +165,7 @@ module ESI
|
|
|
172
165
|
end # end request
|
|
173
166
|
|
|
174
167
|
rescue => e
|
|
175
|
-
|
|
168
|
+
STDERR.puts "\n#{e.class}: error in #{__FILE__}:#{__LINE__}\n"
|
|
176
169
|
ensure
|
|
177
170
|
|
|
178
171
|
log_request "\nCompleted => #{url}, #{Time.now - start} seconds with status #{status} and #{chunk_count} chunks\n"
|
|
@@ -191,14 +184,6 @@ protected
|
|
|
191
184
|
response.write( buffer + Mongrel::Const::LINE_END ) # write the chunk
|
|
192
185
|
end
|
|
193
186
|
|
|
194
|
-
def error_response(e,url)
|
|
195
|
-
status = 500
|
|
196
|
-
error = "<h1>Internal Server Errror</h1><h4>Failed while requesting => '#{url}'</h4>\n<pre>#{e.message}#{e.backtrace.join("\n")}</pre>"
|
|
197
|
-
log_error e.backtrace.join("\n")
|
|
198
|
-
log_error error
|
|
199
|
-
[status, "<html><body>#{error}</body></html>"]
|
|
200
|
-
end
|
|
201
|
-
|
|
202
187
|
def read_status(response)
|
|
203
188
|
Net::HTTPResponse::CODE_TO_OBJ.select { |k,v| v == response.class }.first[0].to_i rescue 500
|
|
204
189
|
end
|
data/lib/multi_dirhandler.rb
CHANGED
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
require 'mongrel/handlers.rb'
|
|
2
2
|
require 'digest/md5'
|
|
3
3
|
|
|
4
|
+
#
|
|
5
|
+
# Allow files to be servered from multiple directories within a single URL space
|
|
6
|
+
#
|
|
7
|
+
# This is sometimes very useful when working with multiple application servers, each with
|
|
8
|
+
# their own set of static files.
|
|
9
|
+
#
|
|
10
|
+
# Usage:
|
|
11
|
+
#
|
|
12
|
+
# uri "/request_path/", :handler => MultiDirHandler.new(['/file/path1','/file/path2'])
|
|
13
|
+
#
|
|
14
|
+
# options:
|
|
15
|
+
# :cwd, override the server root directory, make sure there is a tmp directory in server root
|
|
16
|
+
#
|
|
4
17
|
class MultiDirHandler < Mongrel::DirHandler
|
|
5
18
|
# check in each folder for the file
|
|
6
19
|
def initialize( path, options = {})
|
data/lib/net/ahttp.rb
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Non-blocking HTTP Client/Server Library
|
|
2
|
+
# The idea is to use Ruby 1.8.5's non blocking IO methods to provide an interface
|
|
3
|
+
# to HTTP client and server that can be more efficient then the standard Net::HTTP
|
|
4
|
+
|
|
5
|
+
module Net
|
|
6
|
+
module An
|
|
7
|
+
class HTTP
|
|
8
|
+
def self.select
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
class IOSocket < Socket
|
|
13
|
+
def process
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class IORequest < IOSocket
|
|
18
|
+
def process
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
class IOResponse < IOSocket
|
|
23
|
+
def process
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
#
|
|
32
|
+
# emits io handles, these objects have a
|
|
33
|
+
# process method
|
|
34
|
+
Net::An::HTTP.select do|io|
|
|
35
|
+
io.process
|
|
36
|
+
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: mongrel_esi
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.4.
|
|
4
|
+
version: 0.4.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Todd A. Fisher
|
|
@@ -80,77 +80,254 @@ files:
|
|
|
80
80
|
- README
|
|
81
81
|
- Rakefile
|
|
82
82
|
- bin/mongrel_esi
|
|
83
|
+
- doc/rdoc/index.html
|
|
84
|
+
- doc/rdoc/created.rid
|
|
85
|
+
- doc/rdoc/classes
|
|
86
|
+
- doc/rdoc/classes/ESI.html
|
|
87
|
+
- doc/rdoc/classes/Net.html
|
|
88
|
+
- doc/rdoc/classes/MultiDirHandler.src
|
|
89
|
+
- doc/rdoc/classes/MultiDirHandler.src/M000003.html
|
|
90
|
+
- doc/rdoc/classes/MultiDirHandler.src/M000001.html
|
|
91
|
+
- doc/rdoc/classes/MultiDirHandler.src/M000002.html
|
|
92
|
+
- doc/rdoc/classes/MultiDirHandler.html
|
|
93
|
+
- doc/rdoc/classes/Net
|
|
94
|
+
- doc/rdoc/classes/Net/An
|
|
95
|
+
- doc/rdoc/classes/Net/An/IOResponse.html
|
|
96
|
+
- doc/rdoc/classes/Net/An/HTTP.src
|
|
97
|
+
- doc/rdoc/classes/Net/An/HTTP.src/M000087.html
|
|
98
|
+
- doc/rdoc/classes/Net/An/IOSocket.html
|
|
99
|
+
- doc/rdoc/classes/Net/An/IORequest.src
|
|
100
|
+
- doc/rdoc/classes/Net/An/IORequest.src/M000088.html
|
|
101
|
+
- doc/rdoc/classes/Net/An/HTTP.html
|
|
102
|
+
- doc/rdoc/classes/Net/An/IOSocket.src
|
|
103
|
+
- doc/rdoc/classes/Net/An/IOSocket.src/M000086.html
|
|
104
|
+
- doc/rdoc/classes/Net/An/IOResponse.src
|
|
105
|
+
- doc/rdoc/classes/Net/An/IOResponse.src/M000085.html
|
|
106
|
+
- doc/rdoc/classes/Net/An/IORequest.html
|
|
107
|
+
- doc/rdoc/classes/Net/An.html
|
|
108
|
+
- doc/rdoc/classes/ESI
|
|
109
|
+
- doc/rdoc/classes/ESI/RubyCache.src
|
|
110
|
+
- doc/rdoc/classes/ESI/RubyCache.src/M000070.html
|
|
111
|
+
- doc/rdoc/classes/ESI/RubyCache.src/M000069.html
|
|
112
|
+
- doc/rdoc/classes/ESI/RubyCache.src/M000064.html
|
|
113
|
+
- doc/rdoc/classes/ESI/RubyCache.src/M000065.html
|
|
114
|
+
- doc/rdoc/classes/ESI/RubyCache.src/M000066.html
|
|
115
|
+
- doc/rdoc/classes/ESI/RubyCache.src/M000068.html
|
|
116
|
+
- doc/rdoc/classes/ESI/RubyCache.src/M000071.html
|
|
117
|
+
- doc/rdoc/classes/ESI/RubyCache.src/M000072.html
|
|
118
|
+
- doc/rdoc/classes/ESI/RubyCache.src/M000067.html
|
|
119
|
+
- doc/rdoc/classes/ESI/Log.html
|
|
120
|
+
- doc/rdoc/classes/ESI/Config.src
|
|
121
|
+
- doc/rdoc/classes/ESI/Config.src/M000047.html
|
|
122
|
+
- doc/rdoc/classes/ESI/Config.src/M000051.html
|
|
123
|
+
- doc/rdoc/classes/ESI/Config.src/M000045.html
|
|
124
|
+
- doc/rdoc/classes/ESI/Config.src/M000048.html
|
|
125
|
+
- doc/rdoc/classes/ESI/Config.src/M000049.html
|
|
126
|
+
- doc/rdoc/classes/ESI/Config.src/M000044.html
|
|
127
|
+
- doc/rdoc/classes/ESI/Config.src/M000050.html
|
|
128
|
+
- doc/rdoc/classes/ESI/Config.src/M000043.html
|
|
129
|
+
- doc/rdoc/classes/ESI/Config.src/M000046.html
|
|
130
|
+
- doc/rdoc/classes/ESI/Fragment.src
|
|
131
|
+
- doc/rdoc/classes/ESI/Fragment.src/M000077.html
|
|
132
|
+
- doc/rdoc/classes/ESI/Fragment.src/M000078.html
|
|
133
|
+
- doc/rdoc/classes/ESI/Fragment.src/M000076.html
|
|
134
|
+
- doc/rdoc/classes/ESI/Dispatcher.src
|
|
135
|
+
- doc/rdoc/classes/ESI/Dispatcher.src/M000063.html
|
|
136
|
+
- doc/rdoc/classes/ESI/Dispatcher.src/M000062.html
|
|
137
|
+
- doc/rdoc/classes/ESI/Router.html
|
|
138
|
+
- doc/rdoc/classes/ESI/Cache.src
|
|
139
|
+
- doc/rdoc/classes/ESI/Cache.src/M000061.html
|
|
140
|
+
- doc/rdoc/classes/ESI/Cache.src/M000060.html
|
|
141
|
+
- doc/rdoc/classes/ESI/Invalidator.html
|
|
142
|
+
- doc/rdoc/classes/ESI/Invalidator.src
|
|
143
|
+
- doc/rdoc/classes/ESI/Invalidator.src/M000004.html
|
|
144
|
+
- doc/rdoc/classes/ESI/MemcachedCache.html
|
|
145
|
+
- doc/rdoc/classes/ESI/Tag.html
|
|
146
|
+
- doc/rdoc/classes/ESI/Config
|
|
147
|
+
- doc/rdoc/classes/ESI/Config/CacheConfig.src
|
|
148
|
+
- doc/rdoc/classes/ESI/Config/CacheConfig.src/M000057.html
|
|
149
|
+
- doc/rdoc/classes/ESI/Config/CacheConfig.src/M000055.html
|
|
150
|
+
- doc/rdoc/classes/ESI/Config/CacheConfig.src/M000058.html
|
|
151
|
+
- doc/rdoc/classes/ESI/Config/CacheConfig.src/M000056.html
|
|
152
|
+
- doc/rdoc/classes/ESI/Config/CacheConfig.src/M000059.html
|
|
153
|
+
- doc/rdoc/classes/ESI/Config/ConfigRouter.src
|
|
154
|
+
- doc/rdoc/classes/ESI/Config/ConfigRouter.src/M000052.html
|
|
155
|
+
- doc/rdoc/classes/ESI/Config/ConfigRouter.src/M000054.html
|
|
156
|
+
- doc/rdoc/classes/ESI/Config/ConfigRouter.src/M000053.html
|
|
157
|
+
- doc/rdoc/classes/ESI/Config/CacheConfig.html
|
|
158
|
+
- doc/rdoc/classes/ESI/Config/ConfigRouter.html
|
|
159
|
+
- doc/rdoc/classes/ESI/Fragment.html
|
|
160
|
+
- doc/rdoc/classes/ESI/Router.src
|
|
161
|
+
- doc/rdoc/classes/ESI/Router.src/M000075.html
|
|
162
|
+
- doc/rdoc/classes/ESI/Router.src/M000074.html
|
|
163
|
+
- doc/rdoc/classes/ESI/Router.src/M000073.html
|
|
164
|
+
- doc/rdoc/classes/ESI/MemcachedCache.src
|
|
165
|
+
- doc/rdoc/classes/ESI/MemcachedCache.src/M000036.html
|
|
166
|
+
- doc/rdoc/classes/ESI/MemcachedCache.src/M000034.html
|
|
167
|
+
- doc/rdoc/classes/ESI/MemcachedCache.src/M000040.html
|
|
168
|
+
- doc/rdoc/classes/ESI/MemcachedCache.src/M000038.html
|
|
169
|
+
- doc/rdoc/classes/ESI/MemcachedCache.src/M000039.html
|
|
170
|
+
- doc/rdoc/classes/ESI/MemcachedCache.src/M000037.html
|
|
171
|
+
- doc/rdoc/classes/ESI/MemcachedCache.src/M000042.html
|
|
172
|
+
- doc/rdoc/classes/ESI/MemcachedCache.src/M000035.html
|
|
173
|
+
- doc/rdoc/classes/ESI/MemcachedCache.src/M000041.html
|
|
174
|
+
- doc/rdoc/classes/ESI/Dispatcher.html
|
|
175
|
+
- doc/rdoc/classes/ESI/RubyCache.html
|
|
176
|
+
- doc/rdoc/classes/ESI/Log.src
|
|
177
|
+
- doc/rdoc/classes/ESI/Log.src/M000007.html
|
|
178
|
+
- doc/rdoc/classes/ESI/Log.src/M000005.html
|
|
179
|
+
- doc/rdoc/classes/ESI/Log.src/M000012.html
|
|
180
|
+
- doc/rdoc/classes/ESI/Log.src/M000009.html
|
|
181
|
+
- doc/rdoc/classes/ESI/Log.src/M000010.html
|
|
182
|
+
- doc/rdoc/classes/ESI/Log.src/M000013.html
|
|
183
|
+
- doc/rdoc/classes/ESI/Log.src/M000006.html
|
|
184
|
+
- doc/rdoc/classes/ESI/Log.src/M000011.html
|
|
185
|
+
- doc/rdoc/classes/ESI/Log.src/M000008.html
|
|
186
|
+
- doc/rdoc/classes/ESI/Handler.src
|
|
187
|
+
- doc/rdoc/classes/ESI/Handler.src/M000083.html
|
|
188
|
+
- doc/rdoc/classes/ESI/Handler.src/M000082.html
|
|
189
|
+
- doc/rdoc/classes/ESI/Handler.src/M000079.html
|
|
190
|
+
- doc/rdoc/classes/ESI/Handler.src/M000080.html
|
|
191
|
+
- doc/rdoc/classes/ESI/Handler.src/M000084.html
|
|
192
|
+
- doc/rdoc/classes/ESI/Handler.src/M000081.html
|
|
193
|
+
- doc/rdoc/classes/ESI/Tag
|
|
194
|
+
- doc/rdoc/classes/ESI/Tag/Try.html
|
|
195
|
+
- doc/rdoc/classes/ESI/Tag/Except.src
|
|
196
|
+
- doc/rdoc/classes/ESI/Tag/Except.src/M000022.html
|
|
197
|
+
- doc/rdoc/classes/ESI/Tag/Except.src/M000021.html
|
|
198
|
+
- doc/rdoc/classes/ESI/Tag/Except.src/M000020.html
|
|
199
|
+
- doc/rdoc/classes/ESI/Tag/Include.html
|
|
200
|
+
- doc/rdoc/classes/ESI/Tag/Try.src
|
|
201
|
+
- doc/rdoc/classes/ESI/Tag/Try.src/M000024.html
|
|
202
|
+
- doc/rdoc/classes/ESI/Tag/Try.src/M000023.html
|
|
203
|
+
- doc/rdoc/classes/ESI/Tag/IncludeRequest
|
|
204
|
+
- doc/rdoc/classes/ESI/Tag/IncludeRequest/Error.html
|
|
205
|
+
- doc/rdoc/classes/ESI/Tag/IncludeRequest/Error.src
|
|
206
|
+
- doc/rdoc/classes/ESI/Tag/IncludeRequest/Error.src/M000016.html
|
|
207
|
+
- doc/rdoc/classes/ESI/Tag/Invalidate.html
|
|
208
|
+
- doc/rdoc/classes/ESI/Tag/Base.html
|
|
209
|
+
- doc/rdoc/classes/ESI/Tag/Include.src
|
|
210
|
+
- doc/rdoc/classes/ESI/Tag/Include.src/M000018.html
|
|
211
|
+
- doc/rdoc/classes/ESI/Tag/Include.src/M000019.html
|
|
212
|
+
- doc/rdoc/classes/ESI/Tag/Include.src/M000017.html
|
|
213
|
+
- doc/rdoc/classes/ESI/Tag/IncludeRequest.src
|
|
214
|
+
- doc/rdoc/classes/ESI/Tag/IncludeRequest.src/M000015.html
|
|
215
|
+
- doc/rdoc/classes/ESI/Tag/IncludeRequest.src/M000014.html
|
|
216
|
+
- doc/rdoc/classes/ESI/Tag/Invalidate.src
|
|
217
|
+
- doc/rdoc/classes/ESI/Tag/Invalidate.src/M000027.html
|
|
218
|
+
- doc/rdoc/classes/ESI/Tag/Invalidate.src/M000026.html
|
|
219
|
+
- doc/rdoc/classes/ESI/Tag/Invalidate.src/M000025.html
|
|
220
|
+
- doc/rdoc/classes/ESI/Tag/Attempt.html
|
|
221
|
+
- doc/rdoc/classes/ESI/Tag/Except.html
|
|
222
|
+
- doc/rdoc/classes/ESI/Tag/Base.src
|
|
223
|
+
- doc/rdoc/classes/ESI/Tag/Base.src/M000031.html
|
|
224
|
+
- doc/rdoc/classes/ESI/Tag/Base.src/M000032.html
|
|
225
|
+
- doc/rdoc/classes/ESI/Tag/Base.src/M000029.html
|
|
226
|
+
- doc/rdoc/classes/ESI/Tag/Base.src/M000030.html
|
|
227
|
+
- doc/rdoc/classes/ESI/Tag/Base.src/M000028.html
|
|
228
|
+
- doc/rdoc/classes/ESI/Tag/Base.src/M000033.html
|
|
229
|
+
- doc/rdoc/classes/ESI/Tag/IncludeRequest.html
|
|
230
|
+
- doc/rdoc/classes/ESI/Cache.html
|
|
231
|
+
- doc/rdoc/classes/ESI/Handler.html
|
|
232
|
+
- doc/rdoc/classes/ESI/Config.html
|
|
233
|
+
- doc/rdoc/rdoc-style.css
|
|
234
|
+
- doc/rdoc/fr_file_index.html
|
|
235
|
+
- doc/rdoc/fr_class_index.html
|
|
236
|
+
- doc/rdoc/files
|
|
237
|
+
- doc/rdoc/files/LICENSE.html
|
|
238
|
+
- doc/rdoc/files/COPYING.html
|
|
239
|
+
- doc/rdoc/files/README.html
|
|
240
|
+
- doc/rdoc/files/lib
|
|
241
|
+
- doc/rdoc/files/lib/multi_dirhandler_rb.html
|
|
242
|
+
- doc/rdoc/files/lib/esi
|
|
243
|
+
- doc/rdoc/files/lib/esi/router_rb.html
|
|
244
|
+
- doc/rdoc/files/lib/esi/dispatcher_rb.html
|
|
245
|
+
- doc/rdoc/files/lib/esi/cache_rb.html
|
|
246
|
+
- doc/rdoc/files/lib/esi/tag
|
|
247
|
+
- doc/rdoc/files/lib/esi/tag/invalidate_rb.html
|
|
248
|
+
- doc/rdoc/files/lib/esi/tag/except_rb.html
|
|
249
|
+
- doc/rdoc/files/lib/esi/tag/attempt_rb.html
|
|
250
|
+
- doc/rdoc/files/lib/esi/tag/try_rb.html
|
|
251
|
+
- doc/rdoc/files/lib/esi/tag/base_rb.html
|
|
252
|
+
- doc/rdoc/files/lib/esi/tag/include_rb.html
|
|
253
|
+
- doc/rdoc/files/lib/esi/config_rb.html
|
|
254
|
+
- doc/rdoc/files/lib/esi/handler_rb.html
|
|
255
|
+
- doc/rdoc/files/lib/esi/invalidator_rb.html
|
|
256
|
+
- doc/rdoc/files/lib/esi/logger_rb.html
|
|
257
|
+
- doc/rdoc/files/lib/net
|
|
258
|
+
- doc/rdoc/files/lib/net/ahttp_rb.html
|
|
259
|
+
- doc/rdoc/fr_method_index.html
|
|
260
|
+
- test/unit
|
|
261
|
+
- test/unit/esi-sample.html
|
|
262
|
+
- test/unit/router_test.rb
|
|
263
|
+
- test/unit/include_request_test.rb
|
|
264
|
+
- test/unit/help.rb
|
|
265
|
+
- test/unit/parser_test.rb
|
|
266
|
+
- test/unit/include_tag_test.rb
|
|
267
|
+
- test/unit/base_tag_test.rb
|
|
83
268
|
- test/integration
|
|
84
|
-
- test/integration/
|
|
269
|
+
- test/integration/help.rb
|
|
270
|
+
- test/integration/handler_test.rb
|
|
85
271
|
- test/integration/cache_test.rb
|
|
86
272
|
- test/integration/docs
|
|
273
|
+
- test/integration/docs/test_failover.html
|
|
274
|
+
- test/integration/docs/esi_invalidate.html
|
|
275
|
+
- test/integration/docs/index.html
|
|
276
|
+
- test/integration/docs/test1.html
|
|
277
|
+
- test/integration/docs/test3.html
|
|
87
278
|
- test/integration/docs/content
|
|
88
|
-
- test/integration/docs/content/500.html
|
|
89
|
-
- test/integration/docs/content/500_with_failover.html
|
|
90
279
|
- test/integration/docs/content/500_with_failover_to_alt.html
|
|
91
|
-
- test/integration/docs/content/ajax_test_page.html
|
|
92
280
|
- test/integration/docs/content/cookie_variable.html
|
|
93
|
-
- test/integration/docs/content/foo.html
|
|
94
281
|
- test/integration/docs/content/include_in_include.html
|
|
95
|
-
- test/integration/docs/content/
|
|
96
|
-
- test/integration/docs/content/malformed_transforms.html-correct
|
|
97
|
-
- test/integration/docs/content/static-failover.html
|
|
282
|
+
- test/integration/docs/content/500.html
|
|
98
283
|
- test/integration/docs/content/test2.html
|
|
99
284
|
- test/integration/docs/content/test3.html
|
|
100
|
-
- test/integration/docs/
|
|
101
|
-
- test/integration/docs/
|
|
285
|
+
- test/integration/docs/content/500_with_failover.html
|
|
286
|
+
- test/integration/docs/content/foo.html
|
|
287
|
+
- test/integration/docs/content/malformed_transforms.html-correct
|
|
288
|
+
- test/integration/docs/content/malformed_transforms.html
|
|
289
|
+
- test/integration/docs/content/ajax_test_page.html
|
|
290
|
+
- test/integration/docs/content/static-failover.html
|
|
102
291
|
- test/integration/docs/esi_test_content.html
|
|
103
|
-
- test/integration/docs/
|
|
104
|
-
- test/integration/
|
|
105
|
-
- test/integration/docs/test3.html
|
|
106
|
-
- test/integration/docs/test_failover.html
|
|
107
|
-
- test/integration/handler_test.rb
|
|
108
|
-
- test/integration/help.rb
|
|
292
|
+
- test/integration/docs/esi_mixed_content.html
|
|
293
|
+
- test/integration/basic_test.rb
|
|
109
294
|
- test/net
|
|
110
|
-
- test/net/get_test.rb
|
|
111
|
-
- test/net/net_helper.rb
|
|
112
295
|
- test/net/server_test.rb
|
|
113
|
-
- test/
|
|
114
|
-
- test/
|
|
115
|
-
- test/unit/esi-sample.html
|
|
116
|
-
- test/unit/help.rb
|
|
117
|
-
- test/unit/include_request_test.rb
|
|
118
|
-
- test/unit/include_tag_test.rb
|
|
119
|
-
- test/unit/parser_test.rb
|
|
120
|
-
- test/unit/router_test.rb
|
|
121
|
-
- test/unit/sample.html
|
|
296
|
+
- test/net/net_helper.rb
|
|
297
|
+
- test/net/get_test.rb
|
|
122
298
|
- ext/esi/parser.h
|
|
123
299
|
- ext/esi/test/parser.h
|
|
300
|
+
- ext/esi/test/test.c
|
|
301
|
+
- ext/esi/test/parser.c
|
|
124
302
|
- ext/esi/esi_parser.c
|
|
125
303
|
- ext/esi/parser.c
|
|
126
|
-
- ext/esi/test
|
|
127
|
-
- ext/esi/
|
|
304
|
+
- ext/esi/run-test.rb
|
|
305
|
+
- ext/esi/test2.rb
|
|
128
306
|
- ext/esi/extconf.rb
|
|
129
307
|
- ext/esi/machine.rb
|
|
130
|
-
- ext/esi/parser.rb
|
|
131
|
-
- ext/esi/run-test.rb
|
|
132
308
|
- ext/esi/test1.rb
|
|
133
|
-
- ext/esi/
|
|
309
|
+
- ext/esi/parser.rb
|
|
134
310
|
- ext/esi/common.rl
|
|
135
|
-
- ext/esi/parser.rl
|
|
136
|
-
- ext/esi/ruby_esi.rl
|
|
137
311
|
- ext/esi/test/common.rl
|
|
138
312
|
- ext/esi/test/parser.rl
|
|
313
|
+
- ext/esi/parser.rl
|
|
314
|
+
- ext/esi/ruby_esi.rl
|
|
139
315
|
- tools/rakehelp.rb
|
|
140
|
-
- lib/
|
|
141
|
-
- lib/esi/config.rb
|
|
316
|
+
- lib/multi_dirhandler.rb
|
|
142
317
|
- lib/esi/dispatcher.rb
|
|
143
318
|
- lib/esi/handler.rb
|
|
144
|
-
- lib/esi/
|
|
145
|
-
- lib/esi/logger.rb
|
|
146
|
-
- lib/esi/router.rb
|
|
147
|
-
- lib/esi/tag/attempt.rb
|
|
148
|
-
- lib/esi/tag/base.rb
|
|
149
|
-
- lib/esi/tag/except.rb
|
|
319
|
+
- lib/esi/config.rb
|
|
150
320
|
- lib/esi/tag/include.rb
|
|
321
|
+
- lib/esi/tag/attempt.rb
|
|
151
322
|
- lib/esi/tag/invalidate.rb
|
|
152
323
|
- lib/esi/tag/try.rb
|
|
153
|
-
- lib/
|
|
324
|
+
- lib/esi/tag/base.rb
|
|
325
|
+
- lib/esi/tag/except.rb
|
|
326
|
+
- lib/esi/cache.rb
|
|
327
|
+
- lib/esi/router.rb
|
|
328
|
+
- lib/esi/logger.rb
|
|
329
|
+
- lib/esi/invalidator.rb
|
|
330
|
+
- lib/net/ahttp.rb
|
|
154
331
|
- setup.rb
|
|
155
332
|
has_rdoc: true
|
|
156
333
|
homepage:
|
|
@@ -174,7 +351,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
174
351
|
requirements: []
|
|
175
352
|
|
|
176
353
|
rubyforge_project:
|
|
177
|
-
rubygems_version:
|
|
354
|
+
rubygems_version: 0.9.5
|
|
178
355
|
signing_key:
|
|
179
356
|
specification_version: 2
|
|
180
357
|
summary: A small fast ESI HTTP Server built on top of Mongrel
|