make-request-matcher-group added by retroj on Tue Jun 25 18:52:32 2013

(define (make-request-matcher-group matchers)
  (lambda (sym)
    (lambda (path)
      (let* ((idx (or (list-index (lambda (x) (eq? sym (car x))) matchers)
                      (error (sprintf "Symbol ~A not in matcher group" sym))))
             (dont-match (take matchers idx))
             (do-match (list-ref matchers idx)))
        (and
         (every (lambda (m) (not (string-match (cdr m) path))) dont-match)
         (string-match (cdr do-match) path)
         (list path))))))

(define request-matcher
  (make-request-matcher-group
   `((scss . ,(regexp "/style/.*\\.css"))
     (style-misc . ,(regexp "/style/.*"))
     (images . ,(regexp ".*\\.(jpg|png)"))
     (everything-else . ,(regexp ".*")))))

(define-page (request-matcher 'scss) ...)

(define-page (request-matcher 'images) ...)

(define-page (request-matcher 'everything-else) ...)