strict_json_schema_generator 1.0.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 +7 -0
- data/lib/json/strict_schema_generator.rb +62 -0
- data/lib/rspec/strictly_match_schema.rb +7 -0
- data/lib/strict_json_schema_generator.rb +2 -0
- metadata +61 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: dbbea843ebad164d883cb1ecfdae9185b54ed118c812f84c589f3435c512dd88
|
4
|
+
data.tar.gz: cb62e100998e3b58f2fb52fc249baafb532b02e78f1732c98f0844514eae9c01
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9ec272b55d8c644cef6db7ccafbd3e257c745bf9dda8ba3a5058f2eaecf6d0fd8cc48be02f1339b17ca8bee7974dde1502350a3f471e63bf4643ca5abd52ccce
|
7
|
+
data.tar.gz: 8ebc9c1ebb8c3c1a0679dea66b3c3d902651b2d3f1722daec3be6ce37a38ee7890aaacfcce9c917a0e9ab75d3a1cd52edb477660ae7ea14cda72e20e848549ad
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module JSON
|
2
|
+
class StrictSchemaGenerator
|
3
|
+
attr_reader :schema
|
4
|
+
|
5
|
+
# beware that the provided object must have symbol keys and will be modified
|
6
|
+
def self.call(schema)
|
7
|
+
new(schema).strictify!
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize(schema)
|
11
|
+
@schema = schema
|
12
|
+
end
|
13
|
+
|
14
|
+
def strictify!
|
15
|
+
set_strict_attributes_for(schema)
|
16
|
+
|
17
|
+
schema
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def type
|
23
|
+
@type ||= schema[:type].to_s
|
24
|
+
end
|
25
|
+
|
26
|
+
def object?
|
27
|
+
type == 'object'
|
28
|
+
end
|
29
|
+
|
30
|
+
def object_with_properties?
|
31
|
+
object? && schema[:properties].is_a?(Hash)
|
32
|
+
end
|
33
|
+
|
34
|
+
def set_strict_attributes_for(schema_subset)
|
35
|
+
set_object_strict_attributes(schema_subset)
|
36
|
+
|
37
|
+
schema_subset.each do |_key, subset|
|
38
|
+
case subset
|
39
|
+
when Hash
|
40
|
+
self.class.call(subset)
|
41
|
+
when Array
|
42
|
+
subset.each do |item|
|
43
|
+
self.class.call(item) if item.is_a?(Hash)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def set_object_strict_attributes(schema_subset)
|
50
|
+
return unless object_with_properties?
|
51
|
+
|
52
|
+
schema_subset.merge!(
|
53
|
+
required: schema_subset[:required] || schema_subset[:properties].keys,
|
54
|
+
additionalProperties: false
|
55
|
+
)
|
56
|
+
|
57
|
+
schema_subset[:properties].each do |_, property|
|
58
|
+
self.class.call(property)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
metadata
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: strict_json_schema_generator
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Alexandre Bernard
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-07-12 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: json-schema
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.0'
|
27
|
+
description: Ease the pain from manually requiring all fields in a JSON Schema when
|
28
|
+
no required field list is specified
|
29
|
+
email: archiduc@alexandrebernard.com
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- lib/json/strict_schema_generator.rb
|
35
|
+
- lib/rspec/strictly_match_schema.rb
|
36
|
+
- lib/strict_json_schema_generator.rb
|
37
|
+
homepage: https://github.com/AlexandreBernard/rb_strict_json_schema_generator
|
38
|
+
licenses:
|
39
|
+
- MIT
|
40
|
+
metadata:
|
41
|
+
source_code_uri: https://github.com/AlexandreBernard/rb_strict_json_schema_generator
|
42
|
+
post_install_message:
|
43
|
+
rdoc_options: []
|
44
|
+
require_paths:
|
45
|
+
- lib
|
46
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
47
|
+
requirements:
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '0'
|
51
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '2.5'
|
56
|
+
requirements: []
|
57
|
+
rubygems_version: 3.1.4
|
58
|
+
signing_key:
|
59
|
+
specification_version: 4
|
60
|
+
summary: Transforms a JSON Schema to require all fields when not specified
|
61
|
+
test_files: []
|