elasticgraph-json_schema 0.18.0.4 → 0.18.0.5
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 75d827eef96aa25f4944df19b2c6b23df331104ade84a814283735ffe14a93a1
|
4
|
+
data.tar.gz: b0faf506b264d67129755d90fbf637c545cf0b681f794480e69dfb0c39768a9e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b3e92ed760e08cc9c2e5b4a117110c8ff65725f711aa7a6c76920adbf5e7064e4fea04f58c106921e61abda5cf97ba50c76ce36cc051c9354233e032dee8f105
|
7
|
+
data.tar.gz: 8431eaa5c6d7080c6dfb6f7f1e8446642ea4cbcb5324911fef8377936f16bc38b0c21213abe5cd83a35d8f313b22b388ad352c1357e2fe0f73f75d872a61eea4
|
@@ -12,14 +12,23 @@ require "elastic_graph/support/hash_util"
|
|
12
12
|
require "json"
|
13
13
|
|
14
14
|
module ElasticGraph
|
15
|
+
# Provides [JSON Schema](https://json-schema.org/) validation for ElasticGraph.
|
15
16
|
module JSONSchema
|
16
|
-
# Provides a
|
17
|
+
# Provides a validator to validate a JSON schema definitions according to the JSON schema meta schema.
|
18
|
+
# The validator is configured to validate strictly, so that non-standard JSON schema properties are disallowed.
|
19
|
+
#
|
20
|
+
# @return [Validator]
|
21
|
+
# @see .elastic_graph_internal_meta_schema_validator
|
17
22
|
def self.strict_meta_schema_validator
|
18
23
|
@strict_meta_schema_validator ||= MetaSchemaLoader.load_strict_validator
|
19
24
|
end
|
20
25
|
|
21
|
-
# Provides a validator
|
22
|
-
#
|
26
|
+
# Provides a validator to validate a JSON schema definition according to the JSON schema meta schema.
|
27
|
+
# The validator is configured to validate strictly, so that non-standard JSON schema properties are disallowed,
|
28
|
+
# except for internal ElasticGraph metadata properties.
|
29
|
+
#
|
30
|
+
# @return [Validator]
|
31
|
+
# @see .strict_meta_schema_validator
|
23
32
|
def self.elastic_graph_internal_meta_schema_validator
|
24
33
|
@elastic_graph_internal_meta_schema_validator ||= MetaSchemaLoader.load_strict_validator({
|
25
34
|
"properties" => {
|
@@ -35,7 +44,11 @@ module ElasticGraph
|
|
35
44
|
})
|
36
45
|
end
|
37
46
|
|
47
|
+
# Responsible for building {Validator}s that can validate JSON schema definitions.
|
38
48
|
module MetaSchemaLoader
|
49
|
+
# Builds a validator to validate a JSON schema definition according to the JSON schema meta schema.
|
50
|
+
#
|
51
|
+
# @param overrides [Hash<String, Object>] meta schema overrides
|
39
52
|
def self.load_strict_validator(overrides = {})
|
40
53
|
# Downloaded from: https://json-schema.org/draft-07/schema
|
41
54
|
schema = ::JSON.parse(::File.read(::File.expand_path("../json_schema_draft_7_schema.json", __FILE__)))
|
@@ -10,11 +10,32 @@ require "json"
|
|
10
10
|
|
11
11
|
module ElasticGraph
|
12
12
|
module JSONSchema
|
13
|
+
# Responsible for validating JSON data against the ElasticGraph JSON schema for a particular type.
|
14
|
+
#
|
15
|
+
# @!attribute [r] schema
|
16
|
+
# @return [Hash<String, Object>] a JSON schema
|
17
|
+
# @!attribute [r] sanitize_pii
|
18
|
+
# @return [Boolean] whether to omit data that may contain PII from error messages
|
13
19
|
class Validator < ::Data.define(:schema, :sanitize_pii)
|
20
|
+
# Validates the given data against the JSON schema, returning true if the data is valid.
|
21
|
+
#
|
22
|
+
# @param data [Object] JSON data to validate
|
23
|
+
# @return [Boolean] true if the data is valid; false if it is invalid
|
24
|
+
#
|
25
|
+
# @see #validate
|
26
|
+
# @see #validate_with_error_message
|
14
27
|
def valid?(data)
|
15
28
|
schema.valid?(data)
|
16
29
|
end
|
17
30
|
|
31
|
+
# Validates the given data against the JSON schema, returning an array of error objects for
|
32
|
+
# any validation errors.
|
33
|
+
#
|
34
|
+
# @param data [Object] JSON data to validate
|
35
|
+
# @return [Array<Hash<String, Object>>] validation errors; will be empty if `data` is valid
|
36
|
+
#
|
37
|
+
# @see #valid?
|
38
|
+
# @see #validate_with_error_message
|
18
39
|
def validate(data)
|
19
40
|
schema.validate(data).map do |error|
|
20
41
|
# The schemas can be very large and make the output very noisy, hiding what matters. So we remove them here.
|
@@ -24,9 +45,16 @@ module ElasticGraph
|
|
24
45
|
end
|
25
46
|
end
|
26
47
|
|
27
|
-
# Validates the given data against the schema, returning an error message if it is invalid.
|
28
|
-
# The error message is
|
29
|
-
#
|
48
|
+
# Validates the given data against the JSON schema, returning an error message string if it is invalid.
|
49
|
+
# The error message is intended to be usable to include in a log message or a raised error.
|
50
|
+
#
|
51
|
+
# @param data [Object] JSON data to validate
|
52
|
+
# @return [nil, String] a validation error message, if the data is invalid
|
53
|
+
#
|
54
|
+
# @note The returned error message may contain PII unless {#sanitize_pii} has not been set.
|
55
|
+
#
|
56
|
+
# @see #valid?
|
57
|
+
# @see #validate
|
30
58
|
def validate_with_error_message(data)
|
31
59
|
errors = validate(data)
|
32
60
|
return if errors.empty?
|
@@ -11,10 +11,14 @@ require "json_schemer"
|
|
11
11
|
|
12
12
|
module ElasticGraph
|
13
13
|
module JSONSchema
|
14
|
+
# Factory class responsible for creating {Validator}s for particular ElasticGraph types.
|
14
15
|
class ValidatorFactory
|
15
16
|
# @dynamic root_schema
|
17
|
+
# @private
|
16
18
|
attr_reader :root_schema
|
17
19
|
|
20
|
+
# @param schema [Hash<String, Object>] the JSON schema for an entire ElasticGraph schema
|
21
|
+
# @param sanitize_pii [Boolean] whether to omit data that may contain PII from error messages
|
18
22
|
def initialize(schema:, sanitize_pii:)
|
19
23
|
@raw_schema = schema
|
20
24
|
@root_schema = ::JSONSchemer.schema(
|
@@ -39,9 +43,6 @@ module ElasticGraph
|
|
39
43
|
|
40
44
|
@sanitize_pii = sanitize_pii
|
41
45
|
@validators_by_type_name = ::Hash.new do |hash, key|
|
42
|
-
# Create a copy of the schema with a ref to the type merged at the root.
|
43
|
-
# This ensures that any relative $ref paths will correctly resolve, while
|
44
|
-
# specifying the type we want to validate against using $ref.
|
45
46
|
hash[key] = Validator.new(
|
46
47
|
schema: root_schema.ref("#/$defs/#{key}"),
|
47
48
|
sanitize_pii: sanitize_pii
|
@@ -49,12 +50,21 @@ module ElasticGraph
|
|
49
50
|
end
|
50
51
|
end
|
51
52
|
|
53
|
+
# Gets the {Validator} for a particular ElasticGraph type.
|
54
|
+
#
|
55
|
+
# @param type_name [String] name of an ElasticGraph type
|
56
|
+
# @return [Validator]
|
52
57
|
def validator_for(type_name)
|
53
58
|
@validators_by_type_name[type_name]
|
54
59
|
end
|
55
60
|
|
56
|
-
#
|
57
|
-
#
|
61
|
+
# Returns a new factory configured to disallow unknown properties. By default, JSON schema
|
62
|
+
# allows unknown properties (they'll simply be ignored when validating a JSON document). It
|
63
|
+
# can be useful to validate more strictly, so that a document with properties not defined in
|
64
|
+
# the JSON schema gets validation errors.
|
65
|
+
#
|
66
|
+
# @param except [Array<String>] paths under which unknown properties should still be allowed
|
67
|
+
# @return [ValidatorFactory]
|
58
68
|
def with_unknown_properties_disallowed(except: [])
|
59
69
|
allow_paths = except.map { |p| p.split(".") }
|
60
70
|
schema_copy = ::Marshal.load(::Marshal.dump(@raw_schema)) # deep copy so our mutations don't affect caller
|
metadata
CHANGED
@@ -1,14 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elasticgraph-json_schema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.18.0.
|
4
|
+
version: 0.18.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Myron Marston
|
8
|
+
- Ben VandenBos
|
9
|
+
- Square Engineering
|
8
10
|
autorequire:
|
9
11
|
bindir: exe
|
10
12
|
cert_chain: []
|
11
|
-
date: 2024-09-
|
13
|
+
date: 2024-09-20 00:00:00.000000000 Z
|
12
14
|
dependencies:
|
13
15
|
- !ruby/object:Gem::Dependency
|
14
16
|
name: rubocop-factory_bot
|
@@ -176,14 +178,14 @@ dependencies:
|
|
176
178
|
requirements:
|
177
179
|
- - '='
|
178
180
|
- !ruby/object:Gem::Version
|
179
|
-
version: 0.18.0.
|
181
|
+
version: 0.18.0.5
|
180
182
|
type: :runtime
|
181
183
|
prerelease: false
|
182
184
|
version_requirements: !ruby/object:Gem::Requirement
|
183
185
|
requirements:
|
184
186
|
- - '='
|
185
187
|
- !ruby/object:Gem::Version
|
186
|
-
version: 0.18.0.
|
188
|
+
version: 0.18.0.5
|
187
189
|
- !ruby/object:Gem::Dependency
|
188
190
|
name: json_schemer
|
189
191
|
requirement: !ruby/object:Gem::Requirement
|