@@ -87,47 +87,6 @@ class InvalidEcmaRegexp < StandardError; end
87
87
}
88
88
VOCABULARY_ORDER = VOCABULARIES . transform_values . with_index { |_vocabulary , index | index }
89
89
90
- DRAFT202012 = Schema . new (
91
- Draft202012 ::SCHEMA ,
92
- :base_uri => Draft202012 ::BASE_URI ,
93
- :ref_resolver => Draft202012 ::Meta ::SCHEMAS . to_proc ,
94
- :regexp_resolver => 'ecma'
95
- )
96
-
97
- DRAFT201909 = Schema . new (
98
- Draft201909 ::SCHEMA ,
99
- :base_uri => Draft201909 ::BASE_URI ,
100
- :ref_resolver => Draft201909 ::Meta ::SCHEMAS . to_proc ,
101
- :regexp_resolver => 'ecma'
102
- )
103
-
104
- DRAFT7 = Schema . new (
105
- Draft7 ::SCHEMA ,
106
- :vocabulary => { 'json-schemer://draft7' => true } ,
107
- :base_uri => Draft7 ::BASE_URI ,
108
- :regexp_resolver => 'ecma'
109
- )
110
-
111
- DRAFT6 = Schema . new (
112
- Draft6 ::SCHEMA ,
113
- :vocabulary => { 'json-schemer://draft6' => true } ,
114
- :base_uri => Draft6 ::BASE_URI ,
115
- :regexp_resolver => 'ecma'
116
- )
117
-
118
- DRAFT4 = Schema . new (
119
- Draft4 ::SCHEMA ,
120
- :vocabulary => { 'json-schemer://draft4' => true } ,
121
- :base_uri => Draft4 ::BASE_URI ,
122
- :regexp_resolver => 'ecma'
123
- )
124
-
125
- META_SCHEMAS_BY_BASE_URI_STR = [ DRAFT202012 , DRAFT201909 , DRAFT7 , DRAFT6 , DRAFT4 ] . each_with_object ( { } ) do |meta_schema , out |
126
- out [ meta_schema . base_uri . to_s ] = meta_schema
127
- end
128
- META_SCHEMAS_BY_BASE_URI_STR [ 'http://json-schema.org/schema#' ] = DRAFT4 # version-less $schema deprecated after Draft 4
129
- META_SCHEMAS_BY_BASE_URI_STR . freeze
130
-
131
90
WINDOWS_URI_PATH_REGEX = /\A \/ [a-z]:/i
132
91
133
92
FILE_URI_REF_RESOLVER = proc do |uri |
@@ -139,7 +98,7 @@ class InvalidEcmaRegexp < StandardError; end
139
98
end
140
99
141
100
class << self
142
- def schema ( schema , meta_schema : DRAFT202012 , **options )
101
+ def schema ( schema , meta_schema : draft202012 , **options )
143
102
case schema
144
103
when String
145
104
schema = JSON . parse ( schema )
@@ -167,5 +126,65 @@ def valid_schema?(schema, **options)
167
126
def validate_schema ( schema , **options )
168
127
schema ( schema , **options ) . validate_schema
169
128
end
129
+
130
+ def draft202012
131
+ @draft202012 ||= Schema . new (
132
+ Draft202012 ::SCHEMA ,
133
+ :base_uri => Draft202012 ::BASE_URI ,
134
+ :ref_resolver => Draft202012 ::Meta ::SCHEMAS . to_proc ,
135
+ :regexp_resolver => 'ecma'
136
+ )
137
+ end
138
+
139
+ def draft201909
140
+ @draft201909 ||= Schema . new (
141
+ Draft201909 ::SCHEMA ,
142
+ :base_uri => Draft201909 ::BASE_URI ,
143
+ :ref_resolver => Draft201909 ::Meta ::SCHEMAS . to_proc ,
144
+ :regexp_resolver => 'ecma'
145
+ )
146
+ end
147
+
148
+ def draft7
149
+ @draft7 ||= Schema . new (
150
+ Draft7 ::SCHEMA ,
151
+ :vocabulary => { 'json-schemer://draft7' => true } ,
152
+ :base_uri => Draft7 ::BASE_URI ,
153
+ :regexp_resolver => 'ecma'
154
+ )
155
+ end
156
+
157
+ def draft6
158
+ @draft6 ||= Schema . new (
159
+ Draft6 ::SCHEMA ,
160
+ :vocabulary => { 'json-schemer://draft6' => true } ,
161
+ :base_uri => Draft6 ::BASE_URI ,
162
+ :regexp_resolver => 'ecma'
163
+ )
164
+ end
165
+
166
+ def draft4
167
+ @draft4 ||= Schema . new (
168
+ Draft4 ::SCHEMA ,
169
+ :vocabulary => { 'json-schemer://draft4' => true } ,
170
+ :base_uri => Draft4 ::BASE_URI ,
171
+ :regexp_resolver => 'ecma'
172
+ )
173
+ end
174
+ end
175
+
176
+ META_SCHEMA_CALLABLES_BY_BASE_URI_STR = {
177
+ Draft202012 ::BASE_URI . to_s => method ( :draft202012 ) ,
178
+ Draft201909 ::BASE_URI . to_s => method ( :draft201909 ) ,
179
+ Draft7 ::BASE_URI . to_s => method ( :draft7 ) ,
180
+ Draft6 ::BASE_URI . to_s => method ( :draft6 ) ,
181
+ Draft4 ::BASE_URI . to_s => method ( :draft4 ) ,
182
+ # version-less $schema deprecated after Draft 4
183
+ 'http://json-schema.org/schema#' => method ( :draft4 )
184
+ } . freeze
185
+
186
+ META_SCHEMAS_BY_BASE_URI_STR = Hash . new do |hash , base_uri_str |
187
+ next unless META_SCHEMA_CALLABLES_BY_BASE_URI_STR . key? ( base_uri_str )
188
+ hash [ base_uri_str ] = META_SCHEMA_CALLABLES_BY_BASE_URI_STR . fetch ( base_uri_str ) . call
170
189
end
171
190
end
0 commit comments