Class: JSONSchemer::Schema::Base
- Inherits:
-
Object
- Object
- JSONSchemer::Schema::Base
- 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::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
Constants included from Format::URITemplate
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
Constants included from Format::Hostname
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
Constants included from Format::Email
Format::Email::ADDRESS_LITERAL, Format::Email::ATOM, Format::Email::A_TEXT, Format::Email::DOT_STRING, Format::Email::EMAIL_REGEX, Format::Email::LOCAL_PART, Format::Email::MAILBOX, Format::Email::QUOTED_PAIR_SMTP, Format::Email::QUOTED_STRING, Format::Email::Q_CONTENT_SMTP, Format::Email::Q_TEXT_SMTP, Format::Email::UTF8_NON_ASCII
Class Method Summary collapse
Instance Method Summary collapse
-
#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
constructor
A new instance of Base.
- #valid?(data) ⇒ Boolean
- #valid_schema? ⇒ Boolean
- #validate(data) ⇒ Object
- #validate_schema ⇒ Object
Methods included from Format
#iri_escape, #parse_uri_scheme, #valid_date_time?, #valid_ip?, #valid_json?, #valid_json_pointer?, #valid_regex?, #valid_relative_json_pointer?, #valid_spec_format?, #valid_uri?, #valid_uri_reference?
Methods included from Format::URITemplate
Methods included from Format::Hostname
Methods included from Format::Email
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 |
.meta_schema ⇒ Object
42 43 44 |
# File 'lib/json_schemer/schema/base.rb', line 42 def @meta_schema ||= JSON.parse(Pathname.new(__dir__).join("#{draft_name}.json").read).freeze end |
.meta_schemer ⇒ Object
46 47 48 |
# File 'lib/json_schemer/schema/base.rb', line 46 def @meta_schemer ||= JSONSchemer.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..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..validate(root) end |