class Rack::Multiplexer::Route
Constants
- PLACEHOLDER_REGEXP
Attributes
regexp[R]
Public Class Methods
new(pattern, application)
click to toggle source
# File lib/rack/multiplexer.rb, line 110 def initialize(pattern, application) @application = application @regexp, @keys = compile(pattern) end
Public Instance Methods
call(env)
click to toggle source
# File lib/rack/multiplexer.rb, line 115 def call(env) request = Rack::Request.new(env) data = @regexp.match(env["PATH_INFO"]) (data.size - 1).times {|i| request.update_param(@keys[i], data[i + 1]) } @application.call(request.env) end
compile(pattern)
click to toggle source
# File lib/rack/multiplexer.rb, line 126 def compile(pattern) keys = [] segments = [] pattern.split("/").each do |segment| segments << Regexp.escape(segment).gsub(PLACEHOLDER_REGEXP, "([^#?/]+)") if key = Regexp.last_match(1) keys << key end end return Regexp.new(segments.any? ? segments.join(?/) : ?/), keys end
match?(path)
click to toggle source
# File lib/rack/multiplexer.rb, line 122 def match?(path) @regexp === path end