qonfig 0.19.1 → 0.20.0

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