Welcome to the CHICKEN Scheme pasting service

define-app for awful pasted by mario-goulart on Sun Oct 21 15:52:04 2012

(use awful html-tags srfi-13)

(define-syntax define-app
  (syntax-rules (matcher: handler-hook: parameters:)
    ((_ id matcher: matcher handler-hook: proc body ...)
     (begin
       (add-request-handler-hook! id
        (lambda (path handler)
          (when (matcher path)
            (proc handler))))
       (proc (lambda ()
               body ...))))
    ((_ id matcher: matcher parameters: params body ...)
     (begin
       (add-request-handler-hook! id
        (lambda (path handler)
          (when (matcher path)
            (parameterize params
              (handler)))))
       (parameterize params
         body ...)))))


;;;
;;; App foo
;;;
(define-app 'foo
  matcher: (lambda (path)
             (string-prefix? "/foo" path))

  parameters: ((enable-ajax #t)
               (enable-sxml #t)
               (ajax-library "/the-foo-ajax.js"))

  (define-page "/foo/baz"
    (lambda ()
      '(p "baz from foo")))

  (define-page "/foo/quux"
    (lambda ()
      '(p "quux from foo")))

  )


;;;
;;; App bar
;;;
(define-app 'bar
  matcher: (lambda (path)
             (string-prefix? "/bar" path))

  handler-hook: (lambda (handler)
                  (parameterize ((enable-ajax #t)
                                 (ajax-library "/js/bar.js"))
                    (handler)))

  (define-page "/bar/baz"
    (lambda ()
      (<p> "baz from bar")))

  (define-page "/bar/quux"
    (lambda ()
      (<p> "quux from bar")))

  )

define-page -- optional handler-hook and parameters pasted by mario-goulart on Sun Oct 21 16:05:15 2012

(use awful html-tags srfi-13)

(define-syntax define-app
  (syntax-rules (matcher: handler-hook: parameters:)
    ((_ id matcher: matcher handler-hook: proc body ...)
     (begin
       (add-request-handler-hook! id
        (lambda (path handler)
          (when (matcher path)
            (proc handler))))
       (proc (lambda ()
               body ...))))
    ((_ id matcher: matcher parameters: params body ...)
     (begin
       (add-request-handler-hook! id
        (lambda (path handler)
          (when (matcher path)
            (parameterize params
              (handler)))))
       (parameterize params
         body ...)))
    ((_ id matcher: matcher body ...)
     (begin
       (add-request-handler-hook! id
        (lambda (path handler)
          (when (matcher path)
            (handler))))
       body ...))))


;;;
;;; App foo
;;;
(define-app 'foo
  matcher: (lambda (path)
             (string-prefix? "/foo" path))

  parameters: ((enable-ajax #t)
               (enable-sxml #t)
               (ajax-library "/the-foo-ajax.js"))

  (define-page "/foo/baz"
    (lambda ()
      '(p "baz from foo")))

  (define-page "/foo/quux"
    (lambda ()
      '(p "quux from foo")))

  )


;;;
;;; App bar
;;;
(define-app 'bar
  matcher: (lambda (path)
             (string-prefix? "/bar" path))

  handler-hook: (lambda (handler)
                  (parameterize ((enable-ajax #t)
                                 (ajax-library "/js/bar.js"))
                    (handler)))

  (define-page "/bar/baz"
    (lambda ()
      (<p> "baz from bar")))

  (define-page "/bar/quux"
    (lambda ()
      (<p> "quux from bar")))

  )

;;;
;;; App baz
;;;
(define-app 'baz
  matcher: (lambda (path)
             (string-prefix? "/baz" path))

  (define-page "/baz/foo"
    (lambda ()
      "foo from baz"))

  (define-page "/baz/bar"
    (lambda ()
      "bar from baz"))

  )

define-app with macro fixes suggested by DerGuteMacroritz pasted by mario-goulart on Mon Oct 22 19:03:22 2012

(use awful html-tags srfi-13)

(define-syntax define-app
  (syntax-rules (matcher: handler-hook: parameters:)
    ((_ id matcher: matcher handler-hook: proc body ...)
     (let ((proc* proc))
       (add-request-handler-hook! 'id
        (lambda (path handler)
          (when (matcher path)
            (proc* handler))))
       (proc* (lambda ()
                body ...))))
    ((_ id matcher: matcher parameters: params body ...)
     (begin
       (add-request-handler-hook! 'id
        (lambda (path handler)
          (when (matcher path)
            (parameterize params
              (handler)))))
       (parameterize params
         body ...)))
    ((_ id matcher: matcher body ...)
     (begin
       (add-request-handler-hook! 'id
        (lambda (path handler)
          (when (matcher path)
            (handler))))
       body ...))))


;;;
;;; App foo
;;;
(define-app foo
  matcher: (lambda (path)
             (string-prefix? "/foo" path))

  parameters: ((enable-ajax #t)
               (enable-sxml #t)
               (ajax-library "/the-foo-ajax.js"))

  (define-page "/foo/baz"
    (lambda ()
      '(p "baz from foo")))

  (define-page "/foo/quux"
    (lambda ()
      '(p "quux from foo")))

  )


;;;
;;; App bar
;;;
(define-app bar
  matcher: (lambda (path)
             (string-prefix? "/bar" path))

  handler-hook: (lambda (handler)
                  (parameterize ((enable-ajax #t)
                                 (ajax-library "/js/bar.js"))
                    (handler)))

  (define-page "/bar/baz"
    (lambda ()
      (<p> "baz from bar")))

  (define-page "/bar/quux"
    (lambda ()
      (<p> "quux from bar")))

  )

;;;
;;; App baz
;;;
(define-app baz
  matcher: (lambda (path)
             (string-prefix? "/baz" path))

  (define-page "/baz/foo"
    (lambda ()
      "foo from baz"))

  (define-page "/baz/bar"
    (lambda ()
      "bar from baz"))

  )

define-app: also avoid evaluating matcher multiple times added by mario-goulart on Mon Oct 22 19:37:36 2012

(use awful html-tags srfi-13)

(define-syntax define-app
  (syntax-rules (matcher: handler-hook: parameters:)
    ((_ id matcher: matcher handler-hook: proc body ...)
     (let ((proc* proc)
           (matcher* matcher))
       (add-request-handler-hook! 'id
         (lambda (path handler)
           (when (matcher* path)
             (proc* handler))))
       (proc* (lambda ()
                body ...))))
    ((_ id matcher: matcher parameters: params body ...)
     (let ((matcher* matcher))
       (add-request-handler-hook! 'id
         (lambda (path handler)
           (when (matcher* path)
             (parameterize params
               (handler)))))
       (parameterize params
         body ...)))
    ((_ id matcher: matcher body ...)
     (let ((matcher* matcher))
       (add-request-handler-hook! 'id
         (lambda (path handler)
           (when (matcher* path)
             (handler))))
       body ...))))


;;;
;;; App foo
;;;
(define-app foo
  matcher: (lambda (path)
             (string-prefix? "/foo" path))

  parameters: ((enable-ajax #t)
               (enable-sxml #t)
               (ajax-library "/the-foo-ajax.js"))

  (define-page "/foo/baz"
    (lambda ()
      '(p "baz from foo")))

  (define-page "/foo/quux"
    (lambda ()
      '(p "quux from foo")))

  )


;;;
;;; App bar
;;;
(define-app bar
  matcher: (lambda (path)
             (string-prefix? "/bar" path))

  handler-hook: (lambda (handler)
                  (parameterize ((enable-ajax #t)
                                 (ajax-library "/js/bar.js"))
                    (handler)))

  (define-page "/bar/baz"
    (lambda ()
      (<p> "baz from bar")))

  (define-page "/bar/quux"
    (lambda ()
      (<p> "quux from bar")))

  )

;;;
;;; App baz
;;;
(define-app baz
  matcher: (lambda (path)
             (string-prefix? "/baz" path))

  (define-page "/baz/foo"
    (lambda ()
      "foo from baz"))

  (define-page "/baz/bar"
    (lambda ()
      "bar from baz"))

  )

Your annotation:

Enter a new annotation:

Your nick:
The title of your paste:
Your paste (mandatory) :
What's the procedure that returns the cdr of a car?
Visually impaired? Let me spell it for you (wav file) download WAV