simplify config setup, using *root* special variable
This commit is contained in:
parent
f248fc9e67
commit
5278b2551c
7 changed files with 20 additions and 28 deletions
|
@ -51,8 +51,8 @@
|
||||||
(setf (gethash sl data) env-val)
|
(setf (gethash sl data) env-val)
|
||||||
(setf (gethash sl data) dotenv-val))))))
|
(setf (gethash sl data) dotenv-val))))))
|
||||||
|
|
||||||
(defun root (&rest params)
|
(defun root (&rest params &key (class 'root) &allow-other-keys)
|
||||||
(apply #'make-instance 'root params))
|
(setf *root* (apply #'make-instance class params)))
|
||||||
|
|
||||||
;;;; config base class
|
;;;; config base class
|
||||||
|
|
||||||
|
@ -76,8 +76,8 @@
|
||||||
(defmethod env-data ((cfg base))
|
(defmethod env-data ((cfg base))
|
||||||
(env-data (parent cfg)))
|
(env-data (parent cfg)))
|
||||||
|
|
||||||
(defun add (parent name &rest params
|
(defun add (name &rest params
|
||||||
&key (class 'base)
|
&key (class 'base) (parent *root*)
|
||||||
&allow-other-keys)
|
&allow-other-keys)
|
||||||
(apply #'make-instance class :parent parent :name name params))
|
(apply #'make-instance class :parent parent :name name params))
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
(in-package :scopes/test-core)
|
(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))
|
(config:add-action cfg '(:test) #'check-message))
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
(in-package :scopes/test-config)
|
(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*)
|
||||||
|
|
|
@ -2,9 +2,9 @@
|
||||||
|
|
||||||
(in-package :scopes/test-web)
|
(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
|
:class 'server:config
|
||||||
:port "8899"
|
:port "8899"
|
||||||
:routes
|
:routes
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
(() server:fileserver
|
(() server:fileserver
|
||||||
:doc-root ,(t:test-path "" "docs")))))))
|
:doc-root ,(t:test-path "" "docs")))))))
|
||||||
|
|
||||||
(let ((cfg (config:add *config* :client
|
(let ((cfg (config:add :client
|
||||||
:class 'client:config
|
:class 'client:config
|
||||||
:base-url "http://localhost:8899"
|
:base-url "http://localhost:8899"
|
||||||
:doc-path "/" :api-path "/api/"))))
|
:doc-path "/" :api-path "/api/"))))
|
||||||
|
|
|
@ -12,8 +12,6 @@
|
||||||
|
|
||||||
(in-package :scopes/test-config)
|
(in-package :scopes/test-config)
|
||||||
|
|
||||||
(defvar *config* nil)
|
|
||||||
|
|
||||||
(defclass test-config (config:root)
|
(defclass test-config (config:root)
|
||||||
((config:env-keys :initform '(:user :password))
|
((config:env-keys :initform '(:user :password))
|
||||||
(config:env-path :initform (t:test-path ".test.env"))))
|
(config:env-path :initform (t:test-path ".test.env"))))
|
||||||
|
@ -24,8 +22,7 @@
|
||||||
(password :accessor password :initarg :password)))
|
(password :accessor password :initarg :password)))
|
||||||
|
|
||||||
(defun run ()
|
(defun run ()
|
||||||
(let ((*config* nil)
|
(let ((t:*test-suite* (t:test-suite "config")))
|
||||||
(t:*test-suite* (t:test-suite "config")))
|
|
||||||
(setf (uiop:getenv "SCOPES_PASSWORD") "very_secret")
|
(setf (uiop:getenv "SCOPES_PASSWORD") "very_secret")
|
||||||
(load (t:test-path "config-dummy" "etc"))
|
(load (t:test-path "config-dummy" "etc"))
|
||||||
(test-make-path)
|
(test-make-path)
|
||||||
|
@ -38,8 +35,8 @@
|
||||||
(== (pathname-name (util:home-path ".env.txt" "lisp" "cl-scopes")) ".env"))
|
(== (pathname-name (util:home-path ".env.txt" "lisp" "cl-scopes")) ".env"))
|
||||||
|
|
||||||
(deftest test-env-override ()
|
(deftest test-env-override ()
|
||||||
(let ((data (config:env-data *config*))
|
(let ((data (config:env-data config:*root*))
|
||||||
(child (car (config:children *config*))))
|
(child (car (config:children config:*root*))))
|
||||||
(== (gethash :user data) "user-from-env-file")
|
(== (gethash :user data) "user-from-env-file")
|
||||||
(== (gethash :password data) "very_secret")
|
(== (gethash :password data) "very_secret")
|
||||||
(== (user child) "user-from-env-file")
|
(== (user child) "user-from-env-file")
|
||||||
|
|
|
@ -13,8 +13,6 @@
|
||||||
|
|
||||||
(in-package :scopes/test-core)
|
(in-package :scopes/test-core)
|
||||||
|
|
||||||
(defvar *config* nil)
|
|
||||||
|
|
||||||
;;;; core/testing: test-receiver
|
;;;; core/testing: test-receiver
|
||||||
|
|
||||||
(defclass test-receiver (core:context)
|
(defclass test-receiver (core:context)
|
||||||
|
@ -49,13 +47,12 @@
|
||||||
((receiver :accessor receiver :initarg :receiver)))
|
((receiver :accessor receiver :initarg :receiver)))
|
||||||
|
|
||||||
(defun run ()
|
(defun run ()
|
||||||
(let* ((*config* nil)
|
(let* ((t:*test-suite* (make-instance 'test-suite :name "core")))
|
||||||
(t:*test-suite* (make-instance 'test-suite :name "core")))
|
|
||||||
(log4cl:log-config :sane :daily (t:test-path "scopes-test.log" "log"))
|
(log4cl:log-config :sane :daily (t:test-path "scopes-test.log" "log"))
|
||||||
(load (t:test-path "config-core" "etc"))
|
(load (t:test-path "config-core" "etc"))
|
||||||
(unwind-protect
|
(unwind-protect
|
||||||
(progn
|
(progn
|
||||||
(core:setup-services *config*)
|
(core:setup-services config:*root*)
|
||||||
(setf (receiver t:*test-suite*) (core:find-service :test-receiver))
|
(setf (receiver t:*test-suite*) (core:find-service :test-receiver))
|
||||||
(test-send))
|
(test-send))
|
||||||
(core:shutdown)
|
(core:shutdown)
|
||||||
|
|
|
@ -13,15 +13,12 @@
|
||||||
|
|
||||||
(in-package :scopes/test-web)
|
(in-package :scopes/test-web)
|
||||||
|
|
||||||
(defvar *config* nil)
|
|
||||||
|
|
||||||
(defun run ()
|
(defun run ()
|
||||||
(let ((t:*test-suite* (t:test-suite "web"))
|
(let ((t:*test-suite* (t:test-suite "web")))
|
||||||
(*config* nil))
|
|
||||||
(load (t:test-path "config-web" "etc"))
|
(load (t:test-path "config-web" "etc"))
|
||||||
(unwind-protect
|
(unwind-protect
|
||||||
(progn
|
(progn
|
||||||
(core:setup-services *config*)
|
(core:setup-services config:*root*)
|
||||||
(let ((server (core:find-service :server))
|
(let ((server (core:find-service :server))
|
||||||
(client (core:find-service :client)))
|
(client (core:find-service :client)))
|
||||||
(test-server-config server)
|
(test-server-config server)
|
||||||
|
|
Loading…
Add table
Reference in a new issue