| Class | ::Utils::HttpUtil::CachedObject |
| In: |
lib/rbot/core/utils/httputil.rb
|
| Parent: | Object |
| count | [RW] | |
| date | [RW] | |
| expires | [RW] | |
| first_used | [RW] | |
| last_used | [RW] | |
| response | [RW] |
# File lib/rbot/core/utils/httputil.rb, line 203
203: def self.maybe_new(resp)
204: debug "maybe new #{resp}"
205: return nil if resp.no_cache
206: return nil unless Net::HTTPOK === resp ||
207: Net::HTTPMovedPermanently === resp ||
208: Net::HTTPFound === resp ||
209: Net::HTTPPartialContent === resp
210:
211: cc = resp['cache-control']
212: return nil if cc && (cc =~ /no-cache/i)
213:
214: date = Time.now
215: if d = resp['date']
216: date = Time.httpdate(d)
217: end
218:
219: return nil if resp['expires'] && (Time.httpdate(resp['expires']) < date)
220:
221: debug "creating cache obj"
222:
223: self.new(resp)
224: end
# File lib/rbot/core/utils/httputil.rb, line 277
277: def initialize(resp)
278: @response = resp
279: begin
280: self.revalidate
281: self.response.raw_body
282: rescue Exception => e
283: error e
284: raise e
285: end
286: end
# File lib/rbot/core/utils/httputil.rb, line 233
233: def expired?
234: debug "checking expired?"
235: if cc = self.response['cache-control'] && cc =~ /must-revalidate/
236: return true
237: end
238: return self.expires < Time.now
239: end
# File lib/rbot/core/utils/httputil.rb, line 252
252: def revalidate(resp = self.response)
253: @count = 0
254: self.use
255: self.date = resp.key?('date') ? Time.httpdate(resp['date']) : Time.now
256:
257: cc = resp['cache-control']
258: if cc && (cc =~ /max-age=(\d+)/)
259: self.expires = self.date + $1.to_i
260: elsif resp.key?('expires')
261: self.expires = Time.httpdate(resp['expires'])
262: elsif lm = resp['last-modified']
263: delta = self.date - Time.httpdate(lm)
264: delta = 10 if delta <= 0
265: delta /= 5
266: self.expires = self.date + delta
267: else
268: self.expires = self.date + 300
269: end
270: # self.expires = Time.now + 10 # DEBUG
271: debug "expires on #{self.expires}"
272:
273: return true
274: end