class Rack::Cache::Key
Attributes
Public Class Methods
Source
# File lib/rack/cache/key.rb 24 def self.call(request) 25 new(request).generate 26 end
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.
Source
# File lib/rack/cache/key.rb 28 def initialize(request) 29 @request = request 30 end
Public Instance Methods
Source
# File lib/rack/cache/key.rb 33 def generate 34 parts = [] 35 parts << @request.scheme << "://" 36 parts << @request.host 37 38 if @request.scheme == "https" && @request.port != 443 || 39 @request.scheme == "http" && @request.port != 80 40 parts << ":" << @request.port.to_s 41 end 42 43 parts << @request.script_name 44 parts << @request.path_info 45 46 if qs = query_string 47 parts << "?" 48 parts << qs 49 end 50 51 parts.join 52 end
Generate a normalized cache key for the request.
Private Instance Methods
Source
# File lib/rack/cache/key.rb 57 def query_string 58 return nil if @request.query_string.to_s.empty? 59 60 parts = @request.query_string.split(/[&;] */n) 61 parts.map! { |p| p.split('=', 2).map!{ |s| unescape(s) } } 62 parts.sort! 63 parts.reject!(&self.class.query_string_ignore) 64 parts.map! { |k,v| "#{escape(k)}=#{escape(v)}" } 65 parts.empty? ? nil : parts.join('&') 66 end
Build a normalized query string by alphabetizing all keys/values and applying consistent escaping.