Browse code
feat: add absolute-path function
fiddlerwoaroof authored on 05/05/2023 08:14:19
Showing 2 changed files
Showing 2 changed files
... | ... |
@@ -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) |