configa 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|