diff --git a/config.lisp b/config.lisp index 3140fc5..43c112b 100644 --- a/config.lisp +++ b/config.lisp @@ -4,7 +4,8 @@ (defpackage :scopes/config (:use :common-lisp) - (:export #:base #:make-system-path #:override-keys)) + (:export #:base + #:override-keys #:env-prefix #:env-path)) (in-package :scopes/config) @@ -15,6 +16,19 @@ (env-prefix :reader env-prefix :initarg :env-prefix :initform "SCOPES_") - (env-file :reader env-file - :initarg :env-file + (env-path :reader env-path + :initarg :env-path :initform nil))) + +(defmethod initialize-instance :after ((cfg base) &key &allow-other-keys) + (let* ((prefix (env-prefix cfg)) + (ep (env-path cfg)) + (dotenv-data (if ep (dotenv:read-env ep)))) + (print prefix) + (dolist (sl (override-keys cfg)) + (let ((key (concatenate 'string prefix (string sl)))) + (format t "~%key: ~s " key))))) + + +;(defun dummy (cfg) +; (uiop:getenv key)) diff --git a/scopes-core.asd b/scopes-core.asd index f168d81..ee19135 100644 --- a/scopes-core.asd +++ b/scopes-core.asd @@ -6,7 +6,7 @@ :version "0.0.1" :homepage "https://www.cyberconcepts.org" :description "Core packages of the scopes project." - :depends-on (:alexandria :com.inuoe.jzon :local-time :log4cl :str) + :depends-on (:alexandria :cl-dotenv :com.inuoe.jzon :local-time :log4cl :str) :components ((:file "config" :depends-on ("util")) (:file "forge/forge") (:file "util") diff --git a/test/test-config.lisp b/test/test-config.lisp index 9692c01..319c090 100644 --- a/test/test-config.lisp +++ b/test/test-config.lisp @@ -7,7 +7,7 @@ (:local-nicknames (:config :scopes/config) (:util :scopes/util) (:t :scopes/testing)) - (:export #:run) + (:export #:run #:user #:password) (:import-from :scopes/testing #:deftest #:==)) (in-package :scopes/test-config) @@ -16,8 +16,9 @@ (defclass test-config (config:base) ((config:override-keys :initform '(user password)) - (user :initarg :user :accessor user) - (password :initarg :password :accessor password))) + (config:env-path :initform (t:test-path ".test.env")) + (user :initarg :user :reader user) + (password :initarg :password :reader password))) (defun run () (let ((t:*test-suite* (t:test-suite "config"))) @@ -35,4 +36,5 @@ (t:deftest test-env-override () (format t "~&override-keys: ~s~%" (config:override-keys *config*)) + (format t "~&env-path ~s~%" (config:env-path *config*)) (== (user *config*) "default-user"))