configa 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +24 -0
- data/lib/configa.rb +16 -8
- data/lib/configa/version.rb +1 -1
- data/spec/config.yml +12 -1
- data/spec/configa/configa_spec.rb +5 -0
- metadata +1 -1
data/README.md
CHANGED
@@ -132,9 +132,33 @@ config.videos.tarantool.space
|
|
132
132
|
#=> 1
|
133
133
|
config.videos.tarantool.type
|
134
134
|
#=> :em
|
135
|
+
```
|
136
|
+
|
137
|
+
All properties that defined higher in the tree will rewrite root properties:
|
138
|
+
|
139
|
+
```yaml
|
140
|
+
database:
|
141
|
+
adapter: sqlite
|
142
|
+
user: root
|
135
143
|
|
144
|
+
development:
|
145
|
+
database:
|
146
|
+
db: dev_sqlite
|
147
|
+
|
148
|
+
staging:
|
149
|
+
database:
|
150
|
+
adapter: mysql
|
151
|
+
internal_servers:
|
152
|
+
database:
|
153
|
+
db: internal_db
|
154
|
+
external_servers:
|
155
|
+
database:
|
156
|
+
db: external_db
|
157
|
+
user: external_root
|
136
158
|
```
|
137
159
|
|
160
|
+
So you can see how for whole staging node we rewrite database adapter, then for each subnode we specify other properties.
|
161
|
+
|
138
162
|
## Contributing
|
139
163
|
|
140
164
|
1. Fork it
|
data/lib/configa.rb
CHANGED
@@ -18,6 +18,10 @@ module Configa
|
|
18
18
|
parser
|
19
19
|
end
|
20
20
|
|
21
|
+
def to_s
|
22
|
+
@yaml
|
23
|
+
end
|
24
|
+
|
21
25
|
def parser(env=nil)
|
22
26
|
env ||= @base_env
|
23
27
|
env = env.to_s
|
@@ -40,24 +44,28 @@ module Configa
|
|
40
44
|
base = ymls.delete(@base_env)
|
41
45
|
yaml = base
|
42
46
|
ymls.each do |env, data|
|
43
|
-
yaml[env] =
|
47
|
+
yaml[env] = data
|
44
48
|
end
|
45
49
|
yaml = merge_yaml(yaml)
|
46
|
-
ymls.each do |env, data|
|
47
|
-
yaml[env] = merge_yaml(yaml[env])
|
48
|
-
end
|
49
50
|
yaml
|
50
51
|
end
|
51
52
|
|
52
|
-
|
53
|
-
|
53
|
+
# Tree traverse
|
54
|
+
def merge_yaml(yaml, cache={})
|
55
|
+
cache = cache.dup
|
56
|
+
yaml.each do |k,v|
|
57
|
+
next unless Hash === v
|
58
|
+
cache[k] ||= {}
|
59
|
+
cache[k] = cache[k].merge v if cache[k] != v
|
60
|
+
end
|
54
61
|
yaml.each do |k,v|
|
55
62
|
next unless Hash === v
|
56
63
|
v.each do |key, data|
|
57
|
-
if
|
58
|
-
yaml[k][key] =
|
64
|
+
if cache[key]
|
65
|
+
yaml[k][key] = cache[key].merge data if cache[key] != data
|
59
66
|
end
|
60
67
|
end
|
68
|
+
yaml[k] = merge_yaml(yaml[k], cache)
|
61
69
|
end
|
62
70
|
yaml
|
63
71
|
end
|
data/lib/configa/version.rb
CHANGED
data/spec/config.yml
CHANGED
@@ -16,4 +16,15 @@ production:
|
|
16
16
|
mysql:
|
17
17
|
database: mysql_prod
|
18
18
|
username: admin
|
19
|
-
password: strongone
|
19
|
+
password: strongone
|
20
|
+
|
21
|
+
staging:
|
22
|
+
prestaging:
|
23
|
+
mysql:
|
24
|
+
username: test
|
25
|
+
users:
|
26
|
+
mysql:
|
27
|
+
database: users
|
28
|
+
blogs:
|
29
|
+
mysql:
|
30
|
+
database: blogs
|
@@ -11,6 +11,11 @@ describe Configa do
|
|
11
11
|
dev = configa.instance_variable_get(:"@yaml")["development"]
|
12
12
|
dev["mysql"]["adapter"].must_equal mysql["adapter"]
|
13
13
|
dev["mysql"]["database"].must_equal "mysql_dev"
|
14
|
+
proc{ configa.staging.prestaging.mysql.database}.must_raise Configa::UnknownKey
|
15
|
+
configa.staging.prestaging.mysql.adapter.must_equal "mysql"
|
16
|
+
configa.staging.prestaging.users.mysql.adapter.must_equal "mysql"
|
17
|
+
configa.staging.prestaging.users.mysql.username.must_equal "test"
|
18
|
+
configa.staging.prestaging.users.mysql.database.must_equal "users"
|
14
19
|
end
|
15
20
|
|
16
21
|
it "basic test for multi file config" do
|