qonfig 0.19.1 → 0.20.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 (37) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/README.md +168 -29
  4. data/lib/qonfig/commands/definition/re_define_option.rb +60 -0
  5. data/lib/qonfig/commands/definition.rb +1 -0
  6. data/lib/qonfig/data_set/class_builder.rb +2 -0
  7. data/lib/qonfig/data_set.rb +5 -5
  8. data/lib/qonfig/dsl.rb +101 -9
  9. data/lib/qonfig/errors.rb +14 -8
  10. data/lib/qonfig/plugins/toml/commands/{expose_toml.rb → definition/expose_toml.rb} +5 -1
  11. data/lib/qonfig/plugins/toml/commands/{load_from_toml.rb → definition/load_from_toml.rb} +5 -1
  12. data/lib/qonfig/plugins/toml/dsl.rb +8 -2
  13. data/lib/qonfig/plugins/toml.rb +2 -2
  14. data/lib/qonfig/settings.rb +4 -2
  15. data/lib/qonfig/{validator/builder → validation/building/instance_builder}/attribute_consistency.rb +14 -14
  16. data/lib/qonfig/{validator/builder.rb → validation/building/instance_builder.rb} +55 -30
  17. data/lib/qonfig/validation/building/predefined_builder.rb +86 -0
  18. data/lib/qonfig/validation/building.rb +8 -0
  19. data/lib/qonfig/{validator/collection.rb → validation/collections/instance_collection.rb} +16 -14
  20. data/lib/qonfig/validation/collections/predefined_registry.rb +145 -0
  21. data/lib/qonfig/validation/collections.rb +8 -0
  22. data/lib/qonfig/validation/predefinition_mixin.rb +15 -0
  23. data/lib/qonfig/{validator → validation/validators}/basic.rb +9 -9
  24. data/lib/qonfig/{validator.rb → validation/validators/composite.rb} +8 -16
  25. data/lib/qonfig/{validator → validation/validators}/method_based.rb +6 -6
  26. data/lib/qonfig/{validator/predefined/common.rb → validation/validators/predefined.rb} +7 -7
  27. data/lib/qonfig/{validator → validation/validators}/proc_based.rb +6 -6
  28. data/lib/qonfig/validation/validators.rb +11 -0
  29. data/lib/qonfig/validation.rb +10 -0
  30. data/lib/qonfig/version.rb +1 -1
  31. data/lib/qonfig.rb +34 -1
  32. data/qonfig.gemspec +1 -1
  33. metadata +23 -26
  34. data/lib/qonfig/validator/dsl.rb +0 -59
  35. data/lib/qonfig/validator/predefined/registry.rb +0 -81
  36. data/lib/qonfig/validator/predefined/registry_control_mixin.rb +0 -44
  37. data/lib/qonfig/validator/predefined.rb +0 -41
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.19.1
4
+ version: 0.20.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-11-29 00:00:00.000000000 Z
11
+ date: 2019-11-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: coveralls
@@ -58,20 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0.76'
62
- - - ">="
63
- - !ruby/object:Gem::Version
64
- version: 0.76.0.3
61
+ version: '0.77'
65
62
  type: :development
66
63
  prerelease: false
67
64
  version_requirements: !ruby/object:Gem::Requirement
68
65
  requirements:
69
66
  - - "~>"
70
67
  - !ruby/object:Gem::Version
71
- version: '0.76'
72
- - - ">="
73
- - !ruby/object:Gem::Version
74
- version: 0.76.0.3
68
+ version: '0.77'
75
69
  - !ruby/object:Gem::Dependency
76
70
  name: bundler
77
71
  requirement: !ruby/object:Gem::Requirement
@@ -156,6 +150,7 @@ files:
156
150
  - lib/qonfig/commands/definition/load_from_json.rb
157
151
  - lib/qonfig/commands/definition/load_from_self.rb
158
152
  - lib/qonfig/commands/definition/load_from_yaml.rb
153
+ - lib/qonfig/commands/definition/re_define_option.rb
159
154
  - lib/qonfig/commands/instantiation.rb
160
155
  - lib/qonfig/commands/instantiation/freeze_state.rb
161
156
  - lib/qonfig/commands/instantiation/values_file.rb
@@ -186,8 +181,8 @@ files:
186
181
  - lib/qonfig/plugins/pretty_print/mixin.rb
187
182
  - lib/qonfig/plugins/registry.rb
188
183
  - lib/qonfig/plugins/toml.rb
189
- - lib/qonfig/plugins/toml/commands/expose_toml.rb
190
- - lib/qonfig/plugins/toml/commands/load_from_toml.rb
184
+ - lib/qonfig/plugins/toml/commands/definition/expose_toml.rb
185
+ - lib/qonfig/plugins/toml/commands/definition/load_from_toml.rb
191
186
  - lib/qonfig/plugins/toml/data_set.rb
192
187
  - lib/qonfig/plugins/toml/dsl.rb
193
188
  - lib/qonfig/plugins/toml/errors.rb
@@ -207,18 +202,21 @@ files:
207
202
  - lib/qonfig/uploaders/file.rb
208
203
  - lib/qonfig/uploaders/json.rb
209
204
  - lib/qonfig/uploaders/yaml.rb
210
- - lib/qonfig/validator.rb
211
- - lib/qonfig/validator/basic.rb
212
- - lib/qonfig/validator/builder.rb
213
- - lib/qonfig/validator/builder/attribute_consistency.rb
214
- - lib/qonfig/validator/collection.rb
215
- - lib/qonfig/validator/dsl.rb
216
- - lib/qonfig/validator/method_based.rb
217
- - lib/qonfig/validator/predefined.rb
218
- - lib/qonfig/validator/predefined/common.rb
219
- - lib/qonfig/validator/predefined/registry.rb
220
- - lib/qonfig/validator/predefined/registry_control_mixin.rb
221
- - lib/qonfig/validator/proc_based.rb
205
+ - lib/qonfig/validation.rb
206
+ - lib/qonfig/validation/building.rb
207
+ - lib/qonfig/validation/building/instance_builder.rb
208
+ - lib/qonfig/validation/building/instance_builder/attribute_consistency.rb
209
+ - lib/qonfig/validation/building/predefined_builder.rb
210
+ - lib/qonfig/validation/collections.rb
211
+ - lib/qonfig/validation/collections/instance_collection.rb
212
+ - lib/qonfig/validation/collections/predefined_registry.rb
213
+ - lib/qonfig/validation/predefinition_mixin.rb
214
+ - lib/qonfig/validation/validators.rb
215
+ - lib/qonfig/validation/validators/basic.rb
216
+ - lib/qonfig/validation/validators/composite.rb
217
+ - lib/qonfig/validation/validators/method_based.rb
218
+ - lib/qonfig/validation/validators/predefined.rb
219
+ - lib/qonfig/validation/validators/proc_based.rb
222
220
  - lib/qonfig/version.rb
223
221
  - qonfig.gemspec
224
222
  homepage: https://github.com/0exp/qonfig
@@ -240,8 +238,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
240
238
  - !ruby/object:Gem::Version
241
239
  version: '0'
242
240
  requirements: []
243
- rubyforge_project:
244
- rubygems_version: 2.7.6
241
+ rubygems_version: 3.0.3
245
242
  signing_key:
246
243
  specification_version: 4
247
244
  summary: Config object
@@ -1,59 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # @api private
4
- # @since 0.13.0
5
- module Qonfig::Validator::DSL
6
- class << self
7
- # @param child_klass [Qonfig::DataSet]
8
- # @return [void]
9
- #
10
- # @api private
11
- # @since 0.13.0
12
- def extended(child_klass)
13
- child_klass.instance_variable_set(:@validators, Qonfig::Validator::Collection.new)
14
-
15
- child_klass.singleton_class.prepend(Module.new do
16
- def inherited(child_klass)
17
- child_klass.instance_variable_set(:@validators, Qonfig::Validator::Collection.new)
18
- child_klass.validators.concat(validators)
19
- super
20
- end
21
- end)
22
- end
23
- end
24
-
25
- # @return [Qonfig::Validator::Collection]
26
- #
27
- # @api private
28
- # @since 0.13.0
29
- def validators
30
- @validators
31
- end
32
-
33
- # @param setting_key_pattern [String, Symbol, NilClass]
34
- # @param predefined [String, Symbol]
35
- # @option by [String, Symbol, NilClass]
36
- # @option stict [Boolean]
37
- # @param custom_validation [Proc]
38
- # @return [void]
39
- #
40
- # @see Qonfig::Validator::Builder
41
- #
42
- # @api private
43
- # @since 0.13.0
44
- def validate(
45
- setting_key_pattern = nil,
46
- predefined = nil,
47
- strict: false,
48
- by: nil,
49
- &custom_validation
50
- )
51
- validators << Qonfig::Validator::Builder.build(
52
- setting_key_pattern: setting_key_pattern,
53
- predefined_validator: predefined,
54
- runtime_validation_method: by,
55
- strict: strict,
56
- validation_logic: custom_validation
57
- )
58
- end
59
- end
@@ -1,81 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # @api private
4
- # @since 0.13.0
5
- class Qonfig::Validator::Predefined::Registry
6
- # @return [void]
7
- #
8
- # @api private
9
- # @since 0.13.0
10
- def initialize
11
- @validators = {}
12
- @lock = Mutex.new
13
- end
14
-
15
- # @param name [String, Symbol]
16
- # @param validation [Proc]
17
- # @return [void]
18
- #
19
- # @raise [Qonfig::ValidatorArgumentError]
20
- #
21
- # @api private
22
- # @since 0.13.0
23
- def register(name, &validation)
24
- thread_safe do
25
- name = indifferently_accessable_name(name)
26
-
27
- raise(
28
- Qonfig::ValidatorArgumentError,
29
- "Predefined validator with name '#{name}' already exists."
30
- ) if validators.key?(name)
31
-
32
- validators[name] = validation
33
- end
34
- end
35
-
36
- # @param name [String, Symbol]
37
- # @return [Qonfig::Validator::ProcBased, Qonfig::Validator::MethodBased]
38
- #
39
- # @raise [Qonfig::ValidatorArgumentError]
40
- #
41
- # @api private
42
- # @since 0.13.0
43
- def resolve(name)
44
- thread_safe do
45
- begin
46
- validators.fetch(indifferently_accessable_name(name))
47
- rescue KeyError
48
- raise(
49
- Qonfig::ValidatorArgumentError,
50
- "Predefined validator with name '#{name}' does not exist."
51
- )
52
- end
53
- end
54
- end
55
-
56
- private
57
-
58
- # @return [Hash<String,Proc>]
59
- #
60
- # @api private
61
- # @since 0.13.0
62
- attr_reader :validators
63
-
64
- # @param name [String, Symbol]
65
- # @return [String]
66
- #
67
- # @api private
68
- # @since 0.13.0
69
- def indifferently_accessable_name(name)
70
- name.to_s
71
- end
72
-
73
- # @param block [Proc]
74
- # @return [Any]
75
- #
76
- # @api private
77
- # @since 0.13.0
78
- def thread_safe(&block)
79
- @lock.synchronize(&block)
80
- end
81
- end
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # @api private
4
- # @since 0.13.0
5
- module Qonfig::Validator::Predefined::RegistryControlMixin
6
- class << self
7
- # @param basic_klass [Class, Module]
8
- # @return [void]
9
- #
10
- # @api private
11
- # @since 0.13.0
12
- def extended(basic_klass)
13
- basic_klass.instance_variable_set(:@registry, Qonfig::Validator::Predefined::Registry.new)
14
- end
15
- end
16
-
17
- # @return [Qonfig::Validator::Predefined::Registry]
18
- #
19
- # @api private
20
- # @since 0.13.0
21
- attr_reader :registry
22
-
23
- # @param name [String, Symbol]
24
- # @param validation [Proc]
25
- # @return [void]
26
- #
27
- # @api private
28
- # @since 0.13.0
29
- def predefine(name, &validation)
30
- registry.register(name, &validation)
31
- end
32
-
33
- # @param name [String, Symbol]
34
- # @param setting_key_matcher [Qonfig::Setting::KeyMatcher]
35
- # @param strict [Boolean]
36
- # @return [Qonfig::Validator::Predefined::Common]
37
- #
38
- # @api private
39
- # @since 0.13.0
40
- def build(name, setting_key_matcher, strict)
41
- validation = registry.resolve(name)
42
- Qonfig::Validator::Predefined::Common.new(setting_key_matcher, strict, validation)
43
- end
44
- end
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # @api private
4
- # @since 0.13.0
5
- module Qonfig::Validator::Predefined
6
- require_relative 'predefined/common'
7
- require_relative 'predefined/registry'
8
- require_relative 'predefined/registry_control_mixin'
9
-
10
- # @since 0.13.0
11
- extend Qonfig::Validator::Predefined::RegistryControlMixin
12
-
13
- # @since 0.13.0
14
- predefine(:integer) { |value| value.is_a?(Integer) }
15
- # @since 0.13.0
16
- predefine(:float) { |value| value.is_a?(Float) }
17
- # @since 0.13.0
18
- predefine(:numeric) { |value| value.is_a?(Numeric) }
19
- # @since 0.13.0
20
- predefine(:string) { |value| value.is_a?(String) }
21
- # @since 0.13.0
22
- predefine(:symbol) { |value| value.is_a?(Symbol) }
23
- # @since 0.13.0
24
- predefine(:text) { |value| value.is_a?(Symbol) || value.is_a?(String) }
25
- # @since 0.13.0
26
- predefine(:array) { |value| value.is_a?(Array) }
27
- # @since 0.13.0
28
- predefine(:hash) { |value| value.is_a?(Hash) }
29
- # @since 0.13.0
30
- predefine(:big_decimal) { |value| value.is_a?(BigDecimal) }
31
- # @since 0.13.0
32
- predefine(:boolean) { |value| value.is_a?(TrueClass) || value.is_a?(FalseClass) }
33
- # @since 0.13.0
34
- predefine(:proc) { |value| value.is_a?(Proc) }
35
- # @since 0.13.0
36
- predefine(:class) { |value| value.is_a?(Class) }
37
- # @since 0.13.0
38
- predefine(:module) { |value| value.is_a?(Module) }
39
- # @since 0.13.0
40
- predefine(:not_nil) { |value| !value.nil? }
41
- end