smart_schema 0.11.0 → 0.12.1
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
- metadata +60 -71
- data/.gitignore +0 -12
- data/.rspec +0 -3
- data/.rubocop.yml +0 -20
- data/CHANGELOG.md +0 -68
- data/CODE_OF_CONDUCT.md +0 -74
- data/Gemfile +0 -5
- data/Gemfile.lock +0 -106
- data/LICENSE.txt +0 -21
- data/README.md +0 -236
- data/Rakefile +0 -21
- data/bin/console +0 -8
- data/bin/setup +0 -8
- data/lib/smart_core/schema/checker/reconciler/constructor.rb +0 -60
- data/lib/smart_core/schema/checker/reconciler/matcher/options.rb +0 -33
- data/lib/smart_core/schema/checker/reconciler/matcher/result.rb +0 -87
- data/lib/smart_core/schema/checker/reconciler/matcher/result_finalizer.rb +0 -186
- data/lib/smart_core/schema/checker/reconciler/matcher.rb +0 -62
- data/lib/smart_core/schema/checker/reconciler.rb +0 -106
- data/lib/smart_core/schema/checker/rules/base.rb +0 -110
- data/lib/smart_core/schema/checker/rules/extra_keys/failure.rb +0 -24
- data/lib/smart_core/schema/checker/rules/extra_keys/result.rb +0 -37
- data/lib/smart_core/schema/checker/rules/extra_keys/success.rb +0 -30
- data/lib/smart_core/schema/checker/rules/extra_keys.rb +0 -31
- data/lib/smart_core/schema/checker/rules/optional.rb +0 -25
- data/lib/smart_core/schema/checker/rules/options/empty.rb +0 -43
- data/lib/smart_core/schema/checker/rules/options/filled.rb +0 -49
- data/lib/smart_core/schema/checker/rules/options/type.rb +0 -86
- data/lib/smart_core/schema/checker/rules/options.rb +0 -60
- data/lib/smart_core/schema/checker/rules/required.rb +0 -25
- data/lib/smart_core/schema/checker/rules/requirement/optional.rb +0 -36
- data/lib/smart_core/schema/checker/rules/requirement/required.rb +0 -36
- data/lib/smart_core/schema/checker/rules/requirement/result.rb +0 -95
- data/lib/smart_core/schema/checker/rules/requirement.rb +0 -9
- data/lib/smart_core/schema/checker/rules/result/base.rb +0 -44
- data/lib/smart_core/schema/checker/rules/result/failure.rb +0 -41
- data/lib/smart_core/schema/checker/rules/result/success.rb +0 -15
- data/lib/smart_core/schema/checker/rules/result.rb +0 -9
- data/lib/smart_core/schema/checker/rules/type_aliases.rb +0 -57
- data/lib/smart_core/schema/checker/rules/verifier/result.rb +0 -75
- data/lib/smart_core/schema/checker/rules/verifier.rb +0 -74
- data/lib/smart_core/schema/checker/rules.rb +0 -89
- data/lib/smart_core/schema/checker/verifiable_hash.rb +0 -65
- data/lib/smart_core/schema/checker.rb +0 -106
- data/lib/smart_core/schema/dsl.rb +0 -81
- data/lib/smart_core/schema/errors.rb +0 -13
- data/lib/smart_core/schema/key_control.rb +0 -39
- data/lib/smart_core/schema/result.rb +0 -62
- data/lib/smart_core/schema/version.rb +0 -14
- data/lib/smart_core/schema.rb +0 -52
- data/smart_schema.gemspec +0 -42
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# @api private
|
|
4
|
-
# @since 0.1.0
|
|
5
|
-
# @version 0.8.0
|
|
6
|
-
class SmartCore::Schema::Checker::Reconciler
|
|
7
|
-
require_relative 'reconciler/constructor'
|
|
8
|
-
require_relative 'reconciler/matcher'
|
|
9
|
-
|
|
10
|
-
# @return [void]
|
|
11
|
-
#
|
|
12
|
-
# @api private
|
|
13
|
-
# @since 0.1.0
|
|
14
|
-
# @version 0.3.0
|
|
15
|
-
def initialize
|
|
16
|
-
@rules = SmartCore::Schema::Checker::Rules.new
|
|
17
|
-
@strict = Constructor::DEFAULT_STRICT_BEHAVIOR
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
# @param verifiable_hash [SmartCore::Schema::Checker::VerifiableHash]
|
|
21
|
-
# @return [void]
|
|
22
|
-
#
|
|
23
|
-
# @api private
|
|
24
|
-
# @since 0.1.0
|
|
25
|
-
# @version 0.8.0
|
|
26
|
-
def __match!(verifiable_hash)
|
|
27
|
-
SmartCore::Schema::Checker::Reconciler::Matcher.match(self, verifiable_hash)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
# @return [SmartCore::Schema::Checker::Rules::ExtraKeys]
|
|
31
|
-
#
|
|
32
|
-
# @api private
|
|
33
|
-
# @since 0.1.0
|
|
34
|
-
def __extra_keys_contract
|
|
35
|
-
SmartCore::Schema::Checker::Rules::ExtraKeys
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
# @return [SmartCore::Schema::Checker::Rules]
|
|
39
|
-
#
|
|
40
|
-
# @api private
|
|
41
|
-
# @since 0.1.0
|
|
42
|
-
# @version 0.8.0
|
|
43
|
-
def __contract_rules
|
|
44
|
-
rules
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
# @return [Boolean]
|
|
48
|
-
#
|
|
49
|
-
# @api private
|
|
50
|
-
# @since 0.3.0
|
|
51
|
-
# @version 0.8.0
|
|
52
|
-
def __strict?
|
|
53
|
-
@strict
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
# @param schema_key [String, Symbol]
|
|
57
|
-
# @param nested_definitions [Block]
|
|
58
|
-
# @return [SmartCore::Schema::Checker::Rules::Required]
|
|
59
|
-
#
|
|
60
|
-
# @api public
|
|
61
|
-
# @since 0.1.0
|
|
62
|
-
# @version 0.8.0
|
|
63
|
-
def required(schema_key, &nested_definitions)
|
|
64
|
-
rule = SmartCore::Schema::Checker::Rules::Required.new(self, schema_key, &nested_definitions)
|
|
65
|
-
rule.tap { rules[rule.schema_key] = rule }
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
# @param schema_key [String, Symbol]
|
|
69
|
-
# @param nested_definitions [Block]
|
|
70
|
-
# @return [SmartCore::Schema::Checker::Rules::Optional]
|
|
71
|
-
#
|
|
72
|
-
# @api public
|
|
73
|
-
# @since 0.1.0
|
|
74
|
-
# @version 0.8.0
|
|
75
|
-
def optional(schema_key, &nested_definitions)
|
|
76
|
-
rule = SmartCore::Schema::Checker::Rules::Optional.new(self, schema_key, &nested_definitions)
|
|
77
|
-
rule.tap { rules[rule.schema_key] = rule }
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
# @param is_strict [Boolean]
|
|
81
|
-
# @return [void]
|
|
82
|
-
#
|
|
83
|
-
# @api public
|
|
84
|
-
# @since 0.3.0
|
|
85
|
-
# @version 0.8.0
|
|
86
|
-
def strict!(is_strict = Constructor::DEFAULT_STRICT_BEHAVIOR)
|
|
87
|
-
@strict = is_strict
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
# @return [void]
|
|
91
|
-
#
|
|
92
|
-
# @api public
|
|
93
|
-
# @since 0.3.0
|
|
94
|
-
# @version 0.8.0
|
|
95
|
-
def non_strict!
|
|
96
|
-
strict!(Constructor::STRICT_MODES[:non_strict])
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
private
|
|
100
|
-
|
|
101
|
-
# @return [SmartCore::Schema::Checker::Rules]
|
|
102
|
-
#
|
|
103
|
-
# @api private
|
|
104
|
-
# @since 0.1.0
|
|
105
|
-
attr_reader :rules
|
|
106
|
-
end
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# @api private
|
|
4
|
-
# @since 0.1.0
|
|
5
|
-
# @version 0.8.0
|
|
6
|
-
class SmartCore::Schema::Checker::Rules::Base
|
|
7
|
-
# @return [String]
|
|
8
|
-
#
|
|
9
|
-
# @api private
|
|
10
|
-
# @since 0.1.0
|
|
11
|
-
attr_reader :schema_key
|
|
12
|
-
|
|
13
|
-
# @return [SmartCore::Schema::Checker::Rules::Options]
|
|
14
|
-
#
|
|
15
|
-
# @api private
|
|
16
|
-
# @since 0.1.0
|
|
17
|
-
attr_reader :options
|
|
18
|
-
|
|
19
|
-
# @return [NilClass, SmartCore::Schema::Checker::Reconciler]
|
|
20
|
-
#
|
|
21
|
-
# @api private
|
|
22
|
-
# @since 0.1.0
|
|
23
|
-
attr_reader :nested_reconciler
|
|
24
|
-
|
|
25
|
-
# @return [SmartCore::Schema::Checker::Reconciler]
|
|
26
|
-
#
|
|
27
|
-
# @api private
|
|
28
|
-
# @since 0.3.0
|
|
29
|
-
attr_reader :root_reconciler
|
|
30
|
-
|
|
31
|
-
# @param root_reconciler [SmartCore::Schema::Checker::Reconciler]
|
|
32
|
-
# @param schema_key [String, Symbol]
|
|
33
|
-
# @param nested_definitions [Block]
|
|
34
|
-
# @return [void]
|
|
35
|
-
#
|
|
36
|
-
# @api private
|
|
37
|
-
# @since 0.1.0
|
|
38
|
-
# @version 0.8.0
|
|
39
|
-
def initialize(root_reconciler, schema_key, &nested_definitions)
|
|
40
|
-
@root_reconciler = root_reconciler
|
|
41
|
-
@schema_key = SmartCore::Schema::KeyControl.normalize(schema_key)
|
|
42
|
-
@options = SmartCore::Schema::Checker::Rules::Options.new(self)
|
|
43
|
-
@nested_reconciler = nil
|
|
44
|
-
define_nested_reconciler(&nested_definitions)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
# @!method requirement
|
|
48
|
-
# @return [SmartCore::Schema::Checker::Rules::Requirement::Optional]
|
|
49
|
-
# @return [SmartCore::Schema::Checker::Rules::Requirement::Required]
|
|
50
|
-
|
|
51
|
-
# @param verifiable_hash [Hash<String|Symbol,Any>]
|
|
52
|
-
# @param matcher_options [SmartCore::Schema::Checker::Reconciler::Matcher::Options]
|
|
53
|
-
# @return [SmartCore::Schema::Checker::Rules::Verifier::Result]
|
|
54
|
-
#
|
|
55
|
-
# @api private
|
|
56
|
-
# @since 0.1.0
|
|
57
|
-
# @version 0.3.0
|
|
58
|
-
def __verify!(verifiable_hash, matcher_options)
|
|
59
|
-
SmartCore::Schema::Checker::Rules::Verifier.verify!(
|
|
60
|
-
self, matcher_options, verifiable_hash
|
|
61
|
-
)
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
# @param required_type [String, Symbol, SmartCore::Types::Primitive]
|
|
65
|
-
# @param nested_definitions [Block]
|
|
66
|
-
# @return [self]
|
|
67
|
-
#
|
|
68
|
-
# @api public
|
|
69
|
-
# @since 0.1.0
|
|
70
|
-
# @version 0.8.0
|
|
71
|
-
def type(required_type, &nested_definitions)
|
|
72
|
-
tap do
|
|
73
|
-
options.type = SmartCore::Schema::Checker::Rules::Options::Type.new(self, required_type)
|
|
74
|
-
define_nested_reconciler(&nested_definitions)
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
# @param nested_definitions [Block]
|
|
79
|
-
# @return [self]
|
|
80
|
-
#
|
|
81
|
-
# @api public
|
|
82
|
-
# @since 0.1.0
|
|
83
|
-
# @version 0.8.0
|
|
84
|
-
def filled(&nested_definitions)
|
|
85
|
-
tap do
|
|
86
|
-
options.filled = SmartCore::Schema::Checker::Rules::Options::Filled.new(self)
|
|
87
|
-
define_nested_reconciler(&nested_definitions)
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
private
|
|
92
|
-
|
|
93
|
-
# @param nested_definitions [Block]
|
|
94
|
-
# @return [void]
|
|
95
|
-
#
|
|
96
|
-
# @api private
|
|
97
|
-
# @since 0.1.0
|
|
98
|
-
# @version 0.3.0
|
|
99
|
-
def define_nested_reconciler(&nested_definitions)
|
|
100
|
-
return unless block_given?
|
|
101
|
-
|
|
102
|
-
SmartCore::Schema::Checker::Reconciler::Constructor.tap do |constructor|
|
|
103
|
-
@nested_reconciler = constructor.create if @nested_reconciler == nil
|
|
104
|
-
@nested_reconciler.strict!(root_reconciler.__strict?)
|
|
105
|
-
constructor.append_definitions(@nested_reconciler, &nested_definitions)
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
type(:hash).filled
|
|
109
|
-
end
|
|
110
|
-
end
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module SmartCore::Schema::Checker::Rules::ExtraKeys
|
|
4
|
-
# @api private
|
|
5
|
-
# @since 0.1.0
|
|
6
|
-
# @version 0.3.0
|
|
7
|
-
class Failure < Result
|
|
8
|
-
# @return [Boolean]
|
|
9
|
-
#
|
|
10
|
-
# @api private
|
|
11
|
-
# @since 0.1.0
|
|
12
|
-
def success?
|
|
13
|
-
false
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
# @return [Boolean]
|
|
17
|
-
#
|
|
18
|
-
# @api private
|
|
19
|
-
# @since 0.1.0
|
|
20
|
-
def failure?
|
|
21
|
-
true
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# @apbstract
|
|
4
|
-
#
|
|
5
|
-
# @api private
|
|
6
|
-
# @since 0.3.0
|
|
7
|
-
class SmartCore::Schema::Checker::Rules::ExtraKeys::Result
|
|
8
|
-
# @return [Array<String>]
|
|
9
|
-
#
|
|
10
|
-
# @api private
|
|
11
|
-
# @since 0.3.0
|
|
12
|
-
attr_reader :extra_keys
|
|
13
|
-
|
|
14
|
-
# @return [SmartCore::Schema::Checker::Reconciler::Matcher::Options]
|
|
15
|
-
#
|
|
16
|
-
# @api private
|
|
17
|
-
# @since 0.3.0
|
|
18
|
-
attr_reader :matcher_options
|
|
19
|
-
|
|
20
|
-
# @param extra_keys [Array<String>]
|
|
21
|
-
# @param matcher_options [SmartCore::Schema::Checker::Reconciler::Matcher::Options]
|
|
22
|
-
# @return [void]
|
|
23
|
-
#
|
|
24
|
-
# @api private
|
|
25
|
-
# @since 0.1.0
|
|
26
|
-
# @version 0.3.0
|
|
27
|
-
def initialize(extra_keys, matcher_options)
|
|
28
|
-
@extra_keys = extra_keys
|
|
29
|
-
@matcher_options = matcher_options
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
# @!method success?
|
|
33
|
-
# @return [Boolean]
|
|
34
|
-
|
|
35
|
-
# @!method failure?
|
|
36
|
-
# @return [Boolean]
|
|
37
|
-
end
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module SmartCore::Schema::Checker::Rules::ExtraKeys
|
|
4
|
-
# @api private
|
|
5
|
-
# @since 0.1.0
|
|
6
|
-
# @version 0.3.0
|
|
7
|
-
class Success < Result
|
|
8
|
-
# @return [Array<String>]
|
|
9
|
-
#
|
|
10
|
-
# @api private
|
|
11
|
-
# @since 0.3.0
|
|
12
|
-
alias_method :spread_keys, :extra_keys
|
|
13
|
-
|
|
14
|
-
# @return [Boolean]
|
|
15
|
-
#
|
|
16
|
-
# @api private
|
|
17
|
-
# @since 0.1.0
|
|
18
|
-
def success?
|
|
19
|
-
true
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
# @return [Boolean]
|
|
23
|
-
#
|
|
24
|
-
# @api private
|
|
25
|
-
# @since 0.1.0
|
|
26
|
-
def failure?
|
|
27
|
-
false
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# @api private
|
|
4
|
-
# @since 0.1.0
|
|
5
|
-
# @version 0.3.0
|
|
6
|
-
module SmartCore::Schema::Checker::Rules::ExtraKeys
|
|
7
|
-
require_relative 'extra_keys/result'
|
|
8
|
-
require_relative 'extra_keys/success'
|
|
9
|
-
require_relative 'extra_keys/failure'
|
|
10
|
-
|
|
11
|
-
class << self
|
|
12
|
-
# @param verifiable_hash [SmartCore::Schema::Checker::VerifiableHash]
|
|
13
|
-
# @param rules [SmartCore::Schema::Checker::Rules]
|
|
14
|
-
# @param matcher_options [SmartCore::Schema::Checker::Reconciler::Matcher::Options]
|
|
15
|
-
# @return [SmartCore::Schema::Checker::Rules::ExtraKeys::Success]
|
|
16
|
-
# @return [SmartCore::Schema::Checker::Rules::ExtraKeys::Failure]
|
|
17
|
-
#
|
|
18
|
-
# @api private
|
|
19
|
-
# @since 0.1.0
|
|
20
|
-
# @version 0.3.0
|
|
21
|
-
def __verify!(verifiable_hash, rules, matcher_options)
|
|
22
|
-
extra_keys = verifiable_hash.keys - rules.keys
|
|
23
|
-
|
|
24
|
-
if extra_keys.empty? || (extra_keys.any? && !matcher_options.strict_schema?)
|
|
25
|
-
Success.new(extra_keys, matcher_options)
|
|
26
|
-
else
|
|
27
|
-
Failure.new(extra_keys, matcher_options)
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# @api private
|
|
4
|
-
# @since 0.1.0
|
|
5
|
-
# @version 0.3.0
|
|
6
|
-
class SmartCore::Schema::Checker::Rules::Optional < SmartCore::Schema::Checker::Rules::Base
|
|
7
|
-
# @return [SmartCore::Schema::Checker::Rules::Requirement::Optional]
|
|
8
|
-
#
|
|
9
|
-
# @api private
|
|
10
|
-
# @since 0.1.0
|
|
11
|
-
attr_reader :requirement
|
|
12
|
-
|
|
13
|
-
# @param root_reconciler [SmartCore::Schema::Checker::Reconciler]
|
|
14
|
-
# @param schema_key [String, Symbol]
|
|
15
|
-
# @param nested_definitions [Block]
|
|
16
|
-
# @return [void]
|
|
17
|
-
#
|
|
18
|
-
# @api private
|
|
19
|
-
# @since 0.1.0
|
|
20
|
-
# @version 0.3.0
|
|
21
|
-
def initialize(root_reconciler, schema_key, &nested_definitions)
|
|
22
|
-
super(root_reconciler, schema_key, &nested_definitions)
|
|
23
|
-
@requirement = SmartCore::Schema::Checker::Rules::Requirement::Optional.new(self)
|
|
24
|
-
end
|
|
25
|
-
end
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# @api private
|
|
4
|
-
# @since 0.1.0
|
|
5
|
-
class SmartCore::Schema::Checker::Rules::Options::Empty
|
|
6
|
-
# @since 0.1.0
|
|
7
|
-
extend Forwardable
|
|
8
|
-
|
|
9
|
-
# @param rule [SmartCore::Schema::Checker::Rules::Base]
|
|
10
|
-
# @return [void]
|
|
11
|
-
#
|
|
12
|
-
# @api private
|
|
13
|
-
# @since 0.1.0
|
|
14
|
-
def initialize(rule)
|
|
15
|
-
@rule = rule
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
# @param verifiable_hash [SmartCore::Schema::Checker::VerifiableHash]
|
|
19
|
-
# @return [SmartCore::Schema::Checker::Rules::Result::Success]
|
|
20
|
-
#
|
|
21
|
-
# @api private
|
|
22
|
-
# @since 0.1.0
|
|
23
|
-
def validate(verifiable_hash)
|
|
24
|
-
SmartCore::Schema::Checker::Rules::Result::Success.new(
|
|
25
|
-
key: schema_key,
|
|
26
|
-
value: verifiable_hash[schema_key]
|
|
27
|
-
)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
private
|
|
31
|
-
|
|
32
|
-
# @return [SmartCore::Schema::Checker::Rules::Base]
|
|
33
|
-
#
|
|
34
|
-
# @api private
|
|
35
|
-
# @since 0.1.0
|
|
36
|
-
attr_reader :rule
|
|
37
|
-
|
|
38
|
-
# @return [String]
|
|
39
|
-
#
|
|
40
|
-
# @api private
|
|
41
|
-
# @since 0.1.0
|
|
42
|
-
def_delegator :rule, :schema_key
|
|
43
|
-
end
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
class SmartCore::Schema::Checker::Rules::Options
|
|
4
|
-
# @api private
|
|
5
|
-
# @since 0.1.0
|
|
6
|
-
class Filled < Empty
|
|
7
|
-
# @note Constant is used only for other developers.
|
|
8
|
-
# @return [Symbol]
|
|
9
|
-
#
|
|
10
|
-
# @api private
|
|
11
|
-
# @since 0.1.0
|
|
12
|
-
ERROR_CODE = :non_filled
|
|
13
|
-
|
|
14
|
-
# @param verifiable_hash [SmartCore::Schema::Checker::VerifiableHash]
|
|
15
|
-
# @return [SmartCore::Schema::Checker::Rules::Result::Success]
|
|
16
|
-
# @return [SmartCore::Schema::Checker::Rules::Result::Failure]
|
|
17
|
-
#
|
|
18
|
-
# @api private
|
|
19
|
-
# @since 0.1.0
|
|
20
|
-
def validate(verifiable_hash)
|
|
21
|
-
schema_value = verifiable_hash[schema_key]
|
|
22
|
-
|
|
23
|
-
if non_filled?(schema_value)
|
|
24
|
-
SmartCore::Schema::Checker::Rules::Result::Failure.new(
|
|
25
|
-
key: schema_key,
|
|
26
|
-
value: schema_value,
|
|
27
|
-
error: ERROR_CODE,
|
|
28
|
-
message: 'Requires to be filled'
|
|
29
|
-
)
|
|
30
|
-
else
|
|
31
|
-
SmartCore::Schema::Checker::Rules::Result::Success.new(
|
|
32
|
-
key: schema_key,
|
|
33
|
-
value: schema_value
|
|
34
|
-
)
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
private
|
|
39
|
-
|
|
40
|
-
# @param value [Any]
|
|
41
|
-
# @return [Boolean]
|
|
42
|
-
#
|
|
43
|
-
# @api private
|
|
44
|
-
# @since 0.1.0
|
|
45
|
-
def non_filled?(value)
|
|
46
|
-
value == nil
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
end
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
class SmartCore::Schema::Checker::Rules::Options
|
|
4
|
-
# @api private
|
|
5
|
-
# @since 0.1.0
|
|
6
|
-
class Type < Empty
|
|
7
|
-
# @note Constant is used only for clarity (for other developers)
|
|
8
|
-
# @return [Symbol]
|
|
9
|
-
#
|
|
10
|
-
# @api private
|
|
11
|
-
# @since 0.1.0
|
|
12
|
-
ERROR_CODE = :invalid_type
|
|
13
|
-
|
|
14
|
-
# @param rule [SmartCore::Schema::Checker::Rules::Base]
|
|
15
|
-
# @param required_type [String, Symbol, SmartCore::Types::Primitive]
|
|
16
|
-
# @return [void]
|
|
17
|
-
#
|
|
18
|
-
# @api private
|
|
19
|
-
# @since 0.1.0
|
|
20
|
-
def initialize(rule, required_type)
|
|
21
|
-
super(rule)
|
|
22
|
-
@type = resolve_required_type(required_type)
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
# @param verifiable_hash [SmartCore::Schema::Checker::VerifiableHash]
|
|
26
|
-
# @return [SmartCore::Schema::Checker::Rules::Result::Success]
|
|
27
|
-
# @return [SmartCore::Schema::Checker::Rules::Result::Failure]
|
|
28
|
-
#
|
|
29
|
-
# @api private
|
|
30
|
-
# @since 0.1.0
|
|
31
|
-
def validate(verifiable_hash)
|
|
32
|
-
schema_value = verifiable_hash[schema_key]
|
|
33
|
-
|
|
34
|
-
if type.valid?(schema_value)
|
|
35
|
-
SmartCore::Schema::Checker::Rules::Result::Success.new(
|
|
36
|
-
key: schema_key,
|
|
37
|
-
value: schema_value
|
|
38
|
-
)
|
|
39
|
-
else
|
|
40
|
-
SmartCore::Schema::Checker::Rules::Result::Failure.new(
|
|
41
|
-
key: schema_key,
|
|
42
|
-
value: schema_value,
|
|
43
|
-
error: ERROR_CODE,
|
|
44
|
-
message: "Requires #{type} type (got: #{schema_value.class})"
|
|
45
|
-
)
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
private
|
|
50
|
-
|
|
51
|
-
# @return [String, Symbol, SmartCore::Types::Primitive]
|
|
52
|
-
#
|
|
53
|
-
# @api private
|
|
54
|
-
# @since 0.1.0
|
|
55
|
-
attr_reader :type
|
|
56
|
-
|
|
57
|
-
# @param required_type [String, Symbol, SmartCore::Types::Primitive]
|
|
58
|
-
# @return [SmartCore::Types::Primitive]
|
|
59
|
-
#
|
|
60
|
-
# @api private
|
|
61
|
-
# @since 0.1.0
|
|
62
|
-
def resolve_required_type(required_type)
|
|
63
|
-
unless required_type.is_a?(String) ||
|
|
64
|
-
required_type.is_a?(Symbol) ||
|
|
65
|
-
required_type.is_a?(SmartCore::Types::Primitive)
|
|
66
|
-
raise(SmartCore::Schema::ArgumentError, <<~ERROR_MESSAGE)
|
|
67
|
-
Schema key type should be a type of string, symbol or SmartCore:Types::Primitive (got: #{required_type})
|
|
68
|
-
ERROR_MESSAGE
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
if required_type.is_a?(SmartCore::Types::Primitive)
|
|
72
|
-
required_type
|
|
73
|
-
else
|
|
74
|
-
begin
|
|
75
|
-
SmartCore::Schema::Checker::Rules::TYPE_ALIASES.fetch(required_type.to_s)
|
|
76
|
-
rescue KeyError
|
|
77
|
-
raise(SmartCore::Schema::ArgumentError, <<~ERROR_MESSAGE)
|
|
78
|
-
Chosen schema key type is not supported or not registered (got #{required_type})
|
|
79
|
-
ERROR_MESSAGE
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
# TODO: rework with smart_type-system
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
end
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# @api private
|
|
4
|
-
# @since 0.1.0
|
|
5
|
-
# @version 0.8.0
|
|
6
|
-
class SmartCore::Schema::Checker::Rules::Options
|
|
7
|
-
require_relative 'options/empty'
|
|
8
|
-
require_relative 'options/type'
|
|
9
|
-
require_relative 'options/filled'
|
|
10
|
-
|
|
11
|
-
# @param rule [SmartCore::Schema::Checker::Rules::Base]
|
|
12
|
-
# @return [void]
|
|
13
|
-
#
|
|
14
|
-
# @api private
|
|
15
|
-
# @since 0.1.0
|
|
16
|
-
def initialize(rule)
|
|
17
|
-
@type = Empty.new(rule)
|
|
18
|
-
@filled = Empty.new(rule)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
# @return [SmartCore::Schema::Checker::Rules::Options::Type]
|
|
22
|
-
# @return [SmartCore::Schema::Checker::Rules::Options::Empty]
|
|
23
|
-
#
|
|
24
|
-
# @api private
|
|
25
|
-
# @since 0.1.0
|
|
26
|
-
# @version 0.8.0
|
|
27
|
-
def type
|
|
28
|
-
@type
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
# @param option [SmartCore::Schema::Checker::Rules::Options::Type]
|
|
32
|
-
# @return [void]
|
|
33
|
-
#
|
|
34
|
-
# @api private
|
|
35
|
-
# @since 0.1.0
|
|
36
|
-
# @version 0.8.0
|
|
37
|
-
def type=(option)
|
|
38
|
-
@type = option
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
# @return [SmartCore::Schema::Checker::Rules::Options::Filled]
|
|
42
|
-
# @return [SmartCore::Schema::Checker::Rules::Options::Empty]
|
|
43
|
-
#
|
|
44
|
-
# @api private
|
|
45
|
-
# @since 0.1.0
|
|
46
|
-
# @version 0.8.0
|
|
47
|
-
def filled
|
|
48
|
-
@filled
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
# @param option [SmartCore::Schema::Checker::Rules::Options::Filled]
|
|
52
|
-
# @return [void]
|
|
53
|
-
#
|
|
54
|
-
# @api private
|
|
55
|
-
# @since 0.1.0
|
|
56
|
-
# @version 0.8.0
|
|
57
|
-
def filled=(option)
|
|
58
|
-
@filled = option
|
|
59
|
-
end
|
|
60
|
-
end
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# @api private
|
|
4
|
-
# @since 0.1.0
|
|
5
|
-
# @version 0.3.0
|
|
6
|
-
class SmartCore::Schema::Checker::Rules::Required < SmartCore::Schema::Checker::Rules::Base
|
|
7
|
-
# @return [SmartCore::Schema::Checker::Rules::Requirement::Required]
|
|
8
|
-
#
|
|
9
|
-
# @api private
|
|
10
|
-
# @since 0.1.0
|
|
11
|
-
attr_reader :requirement
|
|
12
|
-
|
|
13
|
-
# @param root_reconciler [SmartCore::Schema::Checker::Reconciler]
|
|
14
|
-
# @param schema_key [String, Symbol]
|
|
15
|
-
# @param nested_definitions [Block]
|
|
16
|
-
# @return [void]
|
|
17
|
-
#
|
|
18
|
-
# @api private
|
|
19
|
-
# @since 0.1.0
|
|
20
|
-
# @version 0.3.0
|
|
21
|
-
def initialize(root_reconciler, schema_key, &nested_definitions)
|
|
22
|
-
super(root_reconciler, schema_key, &nested_definitions)
|
|
23
|
-
@requirement = SmartCore::Schema::Checker::Rules::Requirement::Required.new(self)
|
|
24
|
-
end
|
|
25
|
-
end
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# @api private
|
|
4
|
-
# @since 0.1.0
|
|
5
|
-
class SmartCore::Schema::Checker::Rules::Requirement::Optional
|
|
6
|
-
# @param rule [SmartCore::Schema::Checker::Rules::Optional]
|
|
7
|
-
# @return [void]
|
|
8
|
-
#
|
|
9
|
-
# @api private
|
|
10
|
-
# @since 0.1.0
|
|
11
|
-
def initialize(rule)
|
|
12
|
-
@rule = rule
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
# @param verifiable_hash [SmartCore::Schema::Checker::VerifiableHash]
|
|
16
|
-
# @return [SmartCore::Schema::Checker::Rules::Requirement::Result]
|
|
17
|
-
#
|
|
18
|
-
# @api private
|
|
19
|
-
# @since 0.1.0
|
|
20
|
-
def validate(verifiable_hash)
|
|
21
|
-
SmartCore::Schema::Checker::Rules::Requirement::Result.new(
|
|
22
|
-
rule.schema_key,
|
|
23
|
-
verifiable_hash,
|
|
24
|
-
required: false,
|
|
25
|
-
key_exists: verifiable_hash.key?(rule.schema_key)
|
|
26
|
-
)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
private
|
|
30
|
-
|
|
31
|
-
# @return [SmartCore::Schema::Checker::Rules::Required]
|
|
32
|
-
#
|
|
33
|
-
# @api private
|
|
34
|
-
# @since 0.1.0
|
|
35
|
-
attr_reader :rule
|
|
36
|
-
end
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# @api private
|
|
4
|
-
# @since 0.1.0
|
|
5
|
-
class SmartCore::Schema::Checker::Rules::Requirement::Required
|
|
6
|
-
# @param rule [SmartCore::Schema::Checker::Rules::Required]
|
|
7
|
-
# @return [void]
|
|
8
|
-
#
|
|
9
|
-
# @api private
|
|
10
|
-
# @since 0.1.0
|
|
11
|
-
def initialize(rule)
|
|
12
|
-
@rule = rule
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
# @param verifiable_hash [SmartCore::Schema::Checker::VerifiableHash]
|
|
16
|
-
# @return [SmartCore::Schema::Checker::Rules::Requirement::Result]
|
|
17
|
-
#
|
|
18
|
-
# @api private
|
|
19
|
-
# @since 0.1.0
|
|
20
|
-
def validate(verifiable_hash)
|
|
21
|
-
SmartCore::Schema::Checker::Rules::Requirement::Result.new(
|
|
22
|
-
rule.schema_key,
|
|
23
|
-
verifiable_hash,
|
|
24
|
-
required: true,
|
|
25
|
-
key_exists: verifiable_hash.key?(rule.schema_key)
|
|
26
|
-
)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
private
|
|
30
|
-
|
|
31
|
-
# @return [SmartCore::Schema::Checker::Rules::Required]
|
|
32
|
-
#
|
|
33
|
-
# @api private
|
|
34
|
-
# @since 0.1.0
|
|
35
|
-
attr_reader :rule
|
|
36
|
-
end
|