-
-
Notifications
You must be signed in to change notification settings - Fork 4
/
envy.lisp
100 lines (79 loc) · 2.66 KB
/
envy.lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#|
This file is a part of Envy project.
Copyright (c) 2013 Eitarow Fukamachi (e.arrows@gmail.com)
|#
(in-package :cl-user)
(defpackage :envy.myapp.config
(:use :cl)
(:import-from :envy
:config-env-var
:defconfig))
(in-package :envy.myapp.config)
(setf (config-env-var) "APP_ENV")
(defconfig :common
`(:application-root #P"/path/to/application/"
:dynamic-config ,(let ((i 0)) (lambda () (incf i)))))
(defconfig |development|
'(:a 1
:b 2))
(defconfig |production|
'(:a 10
:b 200))
(defconfig |staging|
`(:a 0
:c 3000
,@|production|))
(in-package :cl-user)
(defpackage envy-test
(:use :cl
:envy
:cl-test-more)
(:import-from :osicat
:environment-variable
:makunbound-environment-variable))
(in-package :envy-test)
(plan 15)
(defparameter *env-var* "APP_ENV")
(defparameter *env-backup*
(environment-variable *env-var*))
(diag "unbound")
(osicat:makunbound-environment-variable *env-var*)
(is (getf (config :envy.myapp.config) :application-root) #P"/path/to/application/")
(is (getf (config :envy.myapp.config) :a) nil)
(diag "development")
(setf (environment-variable *env-var*) "development")
(is (getf (config :envy.myapp.config) :a) 1)
(is (getf (config :envy.myapp.config) :b) 2)
(is (getf (config :envy.myapp.config) :application-root)
#P"/path/to/application/"
"Has a common configuration")
(diag "production")
(setf (environment-variable *env-var*) "production")
(is (getf (config :envy.myapp.config) :a) 10)
(is (getf (config :envy.myapp.config) :b) 200)
(is (getf (config :envy.myapp.config) :application-root)
#P"/path/to/application/"
"Has a common configuration")
(diag "staging")
(setf (environment-variable *env-var*) "staging")
(is (getf (config :envy.myapp.config) :a) 0
"Can override a parent configuration")
(is (getf (config :envy.myapp.config) :c) 3000
"Can add another configuration")
(is (getf (config :envy.myapp.config) :application-root)
#P"/path/to/application/"
"Has a common configuration")
(diag "other environment variable")
(setf (environment-variable *env-var*) "test")
(is (getf (config :envy.myapp.config) :application-root) #P"/path/to/application/")
(is (getf (config :envy.myapp.config) :a) nil)
(diag "dynamic config")
(setf (environment-variable *env-var*) "development")
(is (config :envy.myapp.config :dynamic-config) 1
"Can return execution-time evaled configuration")
(is (config :envy.myapp.config :dynamic-config) 2
"Can return execution-time evaled configuration")
(finalize)
(if *env-backup*
(setf (environment-variable *env-var*) *env-backup*)
(makunbound-environment-variable *env-var*))