conf_loader 1.0.0 → 2.0.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2064ef2962ea950a910ed91b16ed6eeb56d7d7fe
4
- data.tar.gz: fd311e0300ab0ffda09ac077a55bcf34943e36da
3
+ metadata.gz: 0faf9108d7e238f50b273199aaffa4170995a137
4
+ data.tar.gz: 19433f3f3b1595f0f1f1ed2f1c05bb8b381ff9de
5
5
  SHA512:
6
- metadata.gz: 2779d36c5c7e8cd49520eaf8e45e7bd31f78d61611c52588ddf0918d9e57f0b3837da8c4d83c7108f721866da93331a4d404d75d2e3d22e9b430044a6cd3db68
7
- data.tar.gz: 755c887c78d21691415198cf8a6a6f81f0200dd4f45b33d4a4b7e92d62231eae1d5189f3a064ba7009c83e49ec188d666207b67d253ed31741e1a4d93435c528
6
+ metadata.gz: 8598f2926e6902f67cf6b9e4332cb1d90d7246dea1d64ed81257290223473cc25af0128314b846322f80b379016b06b752760bd5656936e5a37d8ac0e0edc50c
7
+ data.tar.gz: 9f2b2b29c155fd56514fdb7a113794f6cd60e3d3f37501439fdbb5e55a042b2fe793018cc1e33091d9478a42e4ba146c2003cda97d16ec7ef15541c1fcd46220
@@ -1,3 +1,3 @@
1
1
  class ConfLoader
2
- VERSION = '1.0.0'
2
+ VERSION = '2.0.0'
3
3
  end
data/lib/conf_loader.rb CHANGED
@@ -6,6 +6,7 @@ require 'erb'
6
6
  #
7
7
  class ConfLoader
8
8
  EnvironmentNotFoundError = Class.new(KeyError)
9
+ ValueNotDefinedError = Class.new(KeyError)
9
10
 
10
11
  # Load given conf file
11
12
  #
@@ -24,13 +25,19 @@ class ConfLoader
24
25
 
25
26
  if environments.has_key?(env)
26
27
  hash = environments[env]
27
- guarantee_key_presence(Symbolizer.symbolize(hash))
28
+
29
+ check_value_presence(
30
+ guarantee_key_presence(Symbolizer.symbolize(hash))
31
+ )
28
32
  else
29
33
  raise EnvironmentNotFoundError,
30
34
  "Configuration for `#{env}` not found at path #{path}"
31
35
  end
32
36
  end
33
37
 
38
+
39
+ private_class_method
40
+
34
41
  def self.guarantee_key_presence(hash)
35
42
  hash.default_proc = proc do |h, k|
36
43
  raise KeyError, "#{k} not defined"
@@ -38,5 +45,26 @@ class ConfLoader
38
45
  hash
39
46
  end
40
47
 
41
- private_class_method :guarantee_key_presence
48
+ def self.check_value_presence(hash)
49
+ errors = check_values_not_empty(hash)
50
+ if errors.empty?
51
+ hash
52
+ else
53
+ raise ValueNotDefinedError, errors.join(', ')
54
+ end
55
+ end
56
+
57
+ def self.check_values_not_empty(hash)
58
+ hash.inject([]) do |acc, (key, value)|
59
+ errors =
60
+ if value.is_a?(Hash)
61
+ check_values_not_empty(value)
62
+ elsif value.to_s.empty?
63
+ ["#{key} value not defined"]
64
+ else
65
+ []
66
+ end
67
+ acc + errors
68
+ end
69
+ end
42
70
  end
@@ -9,4 +9,9 @@ production:
9
9
  flexible:
10
10
  foo: <%= ENV['FOO'] %>
11
11
  var_with_default_not_in_env: <%= ENV['SOME_VAR_NOT_IN_ENV'] || 'default_value' %>
12
- var_with_default_in_env: <%= ENV['FOO'] || 'default_value' %>
12
+ var_with_default_in_env: <%= ENV['FOO'] || 'default_value' %>
13
+
14
+ invalid:
15
+ empty_value: ''
16
+ nested_field:
17
+ nested_empty_value: ''
@@ -58,4 +58,14 @@ describe ConfLoader do
58
58
  end
59
59
  end
60
60
 
61
+ context 'with empty config value' do
62
+ let(:conf) { described_class.load(path, 'invalid') }
63
+
64
+ it 'raises ValueNotDefinedError' do
65
+ expect{conf}.to raise_error(
66
+ described_class::ValueNotDefinedError,
67
+ 'empty_value value not defined, nested_empty_value value not defined'
68
+ )
69
+ end
70
+ end
61
71
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: conf_loader
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Indrek Juhkam
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-14 00:00:00.000000000 Z
11
+ date: 2017-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: symbolizer
@@ -66,7 +66,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
66
66
  version: '0'
67
67
  requirements: []
68
68
  rubyforge_project:
69
- rubygems_version: 2.5.1
69
+ rubygems_version: 2.6.7
70
70
  signing_key:
71
71
  specification_version: 4
72
72
  summary: Helps to load conf files in SaleMove ecosystem