qonfig 0.16.0 → 0.17.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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +5 -1
  3. data/.travis.yml +6 -6
  4. data/CHANGELOG.md +17 -0
  5. data/README.md +630 -49
  6. data/gemfiles/with_external_deps.gemfile +2 -2
  7. data/lib/qonfig/commands/{add_nested_option.rb → definition/add_nested_option.rb} +1 -1
  8. data/lib/qonfig/commands/{add_option.rb → definition/add_option.rb} +1 -1
  9. data/lib/qonfig/commands/{compose.rb → definition/compose.rb} +1 -1
  10. data/lib/qonfig/commands/{expose_json.rb → definition/expose_json.rb} +1 -1
  11. data/lib/qonfig/commands/{expose_self.rb → definition/expose_self.rb} +1 -1
  12. data/lib/qonfig/commands/{expose_yaml.rb → definition/expose_yaml.rb} +1 -1
  13. data/lib/qonfig/commands/definition/load_from_env/value_converter.rb +82 -0
  14. data/lib/qonfig/commands/{load_from_env.rb → definition/load_from_env.rb} +1 -1
  15. data/lib/qonfig/commands/{load_from_json.rb → definition/load_from_json.rb} +1 -1
  16. data/lib/qonfig/commands/{load_from_self.rb → definition/load_from_self.rb} +1 -1
  17. data/lib/qonfig/commands/{load_from_yaml.rb → definition/load_from_yaml.rb} +1 -1
  18. data/lib/qonfig/commands/definition.rb +16 -0
  19. data/lib/qonfig/commands/instantiation/values_file.rb +171 -0
  20. data/lib/qonfig/commands/instantiation.rb +7 -0
  21. data/lib/qonfig/commands.rb +2 -10
  22. data/lib/qonfig/data_set/lock.rb +61 -4
  23. data/lib/qonfig/data_set.rb +151 -3
  24. data/lib/qonfig/dsl.rb +56 -16
  25. data/lib/qonfig/errors.rb +38 -11
  26. data/lib/qonfig/loaders/dynamic.rb +52 -0
  27. data/lib/qonfig/loaders/json.rb +6 -0
  28. data/lib/qonfig/loaders/yaml.rb +13 -0
  29. data/lib/qonfig/loaders.rb +3 -0
  30. data/lib/qonfig/plugins/toml/data_set.rb +13 -0
  31. data/lib/qonfig/plugins/toml/dsl.rb +6 -2
  32. data/lib/qonfig/plugins/toml/errors.rb +12 -0
  33. data/lib/qonfig/plugins/toml/loaders/dynamic.rb +31 -0
  34. data/lib/qonfig/plugins/toml/loaders/toml.rb +6 -0
  35. data/lib/qonfig/plugins/toml.rb +2 -0
  36. data/lib/qonfig/settings/builder.rb +1 -1
  37. data/lib/qonfig/settings.rb +21 -0
  38. data/lib/qonfig/validator/basic.rb +9 -1
  39. data/lib/qonfig/validator/builder/attribute_consistency.rb +29 -0
  40. data/lib/qonfig/validator/builder.rb +39 -14
  41. data/lib/qonfig/validator/dsl.rb +9 -1
  42. data/lib/qonfig/validator/method_based.rb +4 -2
  43. data/lib/qonfig/validator/predefined/common.rb +4 -2
  44. data/lib/qonfig/validator/predefined/registry.rb +0 -2
  45. data/lib/qonfig/validator/predefined/registry_control_mixin.rb +3 -2
  46. data/lib/qonfig/validator/proc_based.rb +4 -2
  47. data/lib/qonfig/version.rb +1 -1
  48. data/qonfig.gemspec +1 -1
  49. metadata +21 -15
  50. data/lib/qonfig/commands/load_from_env/value_converter.rb +0 -84
@@ -272,6 +272,15 @@ class Qonfig::Settings # NOTE: Layout/ClassStructure is disabled only for CORE_M
272
272
  value.is_a?(Qonfig::Settings)
273
273
  end
274
274
 
275
+ # @param key_path [Array<Symbol, String>]
276
+ # @return [Boolean]
277
+ #
278
+ # @api private
279
+ # @since 0.17.0
280
+ def __has_key__(*key_path)
281
+ __lock__.thread_safe_access { __is_key_exists__(*key_path) }
282
+ end
283
+
275
284
  private
276
285
 
277
286
  # @return [Qonfig::Settings::Lock]
@@ -280,6 +289,18 @@ class Qonfig::Settings # NOTE: Layout/ClassStructure is disabled only for CORE_M
280
289
  # @since 0.2.0
281
290
  attr_reader :__lock__
282
291
 
292
+ # @param key_path [Array<String, Symbol>]
293
+ # @return [Boolean]
294
+ #
295
+ # @api private
296
+ # @since 0.17.0
297
+ def __is_key_exists__(*key_path)
298
+ __deep_access__(*key_path)
299
+ true
300
+ rescue Qonfig::UnknownSettingError
301
+ false
302
+ end
303
+
283
304
  # @param block [Proc]
284
305
  # @return [Enumerable]
285
306
  #
@@ -9,13 +9,21 @@ class Qonfig::Validator::Basic
9
9
  # @since 0.13.0
10
10
  attr_reader :setting_key_matcher
11
11
 
12
+ # @return [Boolean]
13
+ #
14
+ # @api private
15
+ # @since 0.17.0
16
+ attr_reader :strict
17
+
12
18
  # @param setting_key_matcher [Qonfig::Settings::KeyMatcher, NilClass]
19
+ # @param strict [Boolean]
13
20
  # @return [void]
14
21
  #
15
22
  # @api private
16
23
  # @since 0.13.0
17
- def initialize(setting_key_matcher)
24
+ def initialize(setting_key_matcher, strict)
18
25
  @setting_key_matcher = setting_key_matcher
26
+ @strict = strict
19
27
  end
20
28
 
21
29
  # @param data_set [Qonfig::DataSet]
@@ -2,11 +2,13 @@
2
2
 
3
3
  # @api private
4
4
  # @since 0.13.0
5
+ # rubocop:disable Metrics/ClassLength
5
6
  class Qonfig::Validator::Builder::AttributeConsistency
6
7
  class << self
7
8
  # @param setting_key_pattern [String, Symbol, NilClass]
8
9
  # @param predefined_validator [String, Symbol, NilClass]
9
10
  # @param runtime_validation_method [String, Symbol, NilClass]
11
+ # @param strict [Boolean]
10
12
  # @param validation_logic [Proc, NilClass]
11
13
  # @return [void]
12
14
  #
@@ -16,12 +18,14 @@ class Qonfig::Validator::Builder::AttributeConsistency
16
18
  setting_key_pattern,
17
19
  predefined_validator,
18
20
  runtime_validation_method,
21
+ strict,
19
22
  validation_logic
20
23
  )
21
24
  new(
22
25
  setting_key_pattern,
23
26
  predefined_validator,
24
27
  runtime_validation_method,
28
+ strict,
25
29
  validation_logic
26
30
  ).check!
27
31
  end
@@ -39,11 +43,13 @@ class Qonfig::Validator::Builder::AttributeConsistency
39
43
  setting_key_pattern,
40
44
  predefined_validator,
41
45
  runtime_validation_method,
46
+ strict,
42
47
  validation_logic
43
48
  )
44
49
  @setting_key_pattern = setting_key_pattern
45
50
  @predefined_validator = predefined_validator
46
51
  @runtime_validation_method = runtime_validation_method
52
+ @strict = strict
47
53
  @validation_logic = validation_logic
48
54
  end
49
55
 
@@ -54,6 +60,7 @@ class Qonfig::Validator::Builder::AttributeConsistency
54
60
  # @api private
55
61
  # @since 0.13.0
56
62
  def check!
63
+ consistent_strict_behaviour!
57
64
  consistent_method_choice!
58
65
  consistent_predefined_validator!
59
66
  cosnistent_runtime_validation_method!
@@ -81,6 +88,12 @@ class Qonfig::Validator::Builder::AttributeConsistency
81
88
  # @since 0.13.0
82
89
  attr_reader :runtime_validation_method
83
90
 
91
+ # @return [Boolean]
92
+ #
93
+ # @api private
94
+ # @since 0.17.0
95
+ attr_reader :strict
96
+
84
97
  # @return [Proc, NilClass]
85
98
  #
86
99
  # @api private
@@ -110,6 +123,21 @@ class Qonfig::Validator::Builder::AttributeConsistency
110
123
  end
111
124
  end
112
125
 
126
+ # @return [void]
127
+ #
128
+ # @raise [Qonfig::ValidatorArgumentError]
129
+ #
130
+ # @api private
131
+ # @since 0.17.0
132
+ def consistent_strict_behaviour!
133
+ unless strict.is_a?(TrueClass) || strict.is_a?(FalseClass)
134
+ raise(
135
+ Qonfig::ValidatorArgumentError,
136
+ ':strict should be a boolean'
137
+ )
138
+ end
139
+ end
140
+
113
141
  # @return [void]
114
142
  #
115
143
  # @raise [Qonfig::ValidatorArgumentError]
@@ -179,3 +207,4 @@ class Qonfig::Validator::Builder::AttributeConsistency
179
207
  )
180
208
  end
181
209
  end
210
+ # rubocop:enable Metrics/ClassLength
@@ -29,11 +29,18 @@ class Qonfig::Validator::Builder
29
29
  # @since 0.13.0
30
30
  NO_PREDEFINED_VALIDATOR = nil
31
31
 
32
+ # @return [Boolean]
33
+ #
34
+ # @api private
35
+ # @since 0.17.0
36
+ DEFAULT_STRICT_BEHAVIOUR = false
37
+
32
38
  class << self
33
39
  # @option setting_key_pattern [String, Symbol, NilClass]
34
40
  # @option predefined_validator [String, Symbol, NilClass]
35
41
  # @option runtime_validation_method [String, Symbol, NilClass]
36
42
  # @option validation_logic [Proc, NilClass]
43
+ # @option strict [Boolean]
37
44
  # @return [Qonfig::Validator::MethodBased, Qonfig::Validator::ProcBased]
38
45
  #
39
46
  # @api private
@@ -42,20 +49,23 @@ class Qonfig::Validator::Builder
42
49
  setting_key_pattern: EMPTY_SETTING_KEY_PATTERN,
43
50
  runtime_validation_method: NO_RUNTIME_VALIDATION_METHOD,
44
51
  validation_logic: NO_VALIDATION_LOGIC,
52
+ strict: DEFAULT_STRICT_BEHAVIOUR,
45
53
  predefined_validator: NO_PREDEFINED_VALIDATOR
46
54
  )
47
55
  new(
48
56
  setting_key_pattern,
49
57
  predefined_validator,
50
58
  runtime_validation_method,
59
+ strict,
51
60
  validation_logic
52
61
  ).build
53
62
  end
54
63
  end
55
64
 
56
65
  # @param setting_key_pattern [String, Symbol, NilClass]
57
- # @param predefined_validator [String, Symbol, NilClass]
66
+ # @param predefined_validator_name [String, Symbol, NilClass]
58
67
  # @param runtime_validation_method [String, Symbol, NilClass]
68
+ # @param strict [Boolean]
59
69
  # @param validation_logic [Proc, NilClass]
60
70
  # @return [void]
61
71
  #
@@ -63,13 +73,15 @@ class Qonfig::Validator::Builder
63
73
  # @since 0.13.0
64
74
  def initialize(
65
75
  setting_key_pattern,
66
- predefined_validator,
76
+ predefined_validator_name,
67
77
  runtime_validation_method,
78
+ strict,
68
79
  validation_logic
69
80
  )
70
81
  @setting_key_pattern = setting_key_pattern
71
- @predefined_validator = predefined_validator
82
+ @predefined_validator_name = predefined_validator_name
72
83
  @runtime_validation_method = runtime_validation_method
84
+ @strict = strict
73
85
  @validation_logic = validation_logic
74
86
  end
75
87
 
@@ -94,7 +106,7 @@ class Qonfig::Validator::Builder
94
106
  #
95
107
  # @api private
96
108
  # @since 0.13.0
97
- attr_reader :predefined_validator
109
+ attr_reader :predefined_validator_name
98
110
 
99
111
  # @return [String, Symbol, NilClass]
100
112
  #
@@ -102,6 +114,12 @@ class Qonfig::Validator::Builder
102
114
  # @since 0.13.0
103
115
  attr_reader :runtime_validation_method
104
116
 
117
+ # @return [Boolean]
118
+ #
119
+ # @api private
120
+ # @since 0.17.0
121
+ attr_reader :strict
122
+
105
123
  # @return [Proc, NilClass]
106
124
  #
107
125
  # @api private
@@ -117,8 +135,9 @@ class Qonfig::Validator::Builder
117
135
  def validate_attributes!
118
136
  AttributeConsistency.check!(
119
137
  setting_key_pattern,
120
- predefined_validator,
138
+ predefined_validator_name,
121
139
  runtime_validation_method,
140
+ strict,
122
141
  validation_logic
123
142
  )
124
143
  end
@@ -129,9 +148,9 @@ class Qonfig::Validator::Builder
129
148
  # @since 0.13.0
130
149
  def build_validator
131
150
  case
132
- when predefined_validator then build_predefined
133
- when runtime_validation_method then build_method_based
134
- when validation_logic then build_proc_based
151
+ when predefined_validator_name then build_predefined_validator
152
+ when runtime_validation_method then build_method_based_validator
153
+ when validation_logic then build_proc_based_validator
135
154
  end
136
155
  end
137
156
 
@@ -147,23 +166,29 @@ class Qonfig::Validator::Builder
147
166
  #
148
167
  # @api private
149
168
  # @since 0.13.0
150
- def build_method_based
151
- Qonfig::Validator::MethodBased.new(build_setting_key_matcher, runtime_validation_method)
169
+ def build_method_based_validator
170
+ Qonfig::Validator::MethodBased.new(
171
+ build_setting_key_matcher, strict, runtime_validation_method
172
+ )
152
173
  end
153
174
 
154
175
  # @return [Qonfig::Validator::ProcBased]
155
176
  #
156
177
  # @api private
157
178
  # @since 0.13.0
158
- def build_proc_based
159
- Qonfig::Validator::ProcBased.new(build_setting_key_matcher, validation_logic)
179
+ def build_proc_based_validator
180
+ Qonfig::Validator::ProcBased.new(
181
+ build_setting_key_matcher, strict, validation_logic
182
+ )
160
183
  end
161
184
 
162
185
  # @return [Qonfig::Settings::Predefined]
163
186
  #
164
187
  # @api private
165
188
  # @since 0.13.0
166
- def build_predefined
167
- Qonfig::Validator::Predefined.build(predefined_validator, build_setting_key_matcher)
189
+ def build_predefined_validator
190
+ Qonfig::Validator::Predefined.build(
191
+ predefined_validator_name, build_setting_key_matcher, strict
192
+ )
168
193
  end
169
194
  end
@@ -33,6 +33,7 @@ module Qonfig::Validator::DSL
33
33
  # @param setting_key_pattern [String, Symbol, NilClass]
34
34
  # @param predefined [String, Symbol]
35
35
  # @option by [String, Symbol, NilClass]
36
+ # @option stict [Boolean]
36
37
  # @param custom_validation [Proc]
37
38
  # @return [void]
38
39
  #
@@ -40,11 +41,18 @@ module Qonfig::Validator::DSL
40
41
  #
41
42
  # @api private
42
43
  # @since 0.13.0
43
- def validate(setting_key_pattern = nil, predefined = nil, by: nil, &custom_validation)
44
+ def validate(
45
+ setting_key_pattern = nil,
46
+ predefined = nil,
47
+ strict: false,
48
+ by: nil,
49
+ &custom_validation
50
+ )
44
51
  validators << Qonfig::Validator::Builder.build(
45
52
  setting_key_pattern: setting_key_pattern,
46
53
  predefined_validator: predefined,
47
54
  runtime_validation_method: by,
55
+ strict: strict,
48
56
  validation_logic: custom_validation
49
57
  )
50
58
  end
@@ -10,13 +10,14 @@ class Qonfig::Validator::MethodBased < Qonfig::Validator::Basic
10
10
  attr_reader :runtime_validation_method
11
11
 
12
12
  # @param setting_key_matcher [Qonfig::Settings::KeyMatcher, NilClass]
13
+ # @param strict [Boolean]
13
14
  # @param runtime_validation_method [String, Symbol]
14
15
  # @return [void]
15
16
  #
16
17
  # @api private
17
18
  # @since 0.13.0
18
- def initialize(setting_key_matcher, runtime_validation_method)
19
- super(setting_key_matcher)
19
+ def initialize(setting_key_matcher, strict, runtime_validation_method)
20
+ super(setting_key_matcher, strict)
20
21
  @runtime_validation_method = runtime_validation_method
21
22
  end
22
23
 
@@ -28,6 +29,7 @@ class Qonfig::Validator::MethodBased < Qonfig::Validator::Basic
28
29
  def validate_concrete(data_set)
29
30
  data_set.settings.__deep_each_setting__ do |setting_key, setting_value|
30
31
  next unless setting_key_matcher.match?(setting_key)
32
+ next if !strict && setting_value.nil?
31
33
 
32
34
  raise(
33
35
  Qonfig::ValidationError,
@@ -10,13 +10,14 @@ class Qonfig::Validator::Predefined::Common < Qonfig::Validator::Basic
10
10
  attr_reader :validation
11
11
 
12
12
  # @param setting_key_matcher [Qonfig::Settings::KeyMatcher]
13
+ # @param strict [Boolean]
13
14
  # @param validation [Proc]
14
15
  # @return [void]
15
16
  #
16
17
  # @api private
17
18
  # @since 0.13.0
18
- def initialize(setting_key_matcher, validation)
19
- super(setting_key_matcher)
19
+ def initialize(setting_key_matcher, strict, validation)
20
+ super(setting_key_matcher, strict)
20
21
  @validation = validation
21
22
  end
22
23
 
@@ -30,6 +31,7 @@ class Qonfig::Validator::Predefined::Common < Qonfig::Validator::Basic
30
31
  def validate_concrete(data_set)
31
32
  data_set.settings.__deep_each_setting__ do |setting_key, setting_value|
32
33
  next unless setting_key_matcher.match?(setting_key)
34
+ next if !strict && setting_value.nil?
33
35
 
34
36
  raise(
35
37
  Qonfig::ValidationError,
@@ -42,7 +42,6 @@ class Qonfig::Validator::Predefined::Registry
42
42
  # @since 0.13.0
43
43
  def resolve(name)
44
44
  thread_safe do
45
- # rubocop:disable Style/RedundantBegin
46
45
  begin
47
46
  validators.fetch(indifferently_accessable_name(name))
48
47
  rescue KeyError
@@ -51,7 +50,6 @@ class Qonfig::Validator::Predefined::Registry
51
50
  "Predefined validator with name '#{name}' does not exist."
52
51
  )
53
52
  end
54
- # rubocop:enable Style/RedundantBegin
55
53
  end
56
54
  end
57
55
 
@@ -32,12 +32,13 @@ module Qonfig::Validator::Predefined::RegistryControlMixin
32
32
 
33
33
  # @param name [String, Symbol]
34
34
  # @param setting_key_matcher [Qonfig::Setting::KeyMatcher]
35
+ # @param strict [Boolean]
35
36
  # @return [Qonfig::Validator::Predefined::Common]
36
37
  #
37
38
  # @api private
38
39
  # @since 0.13.0
39
- def build(name, setting_key_matcher)
40
+ def build(name, setting_key_matcher, strict)
40
41
  validation = registry.resolve(name)
41
- Qonfig::Validator::Predefined::Common.new(setting_key_matcher, validation)
42
+ Qonfig::Validator::Predefined::Common.new(setting_key_matcher, strict, validation)
42
43
  end
43
44
  end
@@ -10,13 +10,14 @@ class Qonfig::Validator::ProcBased < Qonfig::Validator::Basic
10
10
  attr_reader :validation
11
11
 
12
12
  # @param setting_key_matcher [Qonfig::Settings::KeyMatcher, NilClass]
13
+ # @param strict [Boolean]
13
14
  # @param vaidation [Proc]
14
15
  # @return [void]
15
16
  #
16
17
  # @api private
17
18
  # @since 0.13.0
18
- def initialize(setting_key_matcher, validation)
19
- super(setting_key_matcher)
19
+ def initialize(setting_key_matcher, strict, validation)
20
+ super(setting_key_matcher, strict)
20
21
  @validation = validation
21
22
  end
22
23
 
@@ -30,6 +31,7 @@ class Qonfig::Validator::ProcBased < Qonfig::Validator::Basic
30
31
  def validate_concrete(data_set)
31
32
  data_set.settings.__deep_each_setting__ do |setting_key, setting_value|
32
33
  next unless setting_key_matcher.match?(setting_key)
34
+ next if !strict && setting_value.nil?
33
35
 
34
36
  raise(
35
37
  Qonfig::ValidationError,
@@ -5,5 +5,5 @@ module Qonfig
5
5
  #
6
6
  # @api public
7
7
  # @since 0.1.0
8
- VERSION = '0.16.0'
8
+ VERSION = '0.17.0'
9
9
  end
data/qonfig.gemspec CHANGED
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec|
32
32
  spec.add_development_dependency 'coveralls', '~> 0.8'
33
33
  spec.add_development_dependency 'simplecov', '~> 0.16'
34
34
  spec.add_development_dependency 'rspec', '~> 3.8'
35
- spec.add_development_dependency 'armitage-rubocop', '~> 0.74'
35
+ spec.add_development_dependency 'armitage-rubocop', '~> 0.76'
36
36
 
37
37
  spec.add_development_dependency 'bundler'
38
38
  spec.add_development_dependency 'rake'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qonfig
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.0
4
+ version: 0.17.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rustam Ibragimov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-13 00:00:00.000000000 Z
11
+ date: 2019-10-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: coveralls
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0.74'
61
+ version: '0.76'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0.74'
68
+ version: '0.76'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: bundler
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -137,18 +137,21 @@ files:
137
137
  - lib/qonfig.rb
138
138
  - lib/qonfig/command_set.rb
139
139
  - lib/qonfig/commands.rb
140
- - lib/qonfig/commands/add_nested_option.rb
141
- - lib/qonfig/commands/add_option.rb
142
140
  - lib/qonfig/commands/base.rb
143
- - lib/qonfig/commands/compose.rb
144
- - lib/qonfig/commands/expose_json.rb
145
- - lib/qonfig/commands/expose_self.rb
146
- - lib/qonfig/commands/expose_yaml.rb
147
- - lib/qonfig/commands/load_from_env.rb
148
- - lib/qonfig/commands/load_from_env/value_converter.rb
149
- - lib/qonfig/commands/load_from_json.rb
150
- - lib/qonfig/commands/load_from_self.rb
151
- - lib/qonfig/commands/load_from_yaml.rb
141
+ - lib/qonfig/commands/definition.rb
142
+ - lib/qonfig/commands/definition/add_nested_option.rb
143
+ - lib/qonfig/commands/definition/add_option.rb
144
+ - lib/qonfig/commands/definition/compose.rb
145
+ - lib/qonfig/commands/definition/expose_json.rb
146
+ - lib/qonfig/commands/definition/expose_self.rb
147
+ - lib/qonfig/commands/definition/expose_yaml.rb
148
+ - lib/qonfig/commands/definition/load_from_env.rb
149
+ - lib/qonfig/commands/definition/load_from_env/value_converter.rb
150
+ - lib/qonfig/commands/definition/load_from_json.rb
151
+ - lib/qonfig/commands/definition/load_from_self.rb
152
+ - lib/qonfig/commands/definition/load_from_yaml.rb
153
+ - lib/qonfig/commands/instantiation.rb
154
+ - lib/qonfig/commands/instantiation/values_file.rb
152
155
  - lib/qonfig/configurable.rb
153
156
  - lib/qonfig/data_set.rb
154
157
  - lib/qonfig/data_set/class_builder.rb
@@ -157,6 +160,7 @@ files:
157
160
  - lib/qonfig/errors.rb
158
161
  - lib/qonfig/loaders.rb
159
162
  - lib/qonfig/loaders/basic.rb
163
+ - lib/qonfig/loaders/dynamic.rb
160
164
  - lib/qonfig/loaders/end_data.rb
161
165
  - lib/qonfig/loaders/json.rb
162
166
  - lib/qonfig/loaders/yaml.rb
@@ -169,7 +173,9 @@ files:
169
173
  - lib/qonfig/plugins/toml/commands/load_from_toml.rb
170
174
  - lib/qonfig/plugins/toml/data_set.rb
171
175
  - lib/qonfig/plugins/toml/dsl.rb
176
+ - lib/qonfig/plugins/toml/errors.rb
172
177
  - lib/qonfig/plugins/toml/loaders.rb
178
+ - lib/qonfig/plugins/toml/loaders/dynamic.rb
173
179
  - lib/qonfig/plugins/toml/loaders/toml.rb
174
180
  - lib/qonfig/plugins/toml/tomlrb_fixes.rb
175
181
  - lib/qonfig/plugins/toml/uploaders/toml.rb
@@ -1,84 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Qonfig
4
- # @api private
5
- # @since 0.2.0
6
- module Commands::LoadFromENV::ValueConverter
7
- # @return [Regexp]
8
- #
9
- # @api private
10
- # @since 0.2.0
11
- INTEGER_PATTERN = /\A\d+\z/.freeze
12
-
13
- # @return [Regexp]
14
- #
15
- # @api private
16
- # @since 0.2.0
17
- FLOAT_PATTERN = /\A\d+\.\d+\z/.freeze
18
-
19
- # @return [Regexp]
20
- #
21
- # @api private
22
- # @since 0.2.0
23
- TRUE_PATTERN = /\A(t|true)\z/i.freeze
24
-
25
- # @return [Regexp]
26
- #
27
- # @api private
28
- # @since 0.2.0
29
- FALSE_PATTERN = /\A(f|false)\z/i.freeze
30
-
31
- # @return [Regexp]
32
- #
33
- # @api private
34
- # @since 0.2.0
35
- ARRAY_PATTERN = /\A[^'"].*\s*,\s*.*[^'"]\z/.freeze
36
-
37
- # @return [Regexp]
38
- #
39
- # @api private
40
- # @since 0.2.0
41
- QUOTED_STRING_PATTERN = /\A['"].*['"]\z/.freeze
42
-
43
- class << self
44
- # @param env_data [Hash]
45
- # @return [void]
46
- #
47
- # @api private
48
- # @since 0.2.0
49
- def convert_values!(env_data)
50
- env_data.each_pair do |key, value|
51
- env_data[key] = convert_value(value)
52
- end
53
- end
54
-
55
- private
56
-
57
- # @param value [Object]
58
- # @return [Object]
59
- #
60
- # @api private
61
- # @since 0.2.0
62
- def convert_value(value)
63
- return value unless value.is_a?(String)
64
-
65
- case value
66
- when INTEGER_PATTERN
67
- Integer(value)
68
- when FLOAT_PATTERN
69
- Float(value)
70
- when TRUE_PATTERN
71
- true
72
- when FALSE_PATTERN
73
- false
74
- when ARRAY_PATTERN
75
- value.split(/\s*,\s*/).map(&method(:convert_value))
76
- when QUOTED_STRING_PATTERN
77
- value.gsub(/(\A['"]|['"]\z)/, '')
78
- else
79
- value
80
- end
81
- end
82
- end
83
- end
84
- end