Parent

Included Modules

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, line 9
 9:     def self.call(request)
10:       new(request).generate
11:     end
new(request) click to toggle source
    # File lib/rack/cache/key.rb, line 13
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, line 18
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, line 42
42:     def query_string
43:       return nil if @request.query_string.nil?
44: 
45:       @request.query_string.split(/[&;] */).
46:         map { |p| unescape(p).split('=', 2) }.
47:         sort.
48:         map { |k,v| "#{escape(k)}=#{escape(v)}" }.
49:         join('&')
50:     end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.