class ActionDispatch::Routing::Mapper::Constraints
:nodoc:
def constraint_args(constraint, request)
def constraint_args(constraint, request) constraint.arity == 1 ? [request] : [request.path_parameters, request] end
def dispatcher?; @strategy == SERVE; end
def dispatcher?; @strategy == SERVE; end
def initialize(app, constraints, strategy)
def initialize(app, constraints, strategy) # Unwrap Constraints objects. I don't actually think it's possible # to pass a Constraints object to this constructor, but there were # multiple places that kept testing children of this object. I # *think* they were just being defensive, but I have no idea. if app.is_a?(self.class) constraints += app.constraints app = app.app end @strategy = strategy @app, @constraints, = app, constraints end
def matches?(req)
def matches?(req) @constraints.all? do |constraint| (constraint.respond_to?(:matches?) && constraint.matches?(req)) || (constraint.respond_to?(:call) && constraint.call(*constraint_args(constraint, req))) end end
def serve(req)
def serve(req) return [ 404, {'X-Cascade' => 'pass'}, [] ] unless matches?(req) @strategy.call @app, req end