The idea is simple - since the package includes a not-found script, we should use that by default when it is not specified.
(define (*make-shp-handler path
#:default (default "index")
#:not-found (not-found #f)
#:required (required "required")
#:topfilter (topfilter #f)
#:chrome (chrome #f))
(make-shp-handler path
default
(if (not not-found)
(make-script (build-path (this-expression-source-directory) "example" "shp" "notfound") 0)
not-found)
(init-script required path) topfilter chrome))
we'll also have to change the
segment->path
and segment->partial-path
function to ensure make them play well with having a script struct as the value of not-found:
(define (not-found-path base)
(let ((not-found (shp-handler-not-found ($server))))
(if (script? not-found)
(script-path not-found)
(build-path base not-found))))
;; partially matching the path from the beginning of the path
(define (segments->partial-path segments)
(define (helper rest path default)
;; if we did not find any match return not-found
(cond ((null? rest)
(not-found-path (shp-handler-path ($server)))) ...)
...)
(define (segments->path segments (partial? #t))
....
(else
(not-found-path script)))))
So now if you decide not to specify the not-found script path, the code will still work.
No comments:
Post a Comment