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
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+
3
+ # @api private
4
+ # @since 0.20.0
5
+ class Qonfig::Validation::Building::PredefinedBuilder
6
+ class << self
7
+ # @param name [String, Symbol]
8
+ # @param validation_logic [Proc]
9
+ # @param predefined_registry [Qonfig::Validation::Collections::PredefinedRegistry]
10
+ # @return [void]
11
+ #
12
+ # @api private
13
+ # @since 0.20.0
14
+ def build(name, validation_logic, predefined_registry)
15
+ new(name, validation_logic, predefined_registry).build
16
+ end
17
+ end
18
+
19
+ # @param name [String, Symbol]
20
+ # @param validation_logic [Proc]
21
+ # @param predefined_registry [Qonfig::Validation::Collections::PredefinedRegistry]
22
+ # @return [void]
23
+ #
24
+ # @api private
25
+ # @since 0.20.0
26
+ def initialize(name, validation_logic, predefined_registry)
27
+ @name = name
28
+ @validation_logic = validation_logic
29
+ @predefined_registry = predefined_registry
30
+ end
31
+
32
+ # @return [void]
33
+ #
34
+ # @api private
35
+ # @since 0.20.0
36
+ def build
37
+ validate_attributes!
38
+ predefine_validator
39
+ end
40
+
41
+ private
42
+
43
+ # @return [void]
44
+ #
45
+ # @raise [Qonfig::ValidatorArgumentError]
46
+ #
47
+ # @api private
48
+ # @since 0.20.0
49
+ def validate_attributes!
50
+ raise(
51
+ Qonfig::ValidatorArgumentError,
52
+ 'Validator name should be a type of string or symbol'
53
+ ) unless name.is_a?(String) || name.is_a?(Symbol)
54
+
55
+ raise(
56
+ Qonfig::ValidatorArgumentError,
57
+ 'Empty validation logic (block is not given)'
58
+ ) if validation_logic.nil? || !validation_logic.is_a?(Proc)
59
+ end
60
+
61
+ # @return [void]
62
+ #
63
+ # @api private
64
+ # @since 0.20.0
65
+ def predefine_validator
66
+ predefined_registry[name] = validation_logic
67
+ end
68
+
69
+ # @return [String]
70
+ #
71
+ # @api private
72
+ # @since 0.20.0
73
+ attr_reader :name
74
+
75
+ # @return [Proc]
76
+ #
77
+ # @api private
78
+ # @since 0.20.0
79
+ attr_reader :validation_logic
80
+
81
+ # @return [Qonfig::Validation::Collections::PredefinedRegistry]
82
+ #
83
+ # @api private
84
+ # @since 0.20.0
85
+ attr_reader :predefined_registry
86
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ # @api private
4
+ # @since 0.20.0
5
+ module Qonfig::Validation::Building
6
+ require_relative 'building/predefined_builder'
7
+ require_relative 'building/instance_builder'
8
+ end
@@ -1,32 +1,32 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # @api private
4
- # @since 0.13.0
5
- class Qonfig::Validator::Collection
4
+ # @since 0.20.0
5
+ class Qonfig::Validation::Collections::InstanceCollection
6
6
  # @api private
7
- # @since 0.13.0
7
+ # @since 0.20.0
8
8
  include Enumerable
9
9
 
10
- # @return [Array<Qonfig::Validator::MethodBased,Qonfig::Validator::ProcBased>]
10
+ # @return [Array<Qonfig::Validation::Validators::Base>]
11
11
  #
12
12
  # @api private
13
- # @since 0.13.0
13
+ # @since 0.20.0
14
14
  attr_reader :validators
15
15
 
16
16
  # @return [void]
17
17
  #
18
18
  # @api private
19
- # @since 0.13.0
19
+ # @since 0.20.0
20
20
  def initialize
21
21
  @validators = []
22
22
  @access_lock = Mutex.new
23
23
  end
24
24
 
25
- # @param validator [Qonfig::Validator::MethodBased, Qonfig::Validator::ProcBased]
25
+ # @param validator [Qonfig::Validation::Validators::Base]
26
26
  # @return [void]
27
27
  #
28
28
  # @api private
29
- # @since 0.13.0
29
+ # @since 0.20.0
30
30
  def add_validator(validator)
31
31
  thread_safe { validators << validator }
32
32
  end
@@ -36,27 +36,29 @@ class Qonfig::Validator::Collection
36
36
  # @return [Enumerable]
37
37
  #
38
38
  # @api private
39
- # @since 0.13.0
39
+ # @since 0.20.0
40
40
  def each(&block)
41
41
  thread_safe { block_given? ? validators.each(&block) : validators.each }
42
42
  end
43
43
 
44
- # @param collection [Qonfig::Validator::Collection]
44
+ # @param collection [Qonfig::Validation::Collections::InstanceCollection]
45
45
  # @return [void]
46
46
  #
47
47
  # @api private
48
- # @since 0.13.0
48
+ # @since 0.20.0
49
49
  def concat(collection)
50
50
  thread_safe { validators.concat(collection.validators) }
51
51
  end
52
52
 
53
- # @return [Qonfig::Validator::Collection]
53
+ # @return [Qonfig::Validation::Collections::InstanceCollection]
54
54
  #
55
55
  # @api private
56
- # @since 0.13.0
56
+ # @since 0.20.0
57
57
  def dup
58
58
  thread_safe do
59
- self.class.new.tap { |duplicate| duplicate.concat(self) }
59
+ Qonfig::Validation::Collections::InstanceCollection.new.tap do |duplicate|
60
+ duplicate.concat(self)
61
+ end
60
62
  end
61
63
  end
62
64
 
@@ -0,0 +1,145 @@
1
+ # frozen_string_literal: true
2
+
3
+ # @api private
4
+ # @since 0.20.0
5
+ class Qonfig::Validation::Collections::PredefinedRegistry
6
+ # @since 0.20.0
7
+ include Enumerable
8
+
9
+ # @return [void]
10
+ #
11
+ # @api private
12
+ # @since 0.20.0
13
+ def initialize
14
+ @validators = {}
15
+ @lock = Mutex.new
16
+ end
17
+
18
+ # @param predefined_registry [Qonfig::Validation::Collections::PredefinedRegistry]
19
+ # @return [void]
20
+ #
21
+ # @api private
22
+ # @since 0.20.0
23
+ def merge(predefined_registry)
24
+ thread_safe { concat(predefined_registry) }
25
+ end
26
+
27
+ # @param name [String, Symbol]
28
+ # @param validation [Proc]
29
+ # @return [void]
30
+ #
31
+ # @api private
32
+ # @since 0.20.0
33
+ def register(name, validation)
34
+ thread_safe { apply(name, validation) }
35
+ end
36
+ alias_method :[]=, :register
37
+
38
+ # @param name [String, Symbol]
39
+ # @return [Proc]
40
+ #
41
+ # @api private
42
+ # @since 0.20.0
43
+ def resolve(name)
44
+ thread_safe { fetch(name) }
45
+ end
46
+ alias_method :[], :resolve
47
+
48
+ # @return [Qonfig::Validation::Collection::PredefinedRegistry]
49
+ #
50
+ # @api private
51
+ # @since 0.20.0
52
+ def dup
53
+ thread_safe { duplicate }
54
+ end
55
+
56
+ # @param block [Block]
57
+ # @yield [validator_name, validation_logic]
58
+ # @yieldparam validator_name [String]
59
+ # @yieldparam validation_logic [Proc]
60
+ # @return [Enumerable]
61
+ #
62
+ # @api private
63
+ # @since 0.20.0
64
+ def each(&block)
65
+ thread_safe do
66
+ block_given? ? validators.each_pair(&block) : validators.each_pair
67
+ end
68
+ end
69
+
70
+ private
71
+
72
+ # @return [Hash<String,Proc>]
73
+ #
74
+ # @api private
75
+ # @since 0.20.0
76
+ attr_reader :validators
77
+
78
+ # @param name [String, Symbol]
79
+ # @return [String]
80
+ #
81
+ # @api private
82
+ # @since 0.20.0
83
+ def indifferently_accessable_name(name)
84
+ name.to_s
85
+ end
86
+
87
+ # @param name [String, Symbol]
88
+ # @param validation [Proc]
89
+ # @return [void]
90
+ #
91
+ # @api private
92
+ # @since 0.20.0
93
+ def apply(name, validation)
94
+ name = indifferently_accessable_name(name)
95
+ validators[name] = validation
96
+ end
97
+
98
+ # @param name [String, Symbol]
99
+ # @return [Proc]
100
+ #
101
+ # @raise [Qonfig::ValidatorNotFoundError]
102
+ #
103
+ # @api private
104
+ # @since 0.20.0
105
+ def fetch(name)
106
+ validators.fetch(indifferently_accessable_name(name))
107
+ rescue KeyError
108
+ raise(
109
+ Qonfig::ValidatorNotFoundError,
110
+ "Validator with name '#{name}' does not exist."
111
+ )
112
+ end
113
+
114
+ # @param predefined_registry [Qonfig::Validation::Collections::PredefinedRegistry]
115
+ # @return [void]
116
+ #
117
+ # @api private
118
+ # @since 0.20.0
119
+ def concat(predefined_registry)
120
+ predefined_registry.dup.each do |validator_name, validation_logic|
121
+ validators[validator_name] = validation_logic
122
+ end
123
+ end
124
+
125
+ # @return [Qonfig::Validation::Collections::PredefinedRegistry]
126
+ #
127
+ # @api private
128
+ # @since 0.20.0
129
+ def duplicate
130
+ Qonfig::Validation::Collections::PredefinedRegistry.new.tap do |registry|
131
+ validators.each_pair do |validator_name, validation_logic|
132
+ registry.register(validator_name, validation_logic)
133
+ end
134
+ end
135
+ end
136
+
137
+ # @param block [Proc]
138
+ # @return [Any]
139
+ #
140
+ # @api private
141
+ # @since 0.20.0
142
+ def thread_safe(&block)
143
+ @lock.synchronize(&block)
144
+ end
145
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ # @api private
4
+ # @since 0.20.0
5
+ module Qonfig::Validation::Collections
6
+ require_relative 'collections/predefined_registry'
7
+ require_relative 'collections/instance_collection'
8
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ # @api private
4
+ # @since 0.20.0
5
+ module Qonfig::Validation::PredefinitionMixin
6
+ # @param name [String, Symbol]
7
+ # @param validation_logic [Block]
8
+ # @return [void]
9
+ #
10
+ # @api private
11
+ # @since 0.20.0
12
+ def define_validator(name, &validation_logic)
13
+ Qonfig::DataSet.define_validator(name, &validation_logic)
14
+ end
15
+ end
@@ -1,18 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # @api private
4
- # @since 0.13.0
5
- class Qonfig::Validator::Basic
4
+ # @since 0.20.0
5
+ class Qonfig::Validation::Validators::Basic
6
6
  # @return [String, Symbol, NilClass]
7
7
  #
8
8
  # @api private
9
- # @since 0.13.0
9
+ # @since 0.20.0
10
10
  attr_reader :setting_key_matcher
11
11
 
12
12
  # @return [Boolean]
13
13
  #
14
14
  # @api private
15
- # @since 0.17.0
15
+ # @since 0.20.0
16
16
  attr_reader :strict
17
17
 
18
18
  # @param setting_key_matcher [Qonfig::Settings::KeyMatcher, NilClass]
@@ -20,7 +20,7 @@ class Qonfig::Validator::Basic
20
20
  # @return [void]
21
21
  #
22
22
  # @api private
23
- # @since 0.13.0
23
+ # @since 0.20.0
24
24
  def initialize(setting_key_matcher, strict)
25
25
  @setting_key_matcher = setting_key_matcher
26
26
  @strict = strict
@@ -30,7 +30,7 @@ class Qonfig::Validator::Basic
30
30
  # @return [Boolean]
31
31
  #
32
32
  # @api private
33
- # @since 0.13.0
33
+ # @since 0.20.0
34
34
  def validate(data_set)
35
35
  setting_key_provided? ? validate_concrete(data_set) : validate_full(data_set)
36
36
  end
@@ -40,7 +40,7 @@ class Qonfig::Validator::Basic
40
40
  # @return [Boolean]
41
41
  #
42
42
  # @api private
43
- # @since 0.13.0
43
+ # @since 0.20.0
44
44
  def setting_key_provided?
45
45
  !setting_key_matcher.nil?
46
46
  end
@@ -49,13 +49,13 @@ class Qonfig::Validator::Basic
49
49
  # @return [Any]
50
50
  #
51
51
  # @api private
52
- # @since 0.13.0
52
+ # @since 0.20.0
53
53
  def validate_full(data_set); end
54
54
 
55
55
  # @param data_set [Qonfig::DataSet]
56
56
  # @return [Any]
57
57
  #
58
58
  # @api private
59
- # @since 0.13.0
59
+ # @since 0.20.0
60
60
  def validate_concrete(data_set); end
61
61
  end
@@ -1,21 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # @api private
4
- # @since 0.13.0
5
- class Qonfig::Validator
6
- require_relative 'validator/basic'
7
- require_relative 'validator/method_based'
8
- require_relative 'validator/proc_based'
9
- require_relative 'validator/builder'
10
- require_relative 'validator/collection'
11
- require_relative 'validator/predefined'
12
- require_relative 'validator/dsl'
13
-
4
+ # @since 0.20.0
5
+ class Qonfig::Validation::Validators::Composite
14
6
  # @param data_set [Qonfig::DataSet]
15
7
  # @return [void]
16
8
  #
17
9
  # @api private
18
- # @since 0.13.0
10
+ # @since 0.20.0
19
11
  def initialize(data_set)
20
12
  @data_set = data_set
21
13
  @validators = data_set.class.validators.dup
@@ -24,7 +16,7 @@ class Qonfig::Validator
24
16
  # @return [void]
25
17
  #
26
18
  # @api private
27
- # @since 0.13.0
19
+ # @since 0.20.0
28
20
  def validate!
29
21
  validators.each do |validator|
30
22
  validator.validate(data_set)
@@ -34,7 +26,7 @@ class Qonfig::Validator
34
26
  # @return [Boolean]
35
27
  #
36
28
  # @api private
37
- # @since 0.13.0
29
+ # @since 0.20.0
38
30
  def valid?
39
31
  validate!
40
32
  true
@@ -47,12 +39,12 @@ class Qonfig::Validator
47
39
  # @return [Qonfig::DataSet]
48
40
  #
49
41
  # @api private
50
- # @since 0.13.0
42
+ # @since 0.20.0
51
43
  attr_reader :data_set
52
44
 
53
- # @return [Qonfig::Validator::Collection]
45
+ # @return [Qonfig::Validation::Collections::InstanceCollection]
54
46
  #
55
47
  # @api private
56
- # @since 0.13.0
48
+ # @since 0.20.0
57
49
  attr_reader :validators
58
50
  end
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # @api private
4
- # @since 0.13.0
5
- class Qonfig::Validator::MethodBased < Qonfig::Validator::Basic
4
+ # @since 0.20.0
5
+ class Qonfig::Validation::Validators::MethodBased < Qonfig::Validation::Validators::Basic
6
6
  # @return [Symbol, String]
7
7
  #
8
8
  # @api private
9
- # @since 0.13.0
9
+ # @since 0.20.0
10
10
  attr_reader :runtime_validation_method
11
11
 
12
12
  # @param setting_key_matcher [Qonfig::Settings::KeyMatcher, NilClass]
@@ -15,7 +15,7 @@ class Qonfig::Validator::MethodBased < Qonfig::Validator::Basic
15
15
  # @return [void]
16
16
  #
17
17
  # @api private
18
- # @since 0.13.0
18
+ # @since 0.20.0
19
19
  def initialize(setting_key_matcher, strict, runtime_validation_method)
20
20
  super(setting_key_matcher, strict)
21
21
  @runtime_validation_method = runtime_validation_method
@@ -25,7 +25,7 @@ class Qonfig::Validator::MethodBased < Qonfig::Validator::Basic
25
25
  # @return [Boolean]
26
26
  #
27
27
  # @api private
28
- # @since 0.13.0
28
+ # @since 0.20.0
29
29
  def validate_concrete(data_set)
30
30
  data_set.settings.__deep_each_setting__ do |setting_key, setting_value|
31
31
  next unless setting_key_matcher.match?(setting_key)
@@ -42,7 +42,7 @@ class Qonfig::Validator::MethodBased < Qonfig::Validator::Basic
42
42
  # @return [Boolean]
43
43
  #
44
44
  # @api private
45
- # @since 0.13.0
45
+ # @since 0.20.0
46
46
  def validate_full(data_set)
47
47
  unless data_set.__send__(runtime_validation_method)
48
48
  raise(Qonfig::ValidationError, 'Invalid config object')
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # @api private
4
- # @since 0.13.0
5
- class Qonfig::Validator::Predefined::Common < Qonfig::Validator::Basic
4
+ # @since 0.20.0
5
+ class Qonfig::Validation::Validators::Predefined < Qonfig::Validation::Validators::Basic
6
6
  # @return [Proc]
7
7
  #
8
8
  # @api private
9
- # @since 0.13.0
9
+ # @since 0.20.0
10
10
  attr_reader :validation
11
11
 
12
12
  # @param setting_key_matcher [Qonfig::Settings::KeyMatcher]
@@ -15,7 +15,7 @@ class Qonfig::Validator::Predefined::Common < Qonfig::Validator::Basic
15
15
  # @return [void]
16
16
  #
17
17
  # @api private
18
- # @since 0.13.0
18
+ # @since 0.20.0
19
19
  def initialize(setting_key_matcher, strict, validation)
20
20
  super(setting_key_matcher, strict)
21
21
  @validation = validation
@@ -27,7 +27,7 @@ class Qonfig::Validator::Predefined::Common < Qonfig::Validator::Basic
27
27
  # @raise [Qonfig::ValidationError]
28
28
  #
29
29
  # @api private
30
- # @since 0.13.0
30
+ # @since 0.20.0
31
31
  def validate_concrete(data_set)
32
32
  data_set.settings.__deep_each_setting__ do |setting_key, setting_value|
33
33
  next unless setting_key_matcher.match?(setting_key)
@@ -46,10 +46,10 @@ class Qonfig::Validator::Predefined::Common < Qonfig::Validator::Basic
46
46
  # @raise [Qonfig::ValidationError]
47
47
  #
48
48
  # @api private
49
- # @since 0.13.0
49
+ # @since 0.20.0
50
50
  def validate_full(data_set)
51
51
  # :nocov:
52
- raise Qonfig::Error, 'Predefined validator should be used only with a setting key'
52
+ raise Qonfig::Error, 'Predefined validator can be used with a setting key only'
53
53
  # :nocov:
54
54
  end
55
55
  end
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # @api private
4
- # @since 0.13.0
5
- class Qonfig::Validator::ProcBased < Qonfig::Validator::Basic
4
+ # @since 0.20.0
5
+ class Qonfig::Validation::Validators::ProcBased < Qonfig::Validation::Validators::Basic
6
6
  # @return [Proc]
7
7
  #
8
8
  # @api private
9
- # @since 0.13.0
9
+ # @since 0.20.0
10
10
  attr_reader :validation
11
11
 
12
12
  # @param setting_key_matcher [Qonfig::Settings::KeyMatcher, NilClass]
@@ -15,7 +15,7 @@ class Qonfig::Validator::ProcBased < Qonfig::Validator::Basic
15
15
  # @return [void]
16
16
  #
17
17
  # @api private
18
- # @since 0.13.0
18
+ # @since 0.20.0
19
19
  def initialize(setting_key_matcher, strict, validation)
20
20
  super(setting_key_matcher, strict)
21
21
  @validation = validation
@@ -27,7 +27,7 @@ class Qonfig::Validator::ProcBased < Qonfig::Validator::Basic
27
27
  # @raise [Qonfig::ValidationError]
28
28
  #
29
29
  # @api private
30
- # @since 0.13.0
30
+ # @since 0.20.0
31
31
  def validate_concrete(data_set)
32
32
  data_set.settings.__deep_each_setting__ do |setting_key, setting_value|
33
33
  next unless setting_key_matcher.match?(setting_key)
@@ -46,7 +46,7 @@ class Qonfig::Validator::ProcBased < Qonfig::Validator::Basic
46
46
  # @raise [Qonfig::ValidationError]
47
47
  #
48
48
  # @api private
49
- # @since 0.13.0
49
+ # @since 0.20.0
50
50
  def validate_full(data_set)
51
51
  unless data_set.instance_eval(&validation)
52
52
  raise(Qonfig::ValidationError, 'Invalid config object')
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ # @api private
4
+ # @since 0.20.0
5
+ module Qonfig::Validation::Validators
6
+ require_relative 'validators/basic'
7
+ require_relative 'validators/method_based'
8
+ require_relative 'validators/proc_based'
9
+ require_relative 'validators/predefined'
10
+ require_relative 'validators/composite'
11
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ # @api private
4
+ # @since 0.19.0
5
+ module Qonfig::Validation
6
+ require_relative 'validation/validators'
7
+ require_relative 'validation/collections'
8
+ require_relative 'validation/building'
9
+ require_relative 'validation/predefinition_mixin'
10
+ end
@@ -5,5 +5,5 @@ module Qonfig
5
5
  #
6
6
  # @api public
7
7
  # @since 0.1.0
8
- VERSION = '0.19.1'
8
+ VERSION = '0.20.0'
9
9
  end
data/lib/qonfig.rb CHANGED
@@ -10,7 +10,7 @@ module Qonfig
10
10
  require_relative 'qonfig/uploaders'
11
11
  require_relative 'qonfig/commands'
12
12
  require_relative 'qonfig/command_set'
13
- require_relative 'qonfig/validator'
13
+ require_relative 'qonfig/validation'
14
14
  require_relative 'qonfig/settings'
15
15
  require_relative 'qonfig/dsl'
16
16
  require_relative 'qonfig/data_set'
@@ -22,6 +22,39 @@ module Qonfig
22
22
  # @since 0.4.0
23
23
  extend Plugins::AccessMixin
24
24
 
25
+ # @api public
26
+ # @since 0.20.0
27
+ extend Validation::PredefinitionMixin
28
+
29
+ # @since 0.20.0
30
+ define_validator(:integer) { |value| value.is_a?(Integer) }
31
+ # @since 0.20.0
32
+ define_validator(:float) { |value| value.is_a?(Float) }
33
+ # @since 0.20.0
34
+ define_validator(:numeric) { |value| value.is_a?(Numeric) }
35
+ # @since 0.20.0
36
+ define_validator(:string) { |value| value.is_a?(String) }
37
+ # @since 0.20.0
38
+ define_validator(:symbol) { |value| value.is_a?(Symbol) }
39
+ # @since 0.20.0
40
+ define_validator(:text) { |value| value.is_a?(Symbol) || value.is_a?(String) }
41
+ # @since 0.20.0
42
+ define_validator(:array) { |value| value.is_a?(Array) }
43
+ # @since 0.20.0
44
+ define_validator(:hash) { |value| value.is_a?(Hash) }
45
+ # @since 0.20.0
46
+ define_validator(:big_decimal) { |value| value.is_a?(BigDecimal) }
47
+ # @since 0.20.0
48
+ define_validator(:boolean) { |value| value.is_a?(TrueClass) || value.is_a?(FalseClass) }
49
+ # @since 0.20.0
50
+ define_validator(:proc) { |value| value.is_a?(Proc) }
51
+ # @since 0.20.0
52
+ define_validator(:class) { |value| value.is_a?(Class) }
53
+ # @since 0.20.0
54
+ define_validator(:module) { |value| value.is_a?(Module) }
55
+ # @since 0.20.0
56
+ define_validator(:not_nil) { |value| !value.nil? }
57
+
25
58
  # @since 0.12.0
26
59
  register_plugin('toml', Qonfig::Plugins::TOML)
27
60
  # @since 0.19.0
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.76', '>= 0.76.0.3'
35
+ spec.add_development_dependency 'armitage-rubocop', '~> 0.77'
36
36
 
37
37
  spec.add_development_dependency 'bundler'
38
38
  spec.add_development_dependency 'rake'