class Rack::Cache::Key
Public Class Methods
call(request)
click to toggle source
Implement .call, since it seems like the “Rack-y” thing to do. Plus, it opens the door for cache key generators to just be blocks.
# File lib/rack/cache/key.rb 9 def self.call(request) 10 new(request).generate 11 end
new(request)
click to toggle source
# File lib/rack/cache/key.rb 13 def initialize(request) 14 @request = request 15 end
Public Instance Methods
generate()
click to toggle source
Generate a normalized cache key for the request.
# File lib/rack/cache/key.rb 18 def generate 19 parts = [] 20 parts << @request.scheme << "://" 21 parts << @request.host 22 23 if @request.scheme == "https" && @request.port != 443 || 24 @request.scheme == "http" && @request.port != 80 25 parts << ":" << @request.port.to_s 26 end 27 28 parts << @request.script_name 29 parts << @request.path_info 30 31 if qs = query_string 32 parts << "?" 33 parts << qs 34 end 35 36 parts.join 37 end
Private Instance Methods
query_string()
click to toggle source
Build a normalized query string by alphabetizing all keys/values and applying consistent escaping.
# File lib/rack/cache/key.rb 42 def query_string 43 return nil if @request.query_string.nil? 44 45 @request.query_string.split(/[&;] */n). 46 map { |p| p.split('=', 2).map{ |s| unescape(s) } }. 47 sort. 48 map { |k,v| "#{escape(k)}=#{escape(v)}" }. 49 join('&') 50 end