Experiment with interceptor chains
This commit is contained in:
parent
31bd78abb1
commit
a65415f846
2 changed files with 262 additions and 0 deletions
55
tryme-interceptors.scm
Normal file
55
tryme-interceptors.scm
Normal file
|
@ -0,0 +1,55 @@
|
|||
(use-modules
|
||||
(ice-9 filesystem)
|
||||
(logging logger)
|
||||
(srfi srfi-9)
|
||||
(ordo connection)
|
||||
(ordo interceptor)
|
||||
(ordo logger))
|
||||
|
||||
(define-record-type <play>
|
||||
(make-play name connection vars interceptors)
|
||||
play?
|
||||
(connection play-connection)
|
||||
(vars play-vars)
|
||||
(name play-name)
|
||||
(interceptors play-interceptors))
|
||||
|
||||
(define* (play #:key name connection (interceptors '()) (vars '()))
|
||||
(make-play name connection vars interceptors))
|
||||
|
||||
(define (run-play play)
|
||||
(dynamic-wind
|
||||
(lambda ()
|
||||
(log-msg 'NOTICE "Running play: " (play-name play))
|
||||
(init-connection! (play-connection play)))
|
||||
(lambda ()
|
||||
(let ((ctx (init-context (play-connection play) #:vars (play-vars play))))
|
||||
(execute ctx (play-interceptors play))
|
||||
(if (context-error ctx)
|
||||
(log-msg 'ERROR "Play " (play-name play) " terminated with error: " (context-error ctx))
|
||||
(log-msg 'NOTICE "Completed play: " (play-name play)))))
|
||||
(lambda ()
|
||||
(close-connection! (play-connection play)))))
|
||||
|
||||
(define test-play
|
||||
(play
|
||||
#:name "Test play"
|
||||
#:connection (local-connection)
|
||||
#:vars '((base-dir . "/home/ray/ordo-test"))
|
||||
#:interceptors (list
|
||||
(interceptor
|
||||
"Handle errors"
|
||||
#:error (lambda (ctx err)
|
||||
(log-msg 'WARN "Handling error " err)
|
||||
(set-context-error! ctx #f)))
|
||||
(interceptor
|
||||
"Create base directory"
|
||||
#:enter (lambda (ctx)
|
||||
(must ctx "mkdir" "-p" (unbind ctx base-dir))))
|
||||
(interceptor
|
||||
"Create test file"
|
||||
#:enter (lambda (ctx)
|
||||
(must ctx "touch" (file-name-join* (unbind ctx base-dir) "test-file"))))
|
||||
(interceptor
|
||||
"Throw an error"
|
||||
#:enter (lambda (ctx) (error "badness"))))))
|
Loading…
Add table
Add a link
Reference in a new issue