conf_loader 1.0.0 → 2.0.0

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