schemurai 3.1.0-aarch64-linux-gnu

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.
Files changed (48) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +395 -0
  4. data/lib/schemurai/backend.rb +34 -0
  5. data/lib/schemurai/container_checks/array_diagnostics.rb +119 -0
  6. data/lib/schemurai/container_checks/object_diagnostics.rb +152 -0
  7. data/lib/schemurai/container_checks.rb +534 -0
  8. data/lib/schemurai/decimal.rb +11 -0
  9. data/lib/schemurai/dialect.rb +106 -0
  10. data/lib/schemurai/dialect_keywords.rb +91 -0
  11. data/lib/schemurai/dialects/draft2019_09.rb +27 -0
  12. data/lib/schemurai/dialects/draft2020_12.rb +27 -0
  13. data/lib/schemurai/dialects/draft7.rb +27 -0
  14. data/lib/schemurai/ecma_regexp.rb +46 -0
  15. data/lib/schemurai/error_message.rb +102 -0
  16. data/lib/schemurai/evaluation.rb +63 -0
  17. data/lib/schemurai/evaluation_limits.rb +65 -0
  18. data/lib/schemurai/evaluation_pool.rb +66 -0
  19. data/lib/schemurai/evaluator.rb +861 -0
  20. data/lib/schemurai/formats.rb +403 -0
  21. data/lib/schemurai/json_pointer.rb +11 -0
  22. data/lib/schemurai/limit_budget.rb +78 -0
  23. data/lib/schemurai/limit_exceeded.rb +18 -0
  24. data/lib/schemurai/limited_evaluator.rb +43 -0
  25. data/lib/schemurai/meta_schemas/draft2019_09.rb +149 -0
  26. data/lib/schemurai/meta_schemas/draft2020_12.rb +149 -0
  27. data/lib/schemurai/meta_schemas/draft7.rb +121 -0
  28. data/lib/schemurai/meta_schemas.rb +28 -0
  29. data/lib/schemurai/native/4.0/schemurai_native.so +0 -0
  30. data/lib/schemurai/native/diagnostics.rb +53 -0
  31. data/lib/schemurai/native/evaluator.rb +87 -0
  32. data/lib/schemurai/native/null_numeric.rb +23 -0
  33. data/lib/schemurai/number_checks.rb +128 -0
  34. data/lib/schemurai/schema_domain.rb +95 -0
  35. data/lib/schemurai/schema_graph.rb +538 -0
  36. data/lib/schemurai/schema_node.rb +55 -0
  37. data/lib/schemurai/string_checks.rb +166 -0
  38. data/lib/schemurai/type_checks.rb +59 -0
  39. data/lib/schemurai/unique_items.rb +68 -0
  40. data/lib/schemurai/value_equality.rb +72 -0
  41. data/lib/schemurai/version.rb +6 -0
  42. data/lib/schemurai/vm/compiler.rb +410 -0
  43. data/lib/schemurai/vm/evaluator.rb +663 -0
  44. data/lib/schemurai/vm/limited_evaluator.rb +27 -0
  45. data/lib/schemurai.rb +307 -0
  46. data/lib/schemurai_native.rb +4 -0
  47. data/sig/schemurai.rbs +108 -0
  48. metadata +121 -0
data/lib/schemurai.rb ADDED
@@ -0,0 +1,307 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "schemurai/version"
4
+ require_relative "schemurai/backend"
5
+ require_relative "schemurai/formats"
6
+ require_relative "schemurai/schema_graph"
7
+ require_relative "schemurai/evaluator"
8
+
9
+ # Public API for compiling and evaluating JSON Schemas.
10
+ module Schemurai
11
+ # Base class for errors raised by Schemurai.
12
+ class Error < StandardError; end
13
+
14
+ require_relative "schemurai/limited_evaluator"
15
+
16
+ # Raised when a schema or URI cannot be resolved from a registry.
17
+ class ResolutionError < Error; end
18
+
19
+ # Raised when a schema requires a format assertion Schemurai does not support.
20
+ class UnsupportedFormatError < Error; end
21
+
22
+ # Raised when a schema does not conform to its declared meta-schema.
23
+ class InvalidSchemaError < Error
24
+ # The detailed meta-schema validation result.
25
+ attr_reader :result
26
+
27
+ def initialize(result)
28
+ @result = result
29
+ first_error = result.errors.first
30
+ message = if first_error
31
+ "invalid schema at #{first_error.instance_path.inspect}: #{first_error.message}"
32
+ else
33
+ "invalid schema"
34
+ end
35
+ super(message)
36
+ end
37
+ end
38
+
39
+ # Public value type describing one failed JSON Schema assertion.
40
+ #
41
+ # +keyword+ identifies the failed keyword. +instance_path+ and +schema_path+
42
+ # are JSON Pointers; an empty string points to the root instance or schema.
43
+ # +message+ is a human-readable String. Its presence and type are public API,
44
+ # but its exact wording is not. Use +keyword+ and the paths for programmatic
45
+ # error handling.
46
+ class ValidationError < Data.define(:keyword, :instance_path, :schema_path, :message)
47
+ # Returns the error fields as a Hash.
48
+ def to_h
49
+ {keyword: keyword, instance_path: instance_path, schema_path: schema_path, message: message}
50
+ end
51
+ end
52
+
53
+ # The detailed result of validating one instance.
54
+ class Result
55
+ # The frozen array of ValidationError objects. It is empty when validation
56
+ # succeeds.
57
+ attr_reader :errors
58
+
59
+ # Creates a result from an array of ValidationError objects.
60
+ def initialize(errors)
61
+ @errors = errors.freeze
62
+ end
63
+
64
+ # Returns whether the instance passed validation.
65
+ def valid?
66
+ errors.empty?
67
+ end
68
+
69
+ alias_method :success?, :valid?
70
+ end
71
+
72
+ # Compiles schemas that share registered external schemas and backend state.
73
+ #
74
+ # Register every external schema with +schemas:+ before compiling. A registry
75
+ # can be made shareable once registration and compilation are complete.
76
+ class SchemaRegistry
77
+ # The selected backend, +:ruby+, +:vm+, or +:native+.
78
+ attr_reader :backend
79
+
80
+ # Creates a registry.
81
+ #
82
+ # +schemas+ maps absolute URI strings to JSON-shaped Ruby schemas. Pass
83
+ # +validate_schema: true+ to validate every registered and compiled schema
84
+ # against its meta-schema. +backend+ accepts +:ruby+, +:vm+, +:native+, or +:default+.
85
+ def initialize(schemas: {}, validate_schema: false, backend: Backend.requested)
86
+ @backend = Backend.resolve(backend)
87
+ @validate_schema = validate_schema
88
+ @graph = Internal::SchemaGraph.new(schemas: schemas)
89
+ @compiler = VM::Compiler.new(@graph) if %i[vm native].include?(@backend)
90
+ schemas.each_value { |schema| validate_schema!(schema) } if validate_schema?
91
+ end
92
+
93
+ # Returns whether this registry validates every schema against its meta-schema.
94
+ def validate_schema?
95
+ @validate_schema
96
+ end
97
+
98
+ # Compiles +schema+ and returns a Validator.
99
+ #
100
+ # +base_uri+ supplies the schema's base URI. Pass +content: true+ or
101
+ # +format: true+ to enable the corresponding optional assertions. +max_errors:+ and +timeout:+
102
+ # configure per-call validation caps; schema compilation is not bounded.
103
+ def compile(schema, base_uri: nil, content: false, format: false, max_errors: nil, timeout: nil)
104
+ raise Error, "cannot compile schemas after the registry is made shareable" if shareable?
105
+
106
+ validate_schema!(schema) if validate_schema?
107
+ root = @graph.compile(schema, base_uri: base_uri)
108
+ build_validator(root, content: content, format: format, max_errors: max_errors, timeout: timeout)
109
+ end
110
+
111
+ # Validates +schema+ against its declared meta-schema and returns a Result.
112
+ # Schemas without +$schema+ are validated as Draft 7.
113
+ def validate_schema(schema, max_errors: nil, timeout: nil)
114
+ raise Error, "cannot validate schemas after the registry is made shareable" if shareable?
115
+
116
+ root = @graph.meta_schema_root(schema)
117
+ build_validator(root, content: false, format: false, max_errors: max_errors, timeout: timeout).validate(schema)
118
+ end
119
+
120
+ # Returns whether +schema+ conforms to its declared meta-schema.
121
+ def valid_schema?(schema, max_errors: nil, timeout: nil)
122
+ raise Error, "cannot validate schemas after the registry is made shareable" if shareable?
123
+
124
+ root = @graph.meta_schema_root(schema)
125
+ build_validator(root, content: false, format: false, max_errors: max_errors, timeout: timeout).valid?(schema)
126
+ end
127
+
128
+ # Resolves and freezes registered schemas, then makes the registry Ractor-shareable.
129
+ #
130
+ # Returns +self+. No more schemas can be compiled after this transition.
131
+ def make_shareable
132
+ return self if shareable?
133
+
134
+ @graph.make_shareable
135
+ @compiler&.compile_all
136
+ if @backend == :native
137
+ programs = @graph.nodes.map { |node| @compiler.compile(node) }
138
+ # Build every option variant before the registry becomes immutable.
139
+ @native_programs = [false, true].product([false, true]).to_h do |format, content|
140
+ [[format, content], Native::Program.new(programs, @compiler, format, content).make_shareable]
141
+ end
142
+ end
143
+ Ractor.make_shareable(self)
144
+ end
145
+
146
+ # Returns whether this registry is Ractor-shareable.
147
+ def shareable?
148
+ Ractor.shareable?(self)
149
+ end
150
+
151
+ # Returns a Validator for the registered resource at +uri+.
152
+ #
153
+ # The registry must first be made shareable with #make_shareable.
154
+ def validator_for(uri, content: false, format: false, max_errors: nil, timeout: nil)
155
+ raise Error, "make_shareable must be called before retrieving validators by URI" unless shareable?
156
+
157
+ root = @graph.node_at(uri)
158
+ raise ResolutionError, "unregistered schema URI #{uri.inspect}" unless root
159
+
160
+ build_validator(root, content: content, format: format, max_errors: max_errors, timeout: timeout)
161
+ end
162
+
163
+ private def build_validator(root, content:, format:, max_errors: nil, timeout: nil)
164
+ evaluator = if @compiler
165
+ program = @compiler.compile(root)
166
+ evaluator_class = (@backend == :native) ? Native::Evaluator : VM::Evaluator
167
+ if @native_programs
168
+ compiled = @native_programs.fetch([!!format, !!content])
169
+ Native::Evaluator.new(@graph, @compiler, program, content: content, format: format, compiled: compiled)
170
+ else
171
+ evaluator_class.new(@graph, @compiler, program, content: content, format: format)
172
+ end
173
+ else
174
+ Internal::Evaluator.new(@graph, root, content: content, format: format)
175
+ end
176
+ bounded_evaluator = lambda do
177
+ case @backend
178
+ when :native then evaluator
179
+ when :vm then VM::LimitedEvaluator.new(@graph, @compiler, program, content: content, format: format)
180
+ else Internal::LimitedEvaluator.new(@graph, root, content: content, format: format)
181
+ end
182
+ end
183
+ Validator.new(evaluator, max_errors: max_errors, timeout: timeout, bounded_evaluator: bounded_evaluator)
184
+ end
185
+
186
+ private def validate_schema!(schema)
187
+ result = validate_schema(schema)
188
+ raise InvalidSchemaError, result unless result.valid?
189
+ end
190
+ end
191
+
192
+ # A reusable compiled JSON Schema validator.
193
+ #
194
+ # Create validators through Schemurai.compile or SchemaRegistry#compile.
195
+ # Validator instances contain mutable evaluation state and must not be used
196
+ # concurrently or shared between Ractors.
197
+ class Validator
198
+ # Wraps an evaluator implementation.
199
+ #
200
+ # Applications should normally create validators through Schemurai.compile
201
+ # or SchemaRegistry#compile.
202
+ def initialize(evaluator, max_errors: nil, timeout: nil, bounded_evaluator: nil)
203
+ @evaluator = evaluator
204
+ Internal::LimitBudget.validate_options!(max_errors, timeout)
205
+ @max_errors = max_errors
206
+ @timeout = timeout
207
+ @bounded_evaluator = bounded_evaluator
208
+ end
209
+
210
+ # The backend reported by the evaluator, +:ruby+, +:vm+, or +:native+.
211
+ def backend
212
+ @evaluator.backend
213
+ end
214
+
215
+ # Validates +instance+ and returns a Result containing all reported errors.
216
+ # +max_errors:+ and +timeout:+ override compiled defaults. Raises LimitExceeded when evaluation
217
+ # cannot complete; no partial Result is returned.
218
+ def validate(instance, max_errors: @max_errors, timeout: @timeout)
219
+ Internal::LimitBudget.validate_options!(max_errors, timeout)
220
+ return @evaluator.validate(instance) if max_errors.nil? && timeout.nil?
221
+
222
+ limited_evaluator.validate(instance, max_errors: max_errors, timeout: timeout)
223
+ end
224
+
225
+ # Returns whether +instance+ is valid without building a detailed error list.
226
+ # The timeout applies; the diagnostic count limit is ignored.
227
+ def valid?(instance, max_errors: @max_errors, timeout: @timeout)
228
+ Internal::LimitBudget.validate_options!(max_errors, timeout)
229
+ return @evaluator.valid?(instance) if timeout.nil?
230
+
231
+ limited_evaluator.valid?(instance, timeout: timeout)
232
+ end
233
+
234
+ private def limited_evaluator
235
+ raise ArgumentError, "this manually constructed Validator has no bounded evaluator" unless @bounded_evaluator
236
+
237
+ @bounded_evaluator.call
238
+ end
239
+ end
240
+
241
+ # Returns the backend selected by SCHEMURAI_BACKEND, +:ruby+, +:vm+, or +:native+.
242
+ module_function def backend
243
+ Backend.resolve
244
+ end
245
+
246
+ # Compiles +schema+ and returns a reusable Validator.
247
+ #
248
+ # +schemas+ maps external URI strings to schemas. +base_uri+ supplies the
249
+ # schema's base URI. Optional content and format assertions are disabled by
250
+ # default. +backend+ accepts +:ruby+, +:vm+, +:native+, or +:default+.
251
+ module_function def compile(schema, schemas: {}, base_uri: nil, content: false, format: false, validate_schema: false, backend: Backend.requested, max_errors: nil, timeout: nil)
252
+ SchemaRegistry.new(schemas: schemas, validate_schema: validate_schema, backend: backend).compile(
253
+ schema,
254
+ base_uri: base_uri,
255
+ content: content,
256
+ format: format,
257
+ max_errors: max_errors, timeout: timeout
258
+ )
259
+ end
260
+
261
+ # Validates +schema+ against its declared meta-schema and returns a Result.
262
+ # Schemas without +$schema+ are validated as Draft 7.
263
+ module_function def validate_schema(schema, schemas: {}, backend: Backend.requested, max_errors: nil, timeout: nil)
264
+ SchemaRegistry.new(schemas: schemas, backend: backend).validate_schema(schema, max_errors: max_errors, timeout: timeout)
265
+ end
266
+
267
+ # Returns whether +schema+ conforms to its declared meta-schema.
268
+ module_function def valid_schema?(schema, schemas: {}, backend: Backend.requested, max_errors: nil, timeout: nil)
269
+ SchemaRegistry.new(schemas: schemas, backend: backend).valid_schema?(schema, max_errors: max_errors, timeout: timeout)
270
+ end
271
+
272
+ # Validates +instance+ against +schema+ and returns a Result.
273
+ #
274
+ # This convenience method compiles the schema for each call. Use .compile
275
+ # when validating multiple instances against the same schema.
276
+ module_function def validate(schema, instance, schemas: {}, base_uri: nil, content: false, format: false, validate_schema: false, backend: Backend.requested, max_errors: nil, timeout: nil)
277
+ compile(
278
+ schema,
279
+ schemas: schemas,
280
+ base_uri: base_uri,
281
+ content: content,
282
+ format: format,
283
+ validate_schema: validate_schema,
284
+ backend: backend,
285
+ max_errors: max_errors, timeout: timeout
286
+ ).validate(instance)
287
+ end
288
+
289
+ # Returns whether +instance+ is valid against +schema+.
290
+ #
291
+ # This convenience method compiles the schema for each call. Use .compile
292
+ # when validating multiple instances against the same schema.
293
+ module_function def valid?(schema, instance, schemas: {}, base_uri: nil, content: false, format: false, validate_schema: false, backend: Backend.requested, max_errors: nil, timeout: nil)
294
+ compile(
295
+ schema,
296
+ schemas: schemas,
297
+ base_uri: base_uri,
298
+ content: content,
299
+ format: format,
300
+ validate_schema: validate_schema,
301
+ backend: backend,
302
+ max_errors: max_errors, timeout: timeout
303
+ ).valid?(instance)
304
+ end
305
+
306
+ private_constant :Backend
307
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Installed as lib/schemurai_native.rb in binary gems only.
4
+ require_relative "schemurai/native/#{RUBY_VERSION.split(".").first(2).join(".")}/schemurai_native"
data/sig/schemurai.rbs ADDED
@@ -0,0 +1,108 @@
1
+ module Schemurai
2
+ # A JSON-shaped Ruby value accepted as a schema value or validation instance.
3
+ type json_value = nil | bool | Integer | Float | String | Array[json_value] | Hash[String, json_value]
4
+
5
+ # A JSON Schema root.
6
+ type schema = bool | Hash[String, json_value]
7
+
8
+ # External schemas indexed by their absolute URI.
9
+ type schemas = Hash[String, schema]
10
+
11
+ # A resolved evaluator backend.
12
+ type backend = :ruby | :vm | :native
13
+
14
+ # A backend accepted when configuring a validator.
15
+ type backend_selection = backend | :default
16
+
17
+ VERSION: String
18
+
19
+ class Error < StandardError
20
+ end
21
+
22
+ class LimitExceeded < Error
23
+ attr_reader limit: Symbol
24
+ attr_reader maximum: Integer | Float
25
+ attr_reader attempted: Integer | Float
26
+
27
+ def initialize: (Symbol limit, Integer | Float maximum, Integer | Float attempted) -> void
28
+ end
29
+
30
+ class ResolutionError < Error
31
+ end
32
+
33
+ class UnsupportedFormatError < Error
34
+ end
35
+
36
+ class InvalidSchemaError < Error
37
+ attr_reader result: Result
38
+
39
+ def initialize: (Result result) -> void
40
+ end
41
+
42
+ class ValidationError < Data
43
+ attr_reader keyword: String
44
+ attr_reader instance_path: String
45
+ attr_reader schema_path: String
46
+ attr_reader message: String
47
+
48
+ def self.new: (String keyword, String instance_path, String schema_path, String message) -> ValidationError
49
+ | (keyword: String, instance_path: String, schema_path: String, message: String) -> ValidationError
50
+
51
+ def self.[]: (String keyword, String instance_path, String schema_path, String message) -> ValidationError
52
+ | (keyword: String, instance_path: String, schema_path: String, message: String) -> ValidationError
53
+
54
+ def to_h: () -> { keyword: String, instance_path: String, schema_path: String, message: String }
55
+ end
56
+
57
+ class Result
58
+ attr_reader errors: Array[ValidationError]
59
+
60
+ def initialize: (Array[ValidationError] errors) -> void
61
+ def valid?: () -> bool
62
+ alias success? valid?
63
+ end
64
+
65
+ interface _Evaluator
66
+ def backend: () -> backend
67
+
68
+ def validate: (json_value instance) -> Result
69
+
70
+ def valid?: (json_value instance) -> bool
71
+ end
72
+
73
+ class Validator
74
+ def initialize: (_Evaluator evaluator, ?max_errors: Integer?, ?timeout: (Integer | Float)?, ?bounded_evaluator: (^() -> untyped)?) -> void
75
+ def backend: () -> backend
76
+ def validate: (json_value instance, ?max_errors: Integer?, ?timeout: (Integer | Float)?) -> Result
77
+ def valid?: (json_value instance, ?max_errors: Integer?, ?timeout: (Integer | Float)?) -> bool
78
+ end
79
+
80
+ class SchemaRegistry
81
+ attr_reader backend: backend
82
+
83
+ def initialize: (?schemas: schemas, ?validate_schema: bool, ?backend: backend_selection) -> void
84
+
85
+ def validate_schema?: () -> bool
86
+
87
+ def compile: (schema schema, ?base_uri: String?, ?content: bool, ?format: bool, ?max_errors: Integer?, ?timeout: (Integer | Float)?) -> Validator
88
+
89
+ def validate_schema: (schema schema, ?max_errors: Integer?, ?timeout: (Integer | Float)?) -> Result
90
+ def valid_schema?: (schema schema, ?max_errors: Integer?, ?timeout: (Integer | Float)?) -> bool
91
+ def make_shareable: () -> self
92
+ def shareable?: () -> bool
93
+
94
+ def validator_for: (String uri, ?content: bool, ?format: bool, ?max_errors: Integer?, ?timeout: (Integer | Float)?) -> Validator
95
+ end
96
+
97
+ def self.backend: () -> backend
98
+
99
+ def self.compile: (schema schema, ?schemas: schemas, ?base_uri: String?, ?content: bool, ?format: bool, ?validate_schema: bool, ?backend: backend_selection, ?max_errors: Integer?, ?timeout: (Integer | Float)?) -> Validator
100
+
101
+ def self.validate_schema: (schema schema, ?schemas: schemas, ?backend: backend_selection, ?max_errors: Integer?, ?timeout: (Integer | Float)?) -> Result
102
+
103
+ def self.valid_schema?: (schema schema, ?schemas: schemas, ?backend: backend_selection, ?max_errors: Integer?, ?timeout: (Integer | Float)?) -> bool
104
+
105
+ def self.validate: (schema schema, json_value instance, ?schemas: schemas, ?base_uri: String?, ?content: bool, ?format: bool, ?validate_schema: bool, ?backend: backend_selection, ?max_errors: Integer?, ?timeout: (Integer | Float)?) -> Result
106
+
107
+ def self.valid?: (schema schema, json_value instance, ?schemas: schemas, ?base_uri: String?, ?content: bool, ?format: bool, ?validate_schema: bool, ?backend: backend_selection, ?max_errors: Integer?, ?timeout: (Integer | Float)?) -> bool
108
+ end
metadata ADDED
@@ -0,0 +1,121 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: schemurai
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.1.0
5
+ platform: aarch64-linux-gnu
6
+ authors:
7
+ - Kuya KOHARA (oakcask)
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: base64
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
26
+ description: Validates Ruby values against JSON Schema Draft 7, 2019-09, and 2020-12
27
+ schemas.
28
+ email:
29
+ - kuya.kohara@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files:
33
+ - LICENSE
34
+ - README.md
35
+ files:
36
+ - LICENSE
37
+ - README.md
38
+ - lib/schemurai.rb
39
+ - lib/schemurai/backend.rb
40
+ - lib/schemurai/container_checks.rb
41
+ - lib/schemurai/container_checks/array_diagnostics.rb
42
+ - lib/schemurai/container_checks/object_diagnostics.rb
43
+ - lib/schemurai/decimal.rb
44
+ - lib/schemurai/dialect.rb
45
+ - lib/schemurai/dialect_keywords.rb
46
+ - lib/schemurai/dialects/draft2019_09.rb
47
+ - lib/schemurai/dialects/draft2020_12.rb
48
+ - lib/schemurai/dialects/draft7.rb
49
+ - lib/schemurai/ecma_regexp.rb
50
+ - lib/schemurai/error_message.rb
51
+ - lib/schemurai/evaluation.rb
52
+ - lib/schemurai/evaluation_limits.rb
53
+ - lib/schemurai/evaluation_pool.rb
54
+ - lib/schemurai/evaluator.rb
55
+ - lib/schemurai/formats.rb
56
+ - lib/schemurai/json_pointer.rb
57
+ - lib/schemurai/limit_budget.rb
58
+ - lib/schemurai/limit_exceeded.rb
59
+ - lib/schemurai/limited_evaluator.rb
60
+ - lib/schemurai/meta_schemas.rb
61
+ - lib/schemurai/meta_schemas/draft2019_09.rb
62
+ - lib/schemurai/meta_schemas/draft2020_12.rb
63
+ - lib/schemurai/meta_schemas/draft7.rb
64
+ - lib/schemurai/native/4.0/schemurai_native.so
65
+ - lib/schemurai/native/diagnostics.rb
66
+ - lib/schemurai/native/evaluator.rb
67
+ - lib/schemurai/native/null_numeric.rb
68
+ - lib/schemurai/number_checks.rb
69
+ - lib/schemurai/schema_domain.rb
70
+ - lib/schemurai/schema_graph.rb
71
+ - lib/schemurai/schema_node.rb
72
+ - lib/schemurai/string_checks.rb
73
+ - lib/schemurai/type_checks.rb
74
+ - lib/schemurai/unique_items.rb
75
+ - lib/schemurai/value_equality.rb
76
+ - lib/schemurai/version.rb
77
+ - lib/schemurai/vm/compiler.rb
78
+ - lib/schemurai/vm/evaluator.rb
79
+ - lib/schemurai/vm/limited_evaluator.rb
80
+ - lib/schemurai_native.rb
81
+ - sig/schemurai.rbs
82
+ homepage: https://github.com/oakcask/schemurai
83
+ licenses:
84
+ - MIT
85
+ metadata:
86
+ homepage_uri: https://github.com/oakcask/schemurai
87
+ source_code_uri: https://github.com/oakcask/schemurai/tree/main
88
+ documentation_uri: https://rubydoc.info/gems/schemurai/3.1.0
89
+ rubygems_mfa_required: 'true'
90
+ rdoc_options:
91
+ - "--main"
92
+ - README.md
93
+ - "--title"
94
+ - Schemurai API Documentation
95
+ - "--visibility"
96
+ - public
97
+ - "--exclude"
98
+ - lib/schemurai/(?!(?:version|limit_exceeded)\.rb)
99
+ require_paths:
100
+ - lib
101
+ required_ruby_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '4.0'
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: 4.0.0
109
+ - - "<"
110
+ - !ruby/object:Gem::Version
111
+ version: 4.1.0
112
+ required_rubygems_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ requirements: []
118
+ rubygems_version: 4.0.20
119
+ specification_version: 4
120
+ summary: A fast, Ractor-safe JSON Schema Draft 7+ validator
121
+ test_files: []