json_schemer 1.0.0 → 1.0.1
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -3
- data/json_schemer.gemspec +0 -1
- data/lib/json_schemer/ecma_regexp.rb +21 -14
- data/lib/json_schemer/format/uri_template.rb +34 -0
- data/lib/json_schemer/format.rb +1 -7
- data/lib/json_schemer/schema/base.rb +2 -2
- data/lib/json_schemer/version.rb +1 -1
- data/lib/json_schemer.rb +1 -1
- metadata +3 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 460e70448c0b37c65fd4e51f046036336b17121cc716c197fe80f2e2517f45e7
|
4
|
+
data.tar.gz: f06d11eab9bb88c45a018c8913d6a5d2e33162064c9f995e5772beb811e68ed6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 83549b328ba3067ed206a8bdea448e34ba274c7c5a7857d38793d74f0691339f845b0e39fdbb0ff8c3869dfbaf0dcd13380c458c80397b100a848f96443bf691
|
7
|
+
data.tar.gz: 106314824f1805e7d2306c10c696d4503b54b4d9203321e37816242c30598c3870ec40ade53dc08692ec3b2a35f18360c96211f0b8af44fd4414931da4e5b1e5
|
data/Gemfile.lock
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
json_schemer (1.0.
|
4
|
+
json_schemer (1.0.1)
|
5
5
|
hana (~> 1.3)
|
6
6
|
regexp_parser (~> 2.0)
|
7
7
|
simpleidn (~> 0.2)
|
8
|
-
uri_template (~> 0.7)
|
9
8
|
|
10
9
|
GEM
|
11
10
|
remote: https://rubygems.org/
|
@@ -27,7 +26,6 @@ GEM
|
|
27
26
|
unf_ext
|
28
27
|
unf (0.1.4-java)
|
29
28
|
unf_ext (0.0.8.2)
|
30
|
-
uri_template (0.7.0)
|
31
29
|
|
32
30
|
PLATFORMS
|
33
31
|
java
|
data/json_schemer.gemspec
CHANGED
@@ -2,19 +2,26 @@
|
|
2
2
|
module JSONSchemer
|
3
3
|
class EcmaRegexp
|
4
4
|
class Syntax < Regexp::Syntax::Base
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
implements :
|
10
|
-
implements :
|
11
|
-
|
12
|
-
implements :
|
13
|
-
|
14
|
-
implements :
|
15
|
-
implements :
|
16
|
-
implements :
|
17
|
-
|
5
|
+
# regexp_parser >= 2.3.0 uses syntax classes directly instead of instances
|
6
|
+
# :nocov:
|
7
|
+
SYNTAX = respond_to?(:implements) ? self : new
|
8
|
+
# :nocov:
|
9
|
+
SYNTAX.implements :anchor, Anchor::Extended
|
10
|
+
SYNTAX.implements :assertion, Assertion::All
|
11
|
+
# literal %i[number] to support regexp_parser < 2.2.0 (Backreference::Plain)
|
12
|
+
SYNTAX.implements :backref, %i[number] + Backreference::Name
|
13
|
+
# :meta_sequence, :bell, and :escape are not supported in ecma
|
14
|
+
SYNTAX.implements :escape, Escape::Basic + (Escape::Control - %i[meta_sequence]) + (Escape::ASCII - %i[bell escape]) + Escape::Unicode + Escape::Meta + Escape::Hex + Escape::Octal
|
15
|
+
SYNTAX.implements :property, UnicodeProperty::All
|
16
|
+
SYNTAX.implements :nonproperty, UnicodeProperty::All
|
17
|
+
# :comment is not supported in ecma
|
18
|
+
SYNTAX.implements :free_space, (FreeSpace::All - %i[comment])
|
19
|
+
SYNTAX.implements :group, Group::Basic + Group::Named + Group::Passive
|
20
|
+
SYNTAX.implements :literal, Literal::All
|
21
|
+
SYNTAX.implements :meta, Meta::Extended
|
22
|
+
SYNTAX.implements :quantifier, Quantifier::Greedy + Quantifier::Reluctant + Quantifier::Interval + Quantifier::IntervalReluctant
|
23
|
+
SYNTAX.implements :set, CharacterSet::Basic
|
24
|
+
SYNTAX.implements :type, CharacterType::Extended
|
18
25
|
end
|
19
26
|
|
20
27
|
RUBY_EQUIVALENTS = {
|
@@ -31,7 +38,7 @@ module JSONSchemer
|
|
31
38
|
class << self
|
32
39
|
def ruby_equivalent(pattern)
|
33
40
|
Regexp::Scanner.scan(pattern).map do |type, token, text|
|
34
|
-
Syntax.check!(*Syntax.normalize(type, token))
|
41
|
+
Syntax::SYNTAX.check!(*Syntax::SYNTAX.normalize(type, token))
|
35
42
|
RUBY_EQUIVALENTS.dig(type, token) || text
|
36
43
|
rescue Regexp::Syntax::NotImplementedError
|
37
44
|
raise InvalidEcmaRegexp, "invalid token #{text.inspect} (#{type}:#{token}) in #{pattern.inspect}"
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module JSONSchemer
|
3
|
+
module Format
|
4
|
+
module URITemplate
|
5
|
+
# https://datatracker.ietf.org/doc/html/rfc6570
|
6
|
+
PCT_ENCODED = '%\h{2}' # pct-encoded = "%" HEXDIG HEXDIG
|
7
|
+
EXPLODE = '\*' # explode = "*"
|
8
|
+
MAX_LENGTH = '[1-9]\d{0,3}' # max-length = %x31-39 0*3DIGIT ; positive integer < 10000
|
9
|
+
PREFIX = ":#{MAX_LENGTH}" # prefix = ":" max-length
|
10
|
+
MODIFIER_LEVEL4 = "#{PREFIX}|#{EXPLODE}" # modifier-level4 = prefix / explode
|
11
|
+
VARCHAR = "(\\w|#{PCT_ENCODED})" # varchar = ALPHA / DIGIT / "_" / pct-encoded
|
12
|
+
VARNAME = "#{VARCHAR}(\\.?#{VARCHAR})*" # varname = varchar *( ["."] varchar )
|
13
|
+
VARSPEC = "#{VARNAME}(#{MODIFIER_LEVEL4})?" # varspec = varname [ modifier-level4 ]
|
14
|
+
VARIABLE_LIST = "#{VARSPEC}(,#{VARSPEC})*" # variable-list = varspec *( "," varspec )
|
15
|
+
OPERATOR = '[+#./;?&=,!@|]' # operator = op-level2 / op-level3 / op-reserve
|
16
|
+
# op-level2 = "+" / "#"
|
17
|
+
# op-level3 = "." / "/" / ";" / "?" / "&"
|
18
|
+
# op-reserve = "=" / "," / "!" / "@" / "|"
|
19
|
+
EXPRESSION = "{#{OPERATOR}?#{VARIABLE_LIST}}" # expression = "{" [ operator ] variable-list "}"
|
20
|
+
LITERALS = "[^\\x00-\\x20\\x7F\"%'<>\\\\^`{|}]|#{PCT_ENCODED}" # literals = %x21 / %x23-24 / %x26 / %x28-3B / %x3D / %x3F-5B
|
21
|
+
# / %x5D / %x5F / %x61-7A / %x7E / ucschar / iprivate
|
22
|
+
# / pct-encoded
|
23
|
+
# ; any Unicode character except: CTL, SP,
|
24
|
+
# ; DQUOTE, "'", "%" (aside from pct-encoded),
|
25
|
+
# ; "<", ">", "\", "^", "`", "{", "|", "}"
|
26
|
+
URI_TEMPLATE = "(#{LITERALS}|#{EXPRESSION})*" # URI-Template = *( literals / expression )
|
27
|
+
URI_TEMPLATE_REGEX = /\A#{URI_TEMPLATE}\z/
|
28
|
+
|
29
|
+
def valid_uri_template?(data)
|
30
|
+
URI_TEMPLATE_REGEX.match?(data)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/json_schemer/format.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
module JSONSchemer
|
3
3
|
module Format
|
4
4
|
include Hostname
|
5
|
+
include URITemplate
|
5
6
|
|
6
7
|
# this is no good
|
7
8
|
EMAIL_REGEX = /\A[^@\s]+@([\p{L}\d-]+\.)+[\p{L}\d\-]{2,}\z/i.freeze
|
@@ -115,13 +116,6 @@ module JSONSchemer
|
|
115
116
|
end.force_encoding(Encoding::US_ASCII)
|
116
117
|
end
|
117
118
|
|
118
|
-
def valid_uri_template?(data)
|
119
|
-
URITemplate.new(data)
|
120
|
-
true
|
121
|
-
rescue URITemplate::Invalid
|
122
|
-
false
|
123
|
-
end
|
124
|
-
|
125
119
|
def valid_json_pointer?(data)
|
126
120
|
JSON_POINTER_REGEX.match?(data)
|
127
121
|
end
|
@@ -32,7 +32,7 @@ module JSONSchemer
|
|
32
32
|
end
|
33
33
|
|
34
34
|
JSON_POINTER_TOKEN_ESCAPE_CHARS = { '~' => '~0', '/' => '~1' }
|
35
|
-
|
35
|
+
JSON_POINTER_TOKEN_ESCAPE_REGEX = Regexp.union(JSON_POINTER_TOKEN_ESCAPE_CHARS.keys)
|
36
36
|
|
37
37
|
class << self
|
38
38
|
def draft_name
|
@@ -624,7 +624,7 @@ module JSONSchemer
|
|
624
624
|
end
|
625
625
|
|
626
626
|
def escape_json_pointer_token(token)
|
627
|
-
token.gsub(
|
627
|
+
token.gsub(JSON_POINTER_TOKEN_ESCAPE_REGEX, JSON_POINTER_TOKEN_ESCAPE_CHARS)
|
628
628
|
end
|
629
629
|
|
630
630
|
def join_uri(a, b)
|
data/lib/json_schemer/version.rb
CHANGED
data/lib/json_schemer.rb
CHANGED
@@ -12,10 +12,10 @@ require 'uri'
|
|
12
12
|
require 'hana'
|
13
13
|
require 'regexp_parser'
|
14
14
|
require 'simpleidn'
|
15
|
-
require 'uri_template'
|
16
15
|
|
17
16
|
require 'json_schemer/version'
|
18
17
|
require 'json_schemer/format/hostname'
|
18
|
+
require 'json_schemer/format/uri_template'
|
19
19
|
require 'json_schemer/format'
|
20
20
|
require 'json_schemer/errors'
|
21
21
|
require 'json_schemer/cached_resolver'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json_schemer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Harsha
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-05-
|
11
|
+
date: 2023-05-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -108,20 +108,6 @@ dependencies:
|
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0.2'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: uri_template
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - "~>"
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0.7'
|
118
|
-
type: :runtime
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - "~>"
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '0.7'
|
125
111
|
description:
|
126
112
|
email:
|
127
113
|
- davishmcclurg@gmail.com
|
@@ -150,6 +136,7 @@ files:
|
|
150
136
|
- lib/json_schemer/errors.rb
|
151
137
|
- lib/json_schemer/format.rb
|
152
138
|
- lib/json_schemer/format/hostname.rb
|
139
|
+
- lib/json_schemer/format/uri_template.rb
|
153
140
|
- lib/json_schemer/schema/base.rb
|
154
141
|
- lib/json_schemer/schema/draft4.json
|
155
142
|
- lib/json_schemer/schema/draft4.rb
|