about summary refs log tree commit diff
diff options
context:
space:
mode:
authorArun Isaac2025-12-17 20:38:51 +0000
committerArun Isaac2025-12-17 20:38:51 +0000
commit34ce95d188a121c6650c2756cde640b8f33647de (patch)
treed53bb48701e6e2633fbc6800ba9452095e73fc35
parentc7fdf56264781116b80d46f2087e0150db8fb423 (diff)
downloadravanan-34ce95d188a121c6650c2756cde640b8f33647de.tar.gz
ravanan-34ce95d188a121c6650c2756cde640b8f33647de.tar.lz
ravanan-34ce95d188a121c6650c2756cde640b8f33647de.zip
work/utils: Error out on missing keys to json-ref.
-rw-r--r--ravanan/work/utils.scm5
-rw-r--r--tests/work/utils.scm29
2 files changed, 32 insertions, 2 deletions
diff --git a/ravanan/work/utils.scm b/ravanan/work/utils.scm
index 9f704c3..5e057e3 100644
--- a/ravanan/work/utils.scm
+++ b/ravanan/work/utils.scm
@@ -70,11 +70,12 @@ mutated."
     (() alist)))
 
 (define (json-ref scm . keys)
-  "Extract subtree of JSON @var{scm} that is addressed by @var{keys}."
+  "Extract subtree of JSON @var{scm} that is addressed by @var{keys}. Raise an
+error if any of @var{keys} is not found."
   (match keys
     ((key other-keys ...)
      (apply json-ref
-            ((if (list? scm) assoc-ref vector-ref) scm key)
+            ((if (list? scm) assoc-ref* vector-ref) scm key)
             other-keys))
     (() scm)))
 
diff --git a/tests/work/utils.scm b/tests/work/utils.scm
new file mode 100644
index 0000000..47f99aa
--- /dev/null
+++ b/tests/work/utils.scm
@@ -0,0 +1,29 @@
+;;; ravanan --- High-reproducibility CWL runner powered by Guix
+;;; Copyright © 2025 Arun Isaac <arunisaac@systemreboot.net>
+;;;
+;;; This file is part of ravanan.
+;;;
+;;; ravanan is free software: you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation, either version 3 of the License, or
+;;; (at your option) any later version.
+;;;
+;;; ravanan is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;;; General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with ravanan.  If not, see <https://www.gnu.org/licenses/>.
+
+(use-modules (srfi srfi-64)
+             (ravanan work utils))
+
+(test-begin "work.utils")
+
+(test-error "json-ref must error out on missing keys" #t
+            (json-ref '(("foo" . 1)
+                        ("bar" . (("foobar" . 3))))
+                      "bar" "fubar"))
+
+(test-end "work.command-line-tool")