Class: JSONSchemer::Schema::Base
- Inherits:
-
Object
- Object
- JSONSchemer::Schema::Base
show all
- Includes:
- Format
- Defined in:
- lib/json_schemer/schema/base.rb
Defined Under Namespace
Classes: Instance
Constant Summary
collapse
- ID_KEYWORD =
'$id'
- DEFAULT_REF_RESOLVER =
proc { |uri| raise UnknownRef, uri.to_s }
- NET_HTTP_REF_RESOLVER =
proc { |uri| JSON.parse(Net::HTTP.get(uri)) }
- RUBY_REGEXP_RESOLVER =
proc { |pattern| Regexp.new(pattern) }
- ECMA_REGEXP_RESOLVER =
proc { |pattern| Regexp.new(EcmaRegexp.ruby_equivalent(pattern)) }
- BOOLEANS =
Set[true, false].freeze
- INSERT_DEFAULT_PROPERTY =
proc do |data, property, property_schema, _parent|
if !data.key?(property) && property_schema.is_a?(Hash) && property_schema.key?('default')
data[property] = property_schema.fetch('default').clone
end
end
- JSON_POINTER_TOKEN_ESCAPE_CHARS =
{ '~' => '~0', '/' => '~1' }
- JSON_POINTER_TOKEN_ESCAPE_REGEX =
Regexp.union(JSON_POINTER_TOKEN_ESCAPE_CHARS.keys)
Constants included
from Format
Format::DATE_TIME_OFFSET_REGEX, Format::EMAIL_REGEX, Format::HOUR_24_REGEX, Format::INVALID_QUERY_REGEX, Format::IP_REGEX, Format::JSON_POINTER_REGEX, Format::JSON_POINTER_REGEX_STRING, Format::LEAP_SECOND_REGEX, Format::RELATIVE_JSON_POINTER_REGEX
Format::URITemplate::EXPLODE, Format::URITemplate::EXPRESSION, Format::URITemplate::LITERALS, Format::URITemplate::MAX_LENGTH, Format::URITemplate::MODIFIER_LEVEL4, Format::URITemplate::OPERATOR, Format::URITemplate::PCT_ENCODED, Format::URITemplate::PREFIX, Format::URITemplate::URI_TEMPLATE, Format::URITemplate::URI_TEMPLATE_REGEX, Format::URITemplate::VARCHAR, Format::URITemplate::VARIABLE_LIST, Format::URITemplate::VARNAME, Format::URITemplate::VARSPEC
Format::Hostname::ARABIC_EXTENDED_DIGITS_REGEX, Format::Hostname::ARABIC_INDIC_DIGITS_REGEX, Format::Hostname::CONTEXT_REGEX, Format::Hostname::EXCEPTIONS_DISALLOWED, Format::Hostname::EXCEPTIONS_PVALID, Format::Hostname::GREEK_LOWER_NUMERAL_SIGN, Format::Hostname::HEBREW_PUNCTUATION, Format::Hostname::HOSTNAME_REGEX, Format::Hostname::JOINING_TYPE_D_CHARACTER_CLASS, Format::Hostname::JOINING_TYPE_L_CHARACTER_CLASS, Format::Hostname::JOINING_TYPE_R_CHARACTER_CLASS, Format::Hostname::JOINING_TYPE_T_CHARACTER_CLASS, Format::Hostname::KATAKANA_MIDDLE_DOT_CONTEXT_REGEX, Format::Hostname::KATAKANA_MIDDLE_DOT_REGEX, Format::Hostname::LABEL_CHARACTER_CLASS, Format::Hostname::LABEL_REGEX_STRING, Format::Hostname::LEADING_CHARACTER_CLASS, Format::Hostname::LETTER_DIGITS, Format::Hostname::MARKS, Format::Hostname::MIDDLE_DOT, Format::Hostname::VIRAMA_CHARACTER_CLASS, Format::Hostname::ZERO_WIDTH_NON_JOINER_JOINING_TYPE, Format::Hostname::ZERO_WIDTH_VIRAMA
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Format
#iri_escape, #parse_uri_scheme, #valid_date_time?, #valid_email?, #valid_ip?, #valid_json?, #valid_json_pointer?, #valid_regex?, #valid_relative_json_pointer?, #valid_spec_format?, #valid_uri?, #valid_uri_reference?
#valid_uri_template?
#valid_hostname?
Constructor Details
#initialize(schema, base_uri: nil, format: true, insert_property_defaults: false, before_property_validation: nil, after_property_validation: nil, formats: nil, keywords: nil, ref_resolver: DEFAULT_REF_RESOLVER, regexp_resolver: 'ruby') ⇒ Base
Returns a new instance of Base.
51
52
53
54
55
56
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/schema/base.rb', line 51
def initialize(
schema,
base_uri: nil,
format: true,
insert_property_defaults: false,
before_property_validation: nil,
after_property_validation: nil,
formats: nil,
keywords: nil,
ref_resolver: DEFAULT_REF_RESOLVER,
regexp_resolver: 'ruby'
)
raise InvalidSymbolKey, 'schemas must use string keys' if schema.is_a?(Hash) && !schema.empty? && !schema.first.first.is_a?(String)
@root = schema
@base_uri = base_uri
@format = format
@before_property_validation = [*before_property_validation]
@before_property_validation.unshift(INSERT_DEFAULT_PROPERTY) if insert_property_defaults
@after_property_validation = [*after_property_validation]
@formats = formats
@keywords = keywords
@ref_resolver = ref_resolver == 'net/http' ? CachedResolver.new(&NET_HTTP_REF_RESOLVER) : ref_resolver
@regexp_resolver = case regexp_resolver
when 'ecma'
CachedResolver.new(&ECMA_REGEXP_RESOLVER)
when 'ruby'
CachedResolver.new(&RUBY_REGEXP_RESOLVER)
else
regexp_resolver
end
end
|
Class Method Details
.draft_name ⇒ Object
38
39
40
|
# File 'lib/json_schemer/schema/base.rb', line 38
def draft_name
name.split('::').last.downcase
end
|
42
43
44
|
# File 'lib/json_schemer/schema/base.rb', line 42
def meta_schema
@meta_schema ||= JSON.parse(Pathname.new(__dir__).join("#{draft_name}.json").read).freeze
end
|
46
47
48
|
# File 'lib/json_schemer/schema/base.rb', line 46
def meta_schemer
@meta_schemer ||= JSONSchemer.schema(meta_schema)
end
|
Instance Method Details
#valid?(data) ⇒ Boolean
83
84
85
|
# File 'lib/json_schemer/schema/base.rb', line 83
def valid?(data)
valid_instance?(Instance.new(data, '', root, '', @base_uri, @before_property_validation, @after_property_validation))
end
|
#valid_schema? ⇒ Boolean
91
92
93
|
# File 'lib/json_schemer/schema/base.rb', line 91
def valid_schema?
self.class.meta_schemer.valid?(root)
end
|
#validate(data) ⇒ Object
87
88
89
|
# File 'lib/json_schemer/schema/base.rb', line 87
def validate(data)
validate_instance(Instance.new(data, '', root, '', @base_uri, @before_property_validation, @after_property_validation))
end
|
#validate_schema ⇒ Object
95
96
97
|
# File 'lib/json_schemer/schema/base.rb', line 95
def validate_schema
self.class.meta_schemer.validate(root)
end
|