git.fiddlerwoaroof.com
Browse code

feat: add absolute-path function

fiddlerwoaroof authored on 05/05/2023 08:14:19
Showing 2 changed files
... ...
@@ -9,7 +9,7 @@
9 9
   :author "Edward Langley <el-streamprovider@elangley.org"
10 10
   :license "MIT"
11 11
   :in-order-to ((test-op (test-op "stream-provider.test")))
12
-  :depends-on (#:fwoar.lisputils
12
+  :depends-on (#:fwoar-lisputils
13 13
                #:alexandria
14 14
                #:serapeum
15 15
 	       #:uiop
... ...
@@ -8,7 +8,8 @@
8 8
            #:root
9 9
            #:streams
10 10
            #:with-storage-stream
11
-           #:get-nested-provider))
11
+           #:get-nested-provider
12
+           #:absolute-path))
12 13
 (cl:in-package :stream-provider)
13 14
 
14 15
 (defclass stream-provider ()
... ...
@@ -57,7 +58,7 @@ If you override on provider, make sure to CALL-NEXT-METHOD"))
57 58
 (defmethod get-stream-for ((provider string-provider) streamable &rest extra-args)
58 59
   (declare (ignore extra-args))
59 60
   (with-accessors* (streams) provider
60
-    (vector-update-stream:make-update-stream 
61
+    (vector-update-stream:make-update-stream
61 62
      (setf (gethash (stream-key provider streamable) streams)
62 63
            (make-array 10
63 64
                        :element-type 'octet
... ...
@@ -68,6 +69,13 @@ If you override on provider, make sure to CALL-NEXT-METHOD"))
68 69
   ((%root :initarg :root :initform (error "need a root for a file-provider") :reader root)
69 70
    (%if-exists :initarg :if-exists :initform :supersede :reader if-exists)))
70 71
 
72
+(defgeneric absolute-path (provider path)
73
+  (:method ((provider stream-provider) (path string))
74
+    (absolute-path provider (parse-namestring path)))
75
+  (:method ((provider stream-provider) (path pathname))
76
+    (merge-pathnames path
77
+                     (root provider))))
78
+
71 79
 (defmethod get-stream-for ((provider file-provider) streamable &rest extra-args)
72 80
   (declare (ignore extra-args))
73 81
   (with-accessors* (if-exists root) provider
... ...
@@ -76,7 +84,7 @@ If you override on provider, make sure to CALL-NEXT-METHOD"))
76 84
       (when (eql if-exists :if-exists)
77 85
         (ensure-directories-exist stream-key))
78 86
       (open stream-key :direction :output :if-exists if-exists
79
-            :element-type 'octet))))
87
+                       :element-type 'octet))))
80 88
 
81 89
 (defmacro with-storage-stream ((stream-sym object provider &rest extra-args) &body body)
82 90
   (once-only (object)