simplify config setup, using *root* special variable

This commit is contained in:
Helmut Merz 2024-06-27 09:16:55 +02:00
parent f248fc9e67
commit 5278b2551c
7 changed files with 20 additions and 28 deletions

View file

@ -51,8 +51,8 @@
(setf (gethash sl data) env-val)
(setf (gethash sl data) dotenv-val))))))
(defun root (&rest params)
(apply #'make-instance 'root params))
(defun root (&rest params &key (class 'root) &allow-other-keys)
(setf *root* (apply #'make-instance class params)))
;;;; config base class
@ -76,9 +76,9 @@
(defmethod env-data ((cfg base))
(env-data (parent cfg)))
(defun add (parent name &rest params
&key (class 'base)
&allow-other-keys)
(defun add (name &rest params
&key (class 'base) (parent *root*)
&allow-other-keys)
(apply #'make-instance class :parent parent :name name params))
(defun add-action (cfg pattern handler &rest params)

View file

@ -2,7 +2,7 @@
(in-package :scopes/test-core)
(setf *config* (config:root))
(config:root)
(let ((cfg (config:add *config* :test-receiver :setup #'setup)))
(let ((cfg (config:add :test-receiver :setup #'setup)))
(config:add-action cfg '(:test) #'check-message))

View file

@ -4,6 +4,7 @@
(in-package :scopes/test-config)
(setf *config* (make-instance 'test-config))
(config:root :class 'test-config)
(config:add :child :class 'child-config)
(make-instance 'child-config :parent *config*)
;(make-instance 'child-config :parent config:*root*)

View file

@ -2,9 +2,9 @@
(in-package :scopes/test-web)
(setf *config* (config:root :env-keys '(:address :port)))
(config:root :env-keys '(:address :port))
(let ((cfg (config:add *config* :server
(let ((cfg (config:add :server
:class 'server:config
:port "8899"
:routes
@ -12,7 +12,7 @@
(() server:fileserver
:doc-root ,(t:test-path "" "docs")))))))
(let ((cfg (config:add *config* :client
(let ((cfg (config:add :client
:class 'client:config
:base-url "http://localhost:8899"
:doc-path "/" :api-path "/api/"))))

View file

@ -12,8 +12,6 @@
(in-package :scopes/test-config)
(defvar *config* nil)
(defclass test-config (config:root)
((config:env-keys :initform '(:user :password))
(config:env-path :initform (t:test-path ".test.env"))))
@ -24,8 +22,7 @@
(password :accessor password :initarg :password)))
(defun run ()
(let ((*config* nil)
(t:*test-suite* (t:test-suite "config")))
(let ((t:*test-suite* (t:test-suite "config")))
(setf (uiop:getenv "SCOPES_PASSWORD") "very_secret")
(load (t:test-path "config-dummy" "etc"))
(test-make-path)
@ -38,8 +35,8 @@
(== (pathname-name (util:home-path ".env.txt" "lisp" "cl-scopes")) ".env"))
(deftest test-env-override ()
(let ((data (config:env-data *config*))
(child (car (config:children *config*))))
(let ((data (config:env-data config:*root*))
(child (car (config:children config:*root*))))
(== (gethash :user data) "user-from-env-file")
(== (gethash :password data) "very_secret")
(== (user child) "user-from-env-file")

View file

@ -13,8 +13,6 @@
(in-package :scopes/test-core)
(defvar *config* nil)
;;;; core/testing: test-receiver
(defclass test-receiver (core:context)
@ -49,13 +47,12 @@
((receiver :accessor receiver :initarg :receiver)))
(defun run ()
(let* ((*config* nil)
(t:*test-suite* (make-instance 'test-suite :name "core")))
(let* ((t:*test-suite* (make-instance 'test-suite :name "core")))
(log4cl:log-config :sane :daily (t:test-path "scopes-test.log" "log"))
(load (t:test-path "config-core" "etc"))
(unwind-protect
(progn
(core:setup-services *config*)
(core:setup-services config:*root*)
(setf (receiver t:*test-suite*) (core:find-service :test-receiver))
(test-send))
(core:shutdown)

View file

@ -13,15 +13,12 @@
(in-package :scopes/test-web)
(defvar *config* nil)
(defun run ()
(let ((t:*test-suite* (t:test-suite "web"))
(*config* nil))
(let ((t:*test-suite* (t:test-suite "web")))
(load (t:test-path "config-web" "etc"))
(unwind-protect
(progn
(core:setup-services *config*)
(core:setup-services config:*root*)
(let ((server (core:find-service :server))
(client (core:find-service :client)))
(test-server-config server)