Module: JSONSchemer
- Defined in:
- lib/json_schemer/errors.rb,
lib/json_schemer.rb,
lib/json_schemer/format.rb,
lib/json_schemer/version.rb,
lib/json_schemer/ecma_regexp.rb,
lib/json_schemer/schema/base.rb,
lib/json_schemer/schema/draft4.rb,
lib/json_schemer/schema/draft6.rb,
lib/json_schemer/schema/draft7.rb,
lib/json_schemer/cached_resolver.rb,
lib/json_schemer/format/hostname.rb,
lib/json_schemer/format/uri_template.rb
Overview
Defined Under Namespace
Modules: Errors, Format, Schema
Classes: CachedRefResolver, CachedResolver, EcmaRegexp, InvalidEcmaRegexp, InvalidFileURI, InvalidRefResolution, InvalidRegexpResolution, InvalidSymbolKey, UnknownFormat, UnknownRef, UnsupportedMetaSchema
Constant Summary
collapse
- DEFAULT_SCHEMA_CLASS =
Schema::Draft7
- SCHEMA_CLASS_BY_META_SCHEMA =
{
'http://json-schema.org/schema#' => Schema::Draft4, 'http://json-schema.org/draft-04/schema#' => Schema::Draft4,
'http://json-schema.org/draft-06/schema#' => Schema::Draft6,
'http://json-schema.org/draft-07/schema#' => Schema::Draft7
}.freeze
- WINDOWS_URI_PATH_REGEX =
/\A\/[a-z]:/i
- FILE_URI_REF_RESOLVER =
proc do |uri|
raise InvalidFileURI, 'must use `file` scheme' unless uri.scheme == 'file'
raise InvalidFileURI, 'cannot have a host (use `file:///`)' if uri.host && !uri.host.empty?
path = uri.path
path = path[1..-1] if path.match?(WINDOWS_URI_PATH_REGEX)
JSON.parse(File.read(URI::DEFAULT_PARSER.unescape(path)))
end
- VERSION =
'1.0.2'
Class Method Summary
collapse
Class Method Details
.schema(schema, default_schema_class: DEFAULT_SCHEMA_CLASS, **options) ⇒ Object
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
# File 'lib/json_schemer.rb', line 57
def schema(schema, default_schema_class: DEFAULT_SCHEMA_CLASS, **options)
case schema
when String
schema = JSON.parse(schema)
when Pathname
base_uri = URI.parse(File.join('file:', URI::DEFAULT_PARSER.escape(schema.realpath.to_s)))
options[:base_uri] = base_uri
schema = if options.key?(:ref_resolver)
FILE_URI_REF_RESOLVER.call(base_uri)
else
ref_resolver = CachedResolver.new(&FILE_URI_REF_RESOLVER)
options[:ref_resolver] = ref_resolver
ref_resolver.call(base_uri)
end
end
schema_class = if schema.is_a?(Hash) && schema.key?('$schema')
meta_schema = schema.fetch('$schema')
SCHEMA_CLASS_BY_META_SCHEMA[meta_schema] || raise(UnsupportedMetaSchema, meta_schema)
else
default_schema_class
end
schema_class.new(schema, **options)
end
|
.valid_schema?(schema, default_schema_class: DEFAULT_SCHEMA_CLASS) ⇒ Boolean
83
84
85
|
# File 'lib/json_schemer.rb', line 83
def valid_schema?(schema, default_schema_class: DEFAULT_SCHEMA_CLASS)
schema(schema, default_schema_class: default_schema_class).valid_schema?
end
|
.validate_schema(schema, default_schema_class: DEFAULT_SCHEMA_CLASS) ⇒ Object
87
88
89
|
# File 'lib/json_schemer.rb', line 87
def validate_schema(schema, default_schema_class: DEFAULT_SCHEMA_CLASS)
schema(schema, default_schema_class: default_schema_class).validate_schema
end
|