simplygenius-atmos 0.12.0 → 0.12.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/lib/simplygenius/atmos/config.rb +41 -26
- data/lib/simplygenius/atmos/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 184052156c0ecd551e93ad3a1cc212bc2132f5b77409348f1c0cedcb4740b353
|
4
|
+
data.tar.gz: 67b48fb4bb4f84a922ac2879bcd38273c552fa213983f2f2d461669f6eb06587
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3f3a38df1a9759746af1999bd3e8e0fe542ddb89092a557b81720f470e7e12b3ea13eb814aa64b36f906a7534a0a96537c421bdd707cd45513e363a2c8bf8388
|
7
|
+
data.tar.gz: e68a88d3b25b8f307fec0ada80eb5f6eb9f97fdb6da550dec70db58483001b769e86873410d0328677f53ee32e9f910b0521b55a1f0ccf327668af6ad22f7546
|
data/CHANGELOG.md
CHANGED
@@ -114,13 +114,14 @@ module SimplyGenius
|
|
114
114
|
|
115
115
|
if merge_to_existing
|
116
116
|
existing = load_file(user_config_file, SettingsHash.new)
|
117
|
-
data = config_merge(existing, data, ["saving #{user_config_file}"]
|
117
|
+
data = config_merge(existing, data, ["saving #{user_config_file}"])
|
118
|
+
data = finalize_merge(data)
|
118
119
|
end
|
119
120
|
File.write(user_config_file, YAML.dump(data.to_hash))
|
120
121
|
File.chmod(0600, user_config_file)
|
121
122
|
end
|
122
123
|
|
123
|
-
def config_merge(lhs, rhs, debug_state=[]
|
124
|
+
def config_merge(lhs, rhs, debug_state=[])
|
124
125
|
result = nil
|
125
126
|
|
126
127
|
return rhs if lhs.nil?
|
@@ -136,30 +137,22 @@ module SimplyGenius
|
|
136
137
|
rhs.each do |k, v|
|
137
138
|
new_state = debug_state + [k]
|
138
139
|
|
140
|
+
# The load sequence could have multiple overrides and its not
|
141
|
+
# obvious to the user which are lhs vs rhs, so rather than having
|
142
|
+
# one seem to win arbitrarily, we collect them all additively
|
143
|
+
# under their key, then at the end of the load process we push the
|
144
|
+
# override back as a replacement for its base key in the
|
145
|
+
# finalize_merge method. This means that if one has multiple
|
146
|
+
# overrides for the same key (not usually what one wants), those
|
147
|
+
# overrides get merged together additively before replacing the
|
148
|
+
# base. Thus the need for the log messages below.
|
149
|
+
#
|
139
150
|
if k =~ /^\^/
|
140
151
|
logger.debug { "Override seen at #{new_state.join(" -> ")}" }
|
141
152
|
logger.warn { "Multiple overrides on a single key seen at #{new_state.join(" -> ")}" } if result.has_key?(k)
|
142
153
|
end
|
143
154
|
|
144
|
-
result[k] = config_merge(result[k], v, new_state
|
145
|
-
end
|
146
|
-
|
147
|
-
# The load sequence could have multiple overrides and its not
|
148
|
-
# obvious to the user which are lhs vs rhs, so rather than having
|
149
|
-
# one seem to win arbitrarily, we collect them all additively under
|
150
|
-
# their key, then at the end of the load process we push the
|
151
|
-
# override back as a replacement for its base key.
|
152
|
-
# This means that if one has multiple overrides for the same key
|
153
|
-
# (not usually what one wants), those overrides get merged together
|
154
|
-
# additively before replacing the base. Thus the need for the debug
|
155
|
-
# log message above.
|
156
|
-
if finalize
|
157
|
-
result.each do |k, v|
|
158
|
-
if k =~ /^\^(.*)/
|
159
|
-
key = k.is_a?(Symbol) ? $1.to_sym : $1
|
160
|
-
result[key] = result.delete(k)
|
161
|
-
end
|
162
|
-
end
|
155
|
+
result[k] = config_merge(result[k], v, new_state)
|
163
156
|
end
|
164
157
|
|
165
158
|
when Enumerable
|
@@ -183,6 +176,27 @@ module SimplyGenius
|
|
183
176
|
|
184
177
|
private
|
185
178
|
|
179
|
+
def finalize_merge(config)
|
180
|
+
result = config.deep_dup
|
181
|
+
|
182
|
+
config.each do |k, v|
|
183
|
+
|
184
|
+
key = k
|
185
|
+
|
186
|
+
if k =~ /^\^(.*)/
|
187
|
+
key = k.is_a?(Symbol) ? $1.to_sym : $1
|
188
|
+
result[key] = result.delete(k)
|
189
|
+
end
|
190
|
+
|
191
|
+
if v.is_a?(Hash)
|
192
|
+
result[key] = finalize_merge(v)
|
193
|
+
end
|
194
|
+
|
195
|
+
end
|
196
|
+
|
197
|
+
return result
|
198
|
+
end
|
199
|
+
|
186
200
|
def load_remote_config_sources(config, *remote_sources)
|
187
201
|
remote_sources.each do |remote_source|
|
188
202
|
logger.debug("Loading remote atmos config file: #{remote_source}")
|
@@ -222,7 +236,7 @@ module SimplyGenius
|
|
222
236
|
|
223
237
|
begin
|
224
238
|
submap = config.deep_fetch(group, name)
|
225
|
-
config = config_merge(config, submap, ["#{submap_file} submap(#{group}.#{name})"]
|
239
|
+
config = config_merge(config, submap, ["#{submap_file} submap(#{group}.#{name})"])
|
226
240
|
rescue
|
227
241
|
logger.debug("No #{group} config found for '#{name}'")
|
228
242
|
end
|
@@ -245,7 +259,7 @@ module SimplyGenius
|
|
245
259
|
@user_config_file = @full_config.notation_get("atmos.user_config") || @user_config_file
|
246
260
|
@user_config_file = File.expand_path(@user_config_file)
|
247
261
|
user_config_file_data = load_file(@user_config_file)
|
248
|
-
temp_settings = create_settings(config_merge(@full_config, user_config_file_data, [@user_config_file]
|
262
|
+
temp_settings = create_settings(config_merge(@full_config, user_config_file_data, [@user_config_file]), finalize: true)
|
249
263
|
|
250
264
|
@full_config = load_config_sources(File.dirname(config_file), @full_config, *Array(temp_settings.notation_get("atmos.config_sources")))
|
251
265
|
@full_config = load_remote_config_sources(@full_config, *Array(temp_settings.notation_get("atmos.remote_config_sources")))
|
@@ -255,7 +269,7 @@ module SimplyGenius
|
|
255
269
|
@full_config = load_submap(File.dirname(config_file), 'providers', provider_name, @full_config)
|
256
270
|
@full_config = load_submap(File.dirname(config_file), 'environments', atmos_env, @full_config)
|
257
271
|
|
258
|
-
@full_config = config_merge(@full_config, user_config_file_data, [@user_config_file]
|
272
|
+
@full_config = config_merge(@full_config, user_config_file_data, [@user_config_file])
|
259
273
|
|
260
274
|
conf = create_settings(@full_config, finalize: true)
|
261
275
|
|
@@ -288,7 +302,7 @@ module SimplyGenius
|
|
288
302
|
data = SettingsHash.new(data)
|
289
303
|
data = block.call(data) if block
|
290
304
|
# if lhs has a override ^, then it loses it when rhs gets merged in, which breaks things for subsequent merges
|
291
|
-
config = config_merge(config, data, [location]
|
305
|
+
config = config_merge(config, data, [location])
|
292
306
|
@included_configs[location] = yml_string
|
293
307
|
end
|
294
308
|
|
@@ -303,7 +317,8 @@ module SimplyGenius
|
|
303
317
|
}
|
304
318
|
|
305
319
|
global = SettingsHash.new(config.reject {|k, v| ['providers', 'environments'].include?(k) })
|
306
|
-
conf = config_merge(global, builtins, ["builtins"]
|
320
|
+
conf = config_merge(global, builtins, ["builtins"])
|
321
|
+
conf = finalize_merge(conf) if finalize
|
307
322
|
|
308
323
|
conf.error_resolver = ->(statement) { find_config_error(statement) }
|
309
324
|
conf.enable_expansion = true
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simplygenius-atmos
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.12.
|
4
|
+
version: 0.12.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Conway
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-10-
|
11
|
+
date: 2020-10-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|