class Rack::Cache::Key
Attributes
query_string_ignore[RW]
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, line 24 def self.call(request) new(request).generate end
new(request)
click to toggle source
# File lib/rack/cache/key.rb, line 28 def initialize(request) @request = request end
Public Instance Methods
generate()
click to toggle source
Generate a normalized cache key for the request.
# File lib/rack/cache/key.rb, line 33 def generate parts = [] parts << @request.scheme << "://" parts << @request.host if @request.scheme == "https" && @request.port != 443 || @request.scheme == "http" && @request.port != 80 parts << ":" << @request.port.to_s end parts << @request.script_name parts << @request.path_info if qs = query_string parts << "?" parts << qs end parts.join 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, line 57 def query_string return nil if @request.query_string.to_s.empty? parts = @request.query_string.split(/[&;] */n) parts.map! { |p| p.split('=', 2).map!{ |s| unescape(s) } } parts.sort! parts.reject!(&self.class.query_string_ignore) parts.map! { |k,v| "#{escape(k)}=#{escape(v)}" } parts.empty? ? nil : parts.join('&') end