fedux_org-stdlib 0.8.7 → 0.8.8
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/Gemfile.lock +1 -1
- data/lib/fedux_org_stdlib/app_config.rb +60 -31
- data/lib/fedux_org_stdlib/version.rb +1 -1
- data/spec/app_config_spec.rb +75 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f506723ed12d859cf1a77d2691967d7cf2ac3320
|
4
|
+
data.tar.gz: 3863d6a9ddcef3d63f17193fa42f1cfbe66e0656
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c2861db382e28f365b9fc89a962efe35156389f462e83366536a82b24f22fe0164b7b84129c439f5ffe55c8f39e70338b90d35b20298286216a44988dd2f4f80
|
7
|
+
data.tar.gz: ba38b5cec4597945b9e6a40b1161d23c7acd03bd9ee19abb4c5cd79fe36579587af2da78a07515285e809a0ded8224352fab6d09cd643e354fced56fde1693e7
|
data/Gemfile.lock
CHANGED
@@ -180,42 +180,35 @@ module FeduxOrgStdlib
|
|
180
180
|
# The config instance. If the resulting data structure created by the
|
181
181
|
# config_engine does not respond to `:[]` an empty config object will be
|
182
182
|
# created.
|
183
|
+
|
184
|
+
attr_reader :file, :logger, :config_engine, :check_unknown_options, :working_directory
|
185
|
+
|
183
186
|
def initialize(
|
184
|
-
file:
|
187
|
+
file: nil,
|
185
188
|
config_engine: Psych,
|
186
189
|
logger: FeduxOrgStdlib::Logging::Logger.new,
|
187
|
-
check_unknown_options: true
|
190
|
+
check_unknown_options: true,
|
191
|
+
working_directory: Dir.getwd
|
188
192
|
)
|
189
|
-
@logger
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
begin
|
199
|
-
yaml = config_engine.safe_load(File.read(file), [Symbol])
|
200
|
-
rescue StandardError => e
|
201
|
-
raise Exceptions::ConfigFileNotReadable, JSON.dump(message: e.message, file: file)
|
202
|
-
end
|
203
|
-
|
204
|
-
if yaml.blank?
|
205
|
-
@__config = {}
|
206
|
-
elsif yaml.is_a? Hash
|
207
|
-
yaml = yaml.deep_symbolize_keys
|
208
|
-
|
209
|
-
yaml_withknown_options = yaml.deep_symbolize_keys.slice(*known_options)
|
210
|
-
unknown_options = yaml.keys - yaml_withknown_options.keys
|
193
|
+
@logger = logger
|
194
|
+
@file = file
|
195
|
+
@config_engine = config_engine
|
196
|
+
@check_unknown_options = check_unknown_options
|
197
|
+
@working_directory = working_directory
|
198
|
+
|
199
|
+
detect_file unless @file
|
200
|
+
load_config
|
201
|
+
end
|
211
202
|
|
212
|
-
|
203
|
+
# Reload from already found config file
|
204
|
+
def reload
|
205
|
+
load_config
|
206
|
+
end
|
213
207
|
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
end
|
208
|
+
# Redected configuration file and reload config afterwards
|
209
|
+
def redetect
|
210
|
+
detect_file
|
211
|
+
load_config
|
219
212
|
end
|
220
213
|
|
221
214
|
# Show known options for configuration
|
@@ -268,6 +261,42 @@ module FeduxOrgStdlib
|
|
268
261
|
|
269
262
|
private
|
270
263
|
|
264
|
+
def detect_file
|
265
|
+
@file = _available_config_file
|
266
|
+
end
|
267
|
+
|
268
|
+
def load_config
|
269
|
+
unless file
|
270
|
+
logger.debug "No configuration file found at #{_allowed_config_file_paths.to_list}, therefor I'm going to use an empty config object instead."
|
271
|
+
@__config = {}
|
272
|
+
|
273
|
+
return
|
274
|
+
end
|
275
|
+
|
276
|
+
begin
|
277
|
+
yaml = config_engine.safe_load(File.read(file), [Symbol])
|
278
|
+
rescue StandardError => e
|
279
|
+
raise Exceptions::ConfigFileNotReadable, JSON.dump(message: e.message, file: file)
|
280
|
+
end
|
281
|
+
|
282
|
+
if yaml.blank?
|
283
|
+
@__config = {}
|
284
|
+
elsif yaml.is_a? Hash
|
285
|
+
yaml = yaml.deep_symbolize_keys
|
286
|
+
|
287
|
+
yaml_withknown_options = yaml.deep_symbolize_keys.slice(*known_options)
|
288
|
+
unknown_options = yaml.keys - yaml_withknown_options.keys
|
289
|
+
|
290
|
+
logger.warn "Unknown config options #{(unknown_options).to_list} in config file #{file} detected. Please define them in your config class or remove the entries in your config file or disable check via `check_unknown_options: false` to get rid of this warning." unless unknown_options.blank? && check_unknown_options == true
|
291
|
+
|
292
|
+
@__config = Hash(yaml_withknown_options)
|
293
|
+
else
|
294
|
+
logger.warn "There seems to be a problem transforming config file \"#{file}\" to a hash, therefor I will use an empty config object."
|
295
|
+
@__config = {}
|
296
|
+
end
|
297
|
+
end
|
298
|
+
|
299
|
+
|
271
300
|
# The name of the config file
|
272
301
|
#
|
273
302
|
# @return [String]
|
@@ -334,7 +363,7 @@ module FeduxOrgStdlib
|
|
334
363
|
::File.expand_path(::File.join('~', format('.%s', _config_file))),
|
335
364
|
::File.expand_path(::File.join('~', format('.%src', _config_name))),
|
336
365
|
::File.expand_path(::File.join('/etc', _application_name, _config_file)),
|
337
|
-
|
366
|
+
::File.expand_path(::File.join(working_directory, _config_file))
|
338
367
|
]
|
339
368
|
end
|
340
369
|
|
data/spec/app_config_spec.rb
CHANGED
@@ -395,6 +395,81 @@ RSpec.describe AppConfig do
|
|
395
395
|
end
|
396
396
|
end
|
397
397
|
|
398
|
+
context '#reload' do
|
399
|
+
it 're-reads it' do
|
400
|
+
config_klass = Class.new(AppConfig) do
|
401
|
+
option :opt1, 'test1'
|
402
|
+
|
403
|
+
def _class_name
|
404
|
+
'TestConfig'
|
405
|
+
end
|
406
|
+
|
407
|
+
def _module_name
|
408
|
+
'MyApplication'
|
409
|
+
end
|
410
|
+
end
|
411
|
+
|
412
|
+
write_file 'tests.yaml', <<-EOS.strip_heredoc
|
413
|
+
---
|
414
|
+
opt1: test2
|
415
|
+
EOS
|
416
|
+
|
417
|
+
config = in_current_dir do
|
418
|
+
config_klass.new
|
419
|
+
end
|
420
|
+
|
421
|
+
expect(config.opt1).to eq 'test2'
|
422
|
+
|
423
|
+
write_file 'tests.yaml', <<-EOS.strip_heredoc
|
424
|
+
---
|
425
|
+
opt1: test3
|
426
|
+
EOS
|
427
|
+
|
428
|
+
config.reload
|
429
|
+
|
430
|
+
expect(config.opt1).to eq 'test3'
|
431
|
+
end
|
432
|
+
end
|
433
|
+
|
434
|
+
context '#redetect' do
|
435
|
+
it 'looks for config file again and re-reads it' do
|
436
|
+
config_klass = Class.new(AppConfig) do
|
437
|
+
option :opt1, 'test1'
|
438
|
+
|
439
|
+
def _class_name
|
440
|
+
'TestConfig'
|
441
|
+
end
|
442
|
+
|
443
|
+
def _module_name
|
444
|
+
'MyApplication'
|
445
|
+
end
|
446
|
+
end
|
447
|
+
|
448
|
+
with_env 'HOME' => absolute_path('.') do
|
449
|
+
write_file 'tests.yaml', <<-EOS.strip_heredoc
|
450
|
+
---
|
451
|
+
opt1: test2
|
452
|
+
EOS
|
453
|
+
|
454
|
+
config = in_current_dir do
|
455
|
+
config_klass.new
|
456
|
+
end
|
457
|
+
|
458
|
+
expect(config.opt1).to eq 'test2'
|
459
|
+
|
460
|
+
write_file '~/.config/my_application/tests.yaml', <<-EOS.strip_heredoc
|
461
|
+
---
|
462
|
+
opt1: test3
|
463
|
+
EOS
|
464
|
+
|
465
|
+
config.redetect
|
466
|
+
|
467
|
+
expect(config.opt1).to eq 'test3'
|
468
|
+
end
|
469
|
+
end
|
470
|
+
|
471
|
+
end
|
472
|
+
|
398
473
|
context '#known_options' do
|
399
474
|
it 'outputs a list of known options' do
|
400
475
|
with_env 'HOME' => absolute_path('.') do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fedux_org-stdlib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Max Meyer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|