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