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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +168 -29
- data/lib/qonfig/commands/definition/re_define_option.rb +60 -0
- data/lib/qonfig/commands/definition.rb +1 -0
- data/lib/qonfig/data_set/class_builder.rb +2 -0
- data/lib/qonfig/data_set.rb +5 -5
- data/lib/qonfig/dsl.rb +101 -9
- data/lib/qonfig/errors.rb +14 -8
- data/lib/qonfig/plugins/toml/commands/{expose_toml.rb → definition/expose_toml.rb} +5 -1
- data/lib/qonfig/plugins/toml/commands/{load_from_toml.rb → definition/load_from_toml.rb} +5 -1
- data/lib/qonfig/plugins/toml/dsl.rb +8 -2
- data/lib/qonfig/plugins/toml.rb +2 -2
- data/lib/qonfig/settings.rb +4 -2
- data/lib/qonfig/{validator/builder → validation/building/instance_builder}/attribute_consistency.rb +14 -14
- data/lib/qonfig/{validator/builder.rb → validation/building/instance_builder.rb} +55 -30
- data/lib/qonfig/validation/building/predefined_builder.rb +86 -0
- data/lib/qonfig/validation/building.rb +8 -0
- data/lib/qonfig/{validator/collection.rb → validation/collections/instance_collection.rb} +16 -14
- data/lib/qonfig/validation/collections/predefined_registry.rb +145 -0
- data/lib/qonfig/validation/collections.rb +8 -0
- data/lib/qonfig/validation/predefinition_mixin.rb +15 -0
- data/lib/qonfig/{validator → validation/validators}/basic.rb +9 -9
- data/lib/qonfig/{validator.rb → validation/validators/composite.rb} +8 -16
- data/lib/qonfig/{validator → validation/validators}/method_based.rb +6 -6
- data/lib/qonfig/{validator/predefined/common.rb → validation/validators/predefined.rb} +7 -7
- data/lib/qonfig/{validator → validation/validators}/proc_based.rb +6 -6
- data/lib/qonfig/validation/validators.rb +11 -0
- data/lib/qonfig/validation.rb +10 -0
- data/lib/qonfig/version.rb +1 -1
- data/lib/qonfig.rb +34 -1
- data/qonfig.gemspec +1 -1
- metadata +23 -26
- data/lib/qonfig/validator/dsl.rb +0 -59
- data/lib/qonfig/validator/predefined/registry.rb +0 -81
- data/lib/qonfig/validator/predefined/registry_control_mixin.rb +0 -44
- 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
|
@@ -1,32 +1,32 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# @api private
|
4
|
-
# @since 0.
|
5
|
-
class Qonfig::
|
4
|
+
# @since 0.20.0
|
5
|
+
class Qonfig::Validation::Collections::InstanceCollection
|
6
6
|
# @api private
|
7
|
-
# @since 0.
|
7
|
+
# @since 0.20.0
|
8
8
|
include Enumerable
|
9
9
|
|
10
|
-
# @return [Array<Qonfig::
|
10
|
+
# @return [Array<Qonfig::Validation::Validators::Base>]
|
11
11
|
#
|
12
12
|
# @api private
|
13
|
-
# @since 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.
|
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::
|
25
|
+
# @param validator [Qonfig::Validation::Validators::Base]
|
26
26
|
# @return [void]
|
27
27
|
#
|
28
28
|
# @api private
|
29
|
-
# @since 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.
|
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::
|
44
|
+
# @param collection [Qonfig::Validation::Collections::InstanceCollection]
|
45
45
|
# @return [void]
|
46
46
|
#
|
47
47
|
# @api private
|
48
|
-
# @since 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::
|
53
|
+
# @return [Qonfig::Validation::Collections::InstanceCollection]
|
54
54
|
#
|
55
55
|
# @api private
|
56
|
-
# @since 0.
|
56
|
+
# @since 0.20.0
|
57
57
|
def dup
|
58
58
|
thread_safe do
|
59
|
-
|
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,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.
|
5
|
-
class Qonfig::
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
5
|
-
class Qonfig::
|
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.
|
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.
|
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.
|
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.
|
42
|
+
# @since 0.20.0
|
51
43
|
attr_reader :data_set
|
52
44
|
|
53
|
-
# @return [Qonfig::
|
45
|
+
# @return [Qonfig::Validation::Collections::InstanceCollection]
|
54
46
|
#
|
55
47
|
# @api private
|
56
|
-
# @since 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.
|
5
|
-
class Qonfig::
|
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.
|
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.
|
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.
|
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.
|
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.
|
5
|
-
class Qonfig::
|
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.
|
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.
|
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.
|
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.
|
49
|
+
# @since 0.20.0
|
50
50
|
def validate_full(data_set)
|
51
51
|
# :nocov:
|
52
|
-
raise Qonfig::Error, 'Predefined validator
|
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.
|
5
|
-
class Qonfig::
|
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.
|
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.
|
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.
|
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.
|
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
|
data/lib/qonfig/version.rb
CHANGED
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/
|
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.
|
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'
|