schemacop 2.0.0 → 2.3.2
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 +5 -5
- data/.rubocop.yml +1 -17
- data/.travis.yml +0 -2
- data/CHANGELOG.md +49 -0
- data/LICENSE +1 -1
- data/README.md +66 -17
- data/Rakefile +5 -1
- data/VERSION +1 -1
- data/doc/Schemacop.html +5 -5
- data/doc/Schemacop/ArrayValidator.html +3 -3
- data/doc/Schemacop/BooleanValidator.html +4 -4
- data/doc/Schemacop/Collector.html +208 -32
- data/doc/Schemacop/Exceptions.html +3 -3
- data/doc/Schemacop/Exceptions/InvalidSchemaError.html +3 -3
- data/doc/Schemacop/Exceptions/ValidationError.html +3 -3
- data/doc/Schemacop/FieldNode.html +3 -3
- data/doc/Schemacop/FloatValidator.html +4 -4
- data/doc/Schemacop/HashValidator.html +33 -7
- data/doc/Schemacop/IntegerValidator.html +4 -4
- data/doc/Schemacop/NilValidator.html +4 -4
- data/doc/Schemacop/Node.html +4 -4
- data/doc/Schemacop/NodeResolver.html +3 -3
- data/doc/Schemacop/NodeSupportingField.html +4 -4
- data/doc/Schemacop/NodeSupportingType.html +4 -4
- data/doc/Schemacop/NodeWithBlock.html +4 -4
- data/doc/Schemacop/NumberValidator.html +4 -4
- data/doc/Schemacop/ObjectValidator.html +20 -10
- data/doc/Schemacop/RootNode.html +4 -4
- data/doc/Schemacop/Schema.html +4 -4
- data/doc/Schemacop/StringValidator.html +3 -3
- data/doc/Schemacop/SymbolValidator.html +145 -0
- data/doc/ScopedEnv.html +3 -3
- data/doc/_index.html +11 -4
- data/doc/class_list.html +1 -1
- data/doc/css/style.css +10 -6
- data/doc/file.README.html +76 -30
- data/doc/frames.html +1 -1
- data/doc/index.html +76 -30
- data/doc/js/app.js +55 -0
- data/doc/method_list.html +57 -41
- data/doc/top-level-namespace.html +3 -3
- data/lib/schemacop.rb +2 -0
- data/lib/schemacop/collector.rb +21 -2
- data/lib/schemacop/node.rb +6 -2
- data/lib/schemacop/node_supporting_field.rb +2 -6
- data/lib/schemacop/schema.rb +1 -1
- data/lib/schemacop/validator/hash_validator.rb +15 -2
- data/lib/schemacop/validator/object_validator.rb +7 -1
- data/lib/schemacop/validator/symbol_validator.rb +5 -0
- data/schemacop.gemspec +9 -9
- data/test/collector_test.rb +45 -0
- data/test/custom_check_test.rb +7 -0
- data/test/short_forms_test.rb +15 -0
- data/test/types_test.rb +1 -0
- data/test/validator_object_test.rb +18 -0
- data/test/validator_symbol_test.rb +16 -0
- metadata +23 -18
@@ -6,7 +6,7 @@
|
|
6
6
|
<title>
|
7
7
|
Top Level Namespace
|
8
8
|
|
9
|
-
— Documentation by YARD 0.9.
|
9
|
+
— Documentation by YARD 0.9.20
|
10
10
|
|
11
11
|
</title>
|
12
12
|
|
@@ -102,9 +102,9 @@
|
|
102
102
|
</div>
|
103
103
|
|
104
104
|
<div id="footer">
|
105
|
-
Generated on
|
105
|
+
Generated on Thu Sep 26 13:19:46 2019 by
|
106
106
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
107
|
-
0.9.
|
107
|
+
0.9.20 (ruby-2.6.2).
|
108
108
|
</div>
|
109
109
|
|
110
110
|
</div>
|
data/lib/schemacop.rb
CHANGED
@@ -3,6 +3,7 @@ end
|
|
3
3
|
|
4
4
|
require 'set'
|
5
5
|
require 'active_support/core_ext/class/attribute'
|
6
|
+
require 'active_support/hash_with_indifferent_access'
|
6
7
|
|
7
8
|
require 'schemacop/scoped_env'
|
8
9
|
require 'schemacop/exceptions'
|
@@ -21,6 +22,7 @@ require 'schemacop/validator/hash_validator'
|
|
21
22
|
require 'schemacop/validator/number_validator'
|
22
23
|
require 'schemacop/validator/integer_validator'
|
23
24
|
require 'schemacop/validator/float_validator'
|
25
|
+
require 'schemacop/validator/symbol_validator'
|
24
26
|
require 'schemacop/validator/string_validator'
|
25
27
|
require 'schemacop/validator/nil_validator'
|
26
28
|
require 'schemacop/validator/object_validator' # Matches any object, must be last validator
|
data/lib/schemacop/collector.rb
CHANGED
@@ -1,21 +1,31 @@
|
|
1
1
|
module Schemacop
|
2
2
|
class Collector
|
3
3
|
attr_reader :current_path
|
4
|
+
attr_reader :exceptions
|
4
5
|
|
5
6
|
def initialize
|
6
7
|
@exceptions = []
|
7
8
|
@current_path = []
|
9
|
+
@ignore_next_segment = false
|
8
10
|
end
|
9
11
|
|
10
12
|
def valid?
|
11
13
|
@exceptions.empty?
|
12
14
|
end
|
13
15
|
|
16
|
+
# Construct the current path
|
14
17
|
def path(segment)
|
15
|
-
|
18
|
+
ignore_this_segment = false
|
19
|
+
if @ignore_next_segment
|
20
|
+
ignore_this_segment = true
|
21
|
+
@ignore_next_segment = false
|
22
|
+
end
|
23
|
+
|
24
|
+
@current_path << segment unless ignore_this_segment
|
25
|
+
|
16
26
|
yield
|
17
27
|
ensure
|
18
|
-
@current_path.pop
|
28
|
+
@current_path.pop unless ignore_this_segment
|
19
29
|
end
|
20
30
|
|
21
31
|
def exception_message
|
@@ -30,5 +40,14 @@ module Schemacop
|
|
30
40
|
message: error_msg
|
31
41
|
}
|
32
42
|
end
|
43
|
+
|
44
|
+
# Does not include the path segment next time {Schemacop::Collector.path} is
|
45
|
+
# called.
|
46
|
+
#
|
47
|
+
# @return [Schemacop::Collector]
|
48
|
+
def ignore_next_segment
|
49
|
+
@ignore_next_segment = true
|
50
|
+
return self
|
51
|
+
end
|
33
52
|
end
|
34
53
|
end
|
data/lib/schemacop/node.rb
CHANGED
@@ -119,8 +119,12 @@ module Schemacop
|
|
119
119
|
protected
|
120
120
|
|
121
121
|
def validate_custom_check(data, collector)
|
122
|
-
if option?(:check) &&
|
123
|
-
|
122
|
+
if option?(:check) && (check_result = option(:check).call(data)) != true
|
123
|
+
if check_result.is_a?(String)
|
124
|
+
collector.error "Custom :check failed: #{check_result}."
|
125
|
+
else
|
126
|
+
collector.error 'Custom :check failed.'
|
127
|
+
end
|
124
128
|
end
|
125
129
|
end
|
126
130
|
end
|
@@ -23,7 +23,7 @@ module Schemacop
|
|
23
23
|
field(*args, required: true, allow_nil: false, &block)
|
24
24
|
end
|
25
25
|
|
26
|
-
|
26
|
+
alias_method :req, :req!
|
27
27
|
|
28
28
|
def opt?(*args, &block)
|
29
29
|
field(*args, required: false, allow_nil: true, &block)
|
@@ -33,16 +33,13 @@ module Schemacop
|
|
33
33
|
field(*args, required: false, allow_nil: false, &block)
|
34
34
|
end
|
35
35
|
|
36
|
-
|
36
|
+
alias_method :opt, :opt?
|
37
37
|
|
38
38
|
protected
|
39
39
|
|
40
40
|
def field(*args, required:, allow_nil:, &block)
|
41
|
-
# name = args.shift
|
42
|
-
# options = args.last.is_a?(Hash) ? args.pop : {}
|
43
41
|
name = args.shift
|
44
42
|
|
45
|
-
# rubocop: disable Style/IfInsideElse
|
46
43
|
if @fields[name]
|
47
44
|
@fields[name].type(*args, &block)
|
48
45
|
else
|
@@ -54,7 +51,6 @@ module Schemacop
|
|
54
51
|
@fields[name] = FieldNode.new(name, required, &block)
|
55
52
|
end
|
56
53
|
end
|
57
|
-
# rubocop: enable Style/IfInsideElse
|
58
54
|
|
59
55
|
@fields[name].type(:nil) if allow_nil
|
60
56
|
end
|
data/lib/schemacop/schema.rb
CHANGED
@@ -38,7 +38,7 @@ module Schemacop
|
|
38
38
|
# throughout the validation.
|
39
39
|
def validate(data)
|
40
40
|
collector = Collector.new
|
41
|
-
@root.fields[:root].validate({ root: data }, collector)
|
41
|
+
@root.fields[:root].validate({ root: data }, collector.ignore_next_segment)
|
42
42
|
return collector
|
43
43
|
end
|
44
44
|
|
@@ -5,8 +5,21 @@ module Schemacop
|
|
5
5
|
def validate(data, collector)
|
6
6
|
super
|
7
7
|
|
8
|
-
|
9
|
-
|
8
|
+
if data.is_a? ActiveSupport::HashWithIndifferentAccess
|
9
|
+
allowed_fields = @fields.keys.map { |k| k.is_a?(String) ? k.to_sym : k }
|
10
|
+
data_keys = data.keys.map { |k| k.is_a?(String) ? k.to_sym : k }
|
11
|
+
|
12
|
+
# If the same key is specified in the schema as string and symbol, we
|
13
|
+
# definitely expect a Ruby hash and not one with indifferent access
|
14
|
+
if @fields.keys.length != Set.new(allowed_fields).length
|
15
|
+
fail Exceptions::ValidationError, 'Hash expected, but got ActiveSupport::HashWithIndifferentAccess.'
|
16
|
+
end
|
17
|
+
else
|
18
|
+
allowed_fields = @fields.keys
|
19
|
+
data_keys = data.keys
|
20
|
+
end
|
21
|
+
|
22
|
+
obsolete_keys = data_keys - allowed_fields
|
10
23
|
|
11
24
|
collector.error "Obsolete keys: #{obsolete_keys.inspect}." if obsolete_keys.any?
|
12
25
|
|
@@ -3,13 +3,19 @@ module Schemacop
|
|
3
3
|
register symbols: :object, klasses: Object
|
4
4
|
|
5
5
|
option :classes
|
6
|
+
option :strict
|
6
7
|
|
7
8
|
def type_label
|
8
9
|
"#{super} (#{classes.join(', ')})"
|
9
10
|
end
|
10
11
|
|
11
12
|
def type_matches?(data)
|
12
|
-
|
13
|
+
if option(:strict).is_a?(FalseClass)
|
14
|
+
sub_or_class = classes.map { |klass| data.class <= klass }.include?(true)
|
15
|
+
super && (classes.empty? || sub_or_class) && !data.nil?
|
16
|
+
else
|
17
|
+
super && (classes.empty? || classes.include?(data.class)) && !data.nil?
|
18
|
+
end
|
13
19
|
end
|
14
20
|
|
15
21
|
private
|
data/schemacop.gemspec
CHANGED
@@ -1,20 +1,20 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: schemacop 2.
|
2
|
+
# stub: schemacop 2.3.2 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "schemacop".freeze
|
6
|
-
s.version = "2.
|
6
|
+
s.version = "2.3.2"
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib".freeze]
|
10
10
|
s.authors = ["Sitrox".freeze]
|
11
|
-
s.date = "
|
12
|
-
s.files = [".gitignore".freeze, ".releaser_config".freeze, ".rubocop.yml".freeze, ".travis.yml".freeze, ".yardopts".freeze, "CHANGELOG.md".freeze, "Gemfile".freeze, "LICENSE".freeze, "README.md".freeze, "RUBY_VERSION".freeze, "Rakefile".freeze, "VERSION".freeze, "doc/Schemacop.html".freeze, "doc/Schemacop/ArrayValidator.html".freeze, "doc/Schemacop/BooleanValidator.html".freeze, "doc/Schemacop/Collector.html".freeze, "doc/Schemacop/Exceptions.html".freeze, "doc/Schemacop/Exceptions/InvalidSchemaError.html".freeze, "doc/Schemacop/Exceptions/ValidationError.html".freeze, "doc/Schemacop/FieldNode.html".freeze, "doc/Schemacop/FloatValidator.html".freeze, "doc/Schemacop/HashValidator.html".freeze, "doc/Schemacop/IntegerValidator.html".freeze, "doc/Schemacop/NilValidator.html".freeze, "doc/Schemacop/Node.html".freeze, "doc/Schemacop/NodeResolver.html".freeze, "doc/Schemacop/NodeSupportingField.html".freeze, "doc/Schemacop/NodeSupportingType.html".freeze, "doc/Schemacop/NodeWithBlock.html".freeze, "doc/Schemacop/NumberValidator.html".freeze, "doc/Schemacop/ObjectValidator.html".freeze, "doc/Schemacop/RootNode.html".freeze, "doc/Schemacop/Schema.html".freeze, "doc/Schemacop/StringValidator.html".freeze, "doc/ScopedEnv.html".freeze, "doc/_index.html".freeze, "doc/class_list.html".freeze, "doc/css/common.css".freeze, "doc/css/full_list.css".freeze, "doc/css/style.css".freeze, "doc/file.README.html".freeze, "doc/file_list.html".freeze, "doc/frames.html".freeze, "doc/index.html".freeze, "doc/inheritance.graphml".freeze, "doc/inheritance.pdf".freeze, "doc/js/app.js".freeze, "doc/js/full_list.js".freeze, "doc/js/jquery.js".freeze, "doc/method_list.html".freeze, "doc/top-level-namespace.html".freeze, "lib/schemacop.rb".freeze, "lib/schemacop/collector.rb".freeze, "lib/schemacop/exceptions.rb".freeze, "lib/schemacop/field_node.rb".freeze, "lib/schemacop/node.rb".freeze, "lib/schemacop/node_resolver.rb".freeze, "lib/schemacop/node_supporting_field.rb".freeze, "lib/schemacop/node_supporting_type.rb".freeze, "lib/schemacop/node_with_block.rb".freeze, "lib/schemacop/root_node.rb".freeze, "lib/schemacop/schema.rb".freeze, "lib/schemacop/scoped_env.rb".freeze, "lib/schemacop/validator/array_validator.rb".freeze, "lib/schemacop/validator/boolean_validator.rb".freeze, "lib/schemacop/validator/float_validator.rb".freeze, "lib/schemacop/validator/hash_validator.rb".freeze, "lib/schemacop/validator/integer_validator.rb".freeze, "lib/schemacop/validator/nil_validator.rb".freeze, "lib/schemacop/validator/number_validator.rb".freeze, "lib/schemacop/validator/object_validator.rb".freeze, "lib/schemacop/validator/string_validator.rb".freeze, "schemacop.gemspec".freeze, "test/custom_check_test.rb".freeze, "test/custom_if_test.rb".freeze, "test/nil_dis_allow_test.rb".freeze, "test/short_forms_test.rb".freeze, "test/test_helper.rb".freeze, "test/types_test.rb".freeze, "test/validator_array_test.rb".freeze, "test/validator_boolean_test.rb".freeze, "test/validator_float_test.rb".freeze, "test/validator_hash_test.rb".freeze, "test/validator_integer_test.rb".freeze, "test/validator_nil_test.rb".freeze, "test/validator_number_test.rb".freeze, "test/validator_object_test.rb".freeze, "test/validator_string_test.rb".freeze]
|
11
|
+
s.date = "2019-09-26"
|
12
|
+
s.files = [".gitignore".freeze, ".releaser_config".freeze, ".rubocop.yml".freeze, ".travis.yml".freeze, ".yardopts".freeze, "CHANGELOG.md".freeze, "Gemfile".freeze, "LICENSE".freeze, "README.md".freeze, "RUBY_VERSION".freeze, "Rakefile".freeze, "VERSION".freeze, "doc/Schemacop.html".freeze, "doc/Schemacop/ArrayValidator.html".freeze, "doc/Schemacop/BooleanValidator.html".freeze, "doc/Schemacop/Collector.html".freeze, "doc/Schemacop/Exceptions.html".freeze, "doc/Schemacop/Exceptions/InvalidSchemaError.html".freeze, "doc/Schemacop/Exceptions/ValidationError.html".freeze, "doc/Schemacop/FieldNode.html".freeze, "doc/Schemacop/FloatValidator.html".freeze, "doc/Schemacop/HashValidator.html".freeze, "doc/Schemacop/IntegerValidator.html".freeze, "doc/Schemacop/NilValidator.html".freeze, "doc/Schemacop/Node.html".freeze, "doc/Schemacop/NodeResolver.html".freeze, "doc/Schemacop/NodeSupportingField.html".freeze, "doc/Schemacop/NodeSupportingType.html".freeze, "doc/Schemacop/NodeWithBlock.html".freeze, "doc/Schemacop/NumberValidator.html".freeze, "doc/Schemacop/ObjectValidator.html".freeze, "doc/Schemacop/RootNode.html".freeze, "doc/Schemacop/Schema.html".freeze, "doc/Schemacop/StringValidator.html".freeze, "doc/Schemacop/SymbolValidator.html".freeze, "doc/ScopedEnv.html".freeze, "doc/_index.html".freeze, "doc/class_list.html".freeze, "doc/css/common.css".freeze, "doc/css/full_list.css".freeze, "doc/css/style.css".freeze, "doc/file.README.html".freeze, "doc/file_list.html".freeze, "doc/frames.html".freeze, "doc/index.html".freeze, "doc/inheritance.graphml".freeze, "doc/inheritance.pdf".freeze, "doc/js/app.js".freeze, "doc/js/full_list.js".freeze, "doc/js/jquery.js".freeze, "doc/method_list.html".freeze, "doc/top-level-namespace.html".freeze, "lib/schemacop.rb".freeze, "lib/schemacop/collector.rb".freeze, "lib/schemacop/exceptions.rb".freeze, "lib/schemacop/field_node.rb".freeze, "lib/schemacop/node.rb".freeze, "lib/schemacop/node_resolver.rb".freeze, "lib/schemacop/node_supporting_field.rb".freeze, "lib/schemacop/node_supporting_type.rb".freeze, "lib/schemacop/node_with_block.rb".freeze, "lib/schemacop/root_node.rb".freeze, "lib/schemacop/schema.rb".freeze, "lib/schemacop/scoped_env.rb".freeze, "lib/schemacop/validator/array_validator.rb".freeze, "lib/schemacop/validator/boolean_validator.rb".freeze, "lib/schemacop/validator/float_validator.rb".freeze, "lib/schemacop/validator/hash_validator.rb".freeze, "lib/schemacop/validator/integer_validator.rb".freeze, "lib/schemacop/validator/nil_validator.rb".freeze, "lib/schemacop/validator/number_validator.rb".freeze, "lib/schemacop/validator/object_validator.rb".freeze, "lib/schemacop/validator/string_validator.rb".freeze, "lib/schemacop/validator/symbol_validator.rb".freeze, "schemacop.gemspec".freeze, "test/collector_test.rb".freeze, "test/custom_check_test.rb".freeze, "test/custom_if_test.rb".freeze, "test/nil_dis_allow_test.rb".freeze, "test/short_forms_test.rb".freeze, "test/test_helper.rb".freeze, "test/types_test.rb".freeze, "test/validator_array_test.rb".freeze, "test/validator_boolean_test.rb".freeze, "test/validator_float_test.rb".freeze, "test/validator_hash_test.rb".freeze, "test/validator_integer_test.rb".freeze, "test/validator_nil_test.rb".freeze, "test/validator_number_test.rb".freeze, "test/validator_object_test.rb".freeze, "test/validator_string_test.rb".freeze, "test/validator_symbol_test.rb".freeze]
|
13
13
|
s.homepage = "https://github.com/sitrox/schemacop".freeze
|
14
14
|
s.licenses = ["MIT".freeze]
|
15
|
-
s.rubygems_version = "
|
15
|
+
s.rubygems_version = "3.0.3".freeze
|
16
16
|
s.summary = "Schemacop validates ruby structures consisting of nested hashes and arrays against simple schema definitions.".freeze
|
17
|
-
s.test_files = ["test/custom_check_test.rb".freeze, "test/custom_if_test.rb".freeze, "test/nil_dis_allow_test.rb".freeze, "test/short_forms_test.rb".freeze, "test/test_helper.rb".freeze, "test/types_test.rb".freeze, "test/validator_array_test.rb".freeze, "test/validator_boolean_test.rb".freeze, "test/validator_float_test.rb".freeze, "test/validator_hash_test.rb".freeze, "test/validator_integer_test.rb".freeze, "test/validator_nil_test.rb".freeze, "test/validator_number_test.rb".freeze, "test/validator_object_test.rb".freeze, "test/validator_string_test.rb".freeze]
|
17
|
+
s.test_files = ["test/collector_test.rb".freeze, "test/custom_check_test.rb".freeze, "test/custom_if_test.rb".freeze, "test/nil_dis_allow_test.rb".freeze, "test/short_forms_test.rb".freeze, "test/test_helper.rb".freeze, "test/types_test.rb".freeze, "test/validator_array_test.rb".freeze, "test/validator_boolean_test.rb".freeze, "test/validator_float_test.rb".freeze, "test/validator_hash_test.rb".freeze, "test/validator_integer_test.rb".freeze, "test/validator_nil_test.rb".freeze, "test/validator_number_test.rb".freeze, "test/validator_object_test.rb".freeze, "test/validator_string_test.rb".freeze, "test/validator_symbol_test.rb".freeze]
|
18
18
|
|
19
19
|
if s.respond_to? :specification_version then
|
20
20
|
s.specification_version = 4
|
@@ -24,31 +24,31 @@ Gem::Specification.new do |s|
|
|
24
24
|
s.add_development_dependency(%q<rake>.freeze, [">= 0"])
|
25
25
|
s.add_development_dependency(%q<ci_reporter>.freeze, ["~> 2.0"])
|
26
26
|
s.add_development_dependency(%q<ci_reporter_minitest>.freeze, [">= 0"])
|
27
|
-
s.add_development_dependency(%q<activesupport>.freeze, [">= 0"])
|
28
27
|
s.add_development_dependency(%q<haml>.freeze, [">= 0"])
|
29
28
|
s.add_development_dependency(%q<yard>.freeze, [">= 0"])
|
30
29
|
s.add_development_dependency(%q<rubocop>.freeze, ["= 0.35.1"])
|
31
30
|
s.add_development_dependency(%q<redcarpet>.freeze, [">= 0"])
|
31
|
+
s.add_runtime_dependency(%q<activesupport>.freeze, [">= 4.0"])
|
32
32
|
else
|
33
33
|
s.add_dependency(%q<bundler>.freeze, ["~> 1.3"])
|
34
34
|
s.add_dependency(%q<rake>.freeze, [">= 0"])
|
35
35
|
s.add_dependency(%q<ci_reporter>.freeze, ["~> 2.0"])
|
36
36
|
s.add_dependency(%q<ci_reporter_minitest>.freeze, [">= 0"])
|
37
|
-
s.add_dependency(%q<activesupport>.freeze, [">= 0"])
|
38
37
|
s.add_dependency(%q<haml>.freeze, [">= 0"])
|
39
38
|
s.add_dependency(%q<yard>.freeze, [">= 0"])
|
40
39
|
s.add_dependency(%q<rubocop>.freeze, ["= 0.35.1"])
|
41
40
|
s.add_dependency(%q<redcarpet>.freeze, [">= 0"])
|
41
|
+
s.add_dependency(%q<activesupport>.freeze, [">= 4.0"])
|
42
42
|
end
|
43
43
|
else
|
44
44
|
s.add_dependency(%q<bundler>.freeze, ["~> 1.3"])
|
45
45
|
s.add_dependency(%q<rake>.freeze, [">= 0"])
|
46
46
|
s.add_dependency(%q<ci_reporter>.freeze, ["~> 2.0"])
|
47
47
|
s.add_dependency(%q<ci_reporter_minitest>.freeze, [">= 0"])
|
48
|
-
s.add_dependency(%q<activesupport>.freeze, [">= 0"])
|
49
48
|
s.add_dependency(%q<haml>.freeze, [">= 0"])
|
50
49
|
s.add_dependency(%q<yard>.freeze, [">= 0"])
|
51
50
|
s.add_dependency(%q<rubocop>.freeze, ["= 0.35.1"])
|
52
51
|
s.add_dependency(%q<redcarpet>.freeze, [">= 0"])
|
52
|
+
s.add_dependency(%q<activesupport>.freeze, [">= 4.0"])
|
53
53
|
end
|
54
54
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Schemacop
|
4
|
+
class CollectorTest < Minitest::Test
|
5
|
+
def test_no_root_node
|
6
|
+
s = Schema.new do
|
7
|
+
req :a, :string
|
8
|
+
end
|
9
|
+
|
10
|
+
col = s.validate(a: 0)
|
11
|
+
assert col.exceptions.first[:path].first !~ %r{^/root}, 'Root node is present in the path.'
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_correct_path
|
15
|
+
s = Schema.new do
|
16
|
+
req :long_symbol, :string
|
17
|
+
req 'long_string', :string
|
18
|
+
req 123, :string
|
19
|
+
end
|
20
|
+
|
21
|
+
col = s.validate('long_string' => 0, long_symbol: 0, 123 => 0)
|
22
|
+
|
23
|
+
symbol = col.exceptions[0]
|
24
|
+
string = col.exceptions[1]
|
25
|
+
number = col.exceptions[2]
|
26
|
+
|
27
|
+
assert symbol[:path].first =~ %r{^/long_symbol}
|
28
|
+
assert string[:path].first =~ %r{^/long_string}
|
29
|
+
assert number[:path].first =~ %r{^/123}
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_nested_paths
|
33
|
+
s = Schema.new do
|
34
|
+
req :one do
|
35
|
+
req :two, :string
|
36
|
+
end
|
37
|
+
req :three, :string
|
38
|
+
end
|
39
|
+
|
40
|
+
col = s.validate(one: { two: 0 }, three: 0)
|
41
|
+
assert_equal 2, col.exceptions[0][:path].length
|
42
|
+
assert_equal 1, col.exceptions[1][:path].length
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/test/custom_check_test.rb
CHANGED
@@ -12,6 +12,13 @@ module Schemacop
|
|
12
12
|
assert_verr { s.validate!(2.1) }
|
13
13
|
end
|
14
14
|
|
15
|
+
def test_custom_error_message
|
16
|
+
s = Schema.new :integer, check: proc { |i| i.even? ? true : 'Custom error' }
|
17
|
+
assert_nil s.validate!(2)
|
18
|
+
exception = assert_verr { s.validate!(3) }
|
19
|
+
assert_match(/Custom :check failed: Custom error\./, exception.message)
|
20
|
+
end
|
21
|
+
|
15
22
|
def test_integer_check_with_lambda
|
16
23
|
s = Schema.new do
|
17
24
|
type :integer, check: ->(i) { i.even? }
|
data/test/short_forms_test.rb
CHANGED
@@ -2,6 +2,9 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
module Schemacop
|
4
4
|
class ShortFormsTest < Minitest::Test
|
5
|
+
class User; end
|
6
|
+
class Group; end
|
7
|
+
|
5
8
|
def test_constructor_defaults_to_hash
|
6
9
|
s = Schema.new do
|
7
10
|
req! :r do
|
@@ -142,6 +145,7 @@ module Schemacop
|
|
142
145
|
end
|
143
146
|
req :name, :integer, min: 5, max: 7
|
144
147
|
req :id, [:integer, :string]
|
148
|
+
req :callback, :symbol
|
145
149
|
req :attrs do
|
146
150
|
req :color do
|
147
151
|
type :integer
|
@@ -161,6 +165,7 @@ module Schemacop
|
|
161
165
|
foo: { bar: nil },
|
162
166
|
attrs: { color: 5 },
|
163
167
|
id: 'hallo',
|
168
|
+
callback: :funky_function,
|
164
169
|
colors: [5, 'sdf'],
|
165
170
|
cars: [
|
166
171
|
{
|
@@ -312,5 +317,15 @@ module Schemacop
|
|
312
317
|
assert_verr { s.validate!('123') }
|
313
318
|
assert_verr { s.validate!(string: '1234') }
|
314
319
|
end
|
320
|
+
|
321
|
+
def test_inline_objects
|
322
|
+
s = Schema.new do
|
323
|
+
req :user, User
|
324
|
+
req :group, Group
|
325
|
+
end
|
326
|
+
|
327
|
+
assert_nil s.validate!(user: User.new, group: Group.new)
|
328
|
+
assert_verr { s.validate!(user: Group.new, group: User.new) }
|
329
|
+
end
|
315
330
|
end
|
316
331
|
end
|
data/test/types_test.rb
CHANGED
@@ -83,5 +83,23 @@ module Schemacop
|
|
83
83
|
assert_verr { s.validate!(fld: nil) }
|
84
84
|
assert_verr { s.validate!({}) }
|
85
85
|
end
|
86
|
+
|
87
|
+
def test_strict_option
|
88
|
+
s = Schema.new do
|
89
|
+
req :o_strict do
|
90
|
+
type :object, classes: User, strict: true
|
91
|
+
end
|
92
|
+
opt :o_ns do
|
93
|
+
type :object, classes: User, strict: false
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
assert_nil s.validate!(o_strict: User.new, o_ns: User.new)
|
98
|
+
assert_nil s.validate!(o_strict: User.new, o_ns: SubUser.new)
|
99
|
+
assert_nil s.validate!(o_strict: User.new)
|
100
|
+
assert_verr { s.validate!(o_strict: SubUser.new) }
|
101
|
+
assert_verr { s.validate!(o_strict: User.new, o_ns: AdminUser.new) }
|
102
|
+
assert_verr { s.validate!(o_strict: SubUser.new, o_ns: User.new) }
|
103
|
+
end
|
86
104
|
end
|
87
105
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Schemacop
|
4
|
+
class ValidatorSymbolTest < Minitest::Test
|
5
|
+
def test_basic
|
6
|
+
s = Schema.new do
|
7
|
+
type :symbol
|
8
|
+
end
|
9
|
+
|
10
|
+
assert_nil s.validate!(:good)
|
11
|
+
assert_nil s.validate!('-+/'.to_sym)
|
12
|
+
assert_verr { s.validate!('bad') }
|
13
|
+
assert_verr { s.validate!(456) }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: schemacop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sitrox
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-09-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,20 +66,6 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: activesupport
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
70
|
name: haml
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -136,6 +122,20 @@ dependencies:
|
|
136
122
|
- - ">="
|
137
123
|
- !ruby/object:Gem::Version
|
138
124
|
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: activesupport
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '4.0'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '4.0'
|
139
139
|
description:
|
140
140
|
email:
|
141
141
|
executables: []
|
@@ -176,6 +176,7 @@ files:
|
|
176
176
|
- doc/Schemacop/RootNode.html
|
177
177
|
- doc/Schemacop/Schema.html
|
178
178
|
- doc/Schemacop/StringValidator.html
|
179
|
+
- doc/Schemacop/SymbolValidator.html
|
179
180
|
- doc/ScopedEnv.html
|
180
181
|
- doc/_index.html
|
181
182
|
- doc/class_list.html
|
@@ -214,7 +215,9 @@ files:
|
|
214
215
|
- lib/schemacop/validator/number_validator.rb
|
215
216
|
- lib/schemacop/validator/object_validator.rb
|
216
217
|
- lib/schemacop/validator/string_validator.rb
|
218
|
+
- lib/schemacop/validator/symbol_validator.rb
|
217
219
|
- schemacop.gemspec
|
220
|
+
- test/collector_test.rb
|
218
221
|
- test/custom_check_test.rb
|
219
222
|
- test/custom_if_test.rb
|
220
223
|
- test/nil_dis_allow_test.rb
|
@@ -230,6 +233,7 @@ files:
|
|
230
233
|
- test/validator_number_test.rb
|
231
234
|
- test/validator_object_test.rb
|
232
235
|
- test/validator_string_test.rb
|
236
|
+
- test/validator_symbol_test.rb
|
233
237
|
homepage: https://github.com/sitrox/schemacop
|
234
238
|
licenses:
|
235
239
|
- MIT
|
@@ -249,13 +253,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
249
253
|
- !ruby/object:Gem::Version
|
250
254
|
version: '0'
|
251
255
|
requirements: []
|
252
|
-
|
253
|
-
rubygems_version: 2.6.8
|
256
|
+
rubygems_version: 3.0.3
|
254
257
|
signing_key:
|
255
258
|
specification_version: 4
|
256
259
|
summary: Schemacop validates ruby structures consisting of nested hashes and arrays
|
257
260
|
against simple schema definitions.
|
258
261
|
test_files:
|
262
|
+
- test/collector_test.rb
|
259
263
|
- test/custom_check_test.rb
|
260
264
|
- test/custom_if_test.rb
|
261
265
|
- test/nil_dis_allow_test.rb
|
@@ -271,3 +275,4 @@ test_files:
|
|
271
275
|
- test/validator_number_test.rb
|
272
276
|
- test/validator_object_test.rb
|
273
277
|
- test/validator_string_test.rb
|
278
|
+
- test/validator_symbol_test.rb
|