jsi-dev 0.0.8 → 0.0.10
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/.yardopts +3 -4
- data/CHANGELOG.md +19 -0
- data/LICENSE.md +2 -3
- data/README.md +87 -43
- data/docs/Glossary.md +313 -0
- data/jsi.gemspec +1 -1
- data/lib/jsi/base/mutability.rb +48 -0
- data/lib/jsi/base/node.rb +66 -52
- data/lib/jsi/base.rb +593 -176
- data/lib/jsi/jsi_coder.rb +4 -2
- data/lib/jsi/metaschema_node/bootstrap_schema.rb +118 -59
- data/lib/jsi/metaschema_node.rb +245 -154
- data/lib/jsi/ptr.rb +45 -17
- data/lib/jsi/ref.rb +197 -0
- data/lib/jsi/registry.rb +311 -0
- data/lib/jsi/schema/cxt/child_application.rb +35 -0
- data/lib/jsi/schema/cxt/inplace_application.rb +37 -0
- data/lib/jsi/schema/cxt.rb +80 -0
- data/lib/jsi/schema/dialect.rb +137 -0
- data/lib/jsi/schema/draft04.rb +113 -5
- data/lib/jsi/schema/draft06.rb +123 -5
- data/lib/jsi/schema/draft07.rb +157 -5
- data/lib/jsi/schema/draft202012.rb +303 -0
- data/lib/jsi/schema/dynamic_anchor_map.rb +63 -0
- data/lib/jsi/schema/element.rb +69 -0
- data/lib/jsi/schema/elements/anchor.rb +13 -0
- data/lib/jsi/schema/elements/array_validation.rb +82 -0
- data/lib/jsi/schema/elements/comment.rb +10 -0
- data/lib/jsi/schema/{validation → elements}/const.rb +11 -7
- data/lib/jsi/schema/elements/contains.rb +59 -0
- data/lib/jsi/schema/elements/contains_minmax.rb +91 -0
- data/lib/jsi/schema/elements/content_encoding.rb +10 -0
- data/lib/jsi/schema/elements/content_media_type.rb +10 -0
- data/lib/jsi/schema/elements/content_schema.rb +16 -0
- data/lib/jsi/schema/elements/default.rb +11 -0
- data/lib/jsi/schema/elements/definitions.rb +19 -0
- data/lib/jsi/schema/elements/dependencies.rb +99 -0
- data/lib/jsi/schema/elements/dependent_required.rb +49 -0
- data/lib/jsi/schema/elements/dependent_schemas.rb +69 -0
- data/lib/jsi/schema/elements/dynamic_ref.rb +69 -0
- data/lib/jsi/schema/elements/enum.rb +26 -0
- data/lib/jsi/schema/elements/examples.rb +10 -0
- data/lib/jsi/schema/elements/format.rb +10 -0
- data/lib/jsi/schema/elements/id.rb +30 -0
- data/lib/jsi/schema/elements/if_then_else.rb +82 -0
- data/lib/jsi/schema/elements/info_bool.rb +10 -0
- data/lib/jsi/schema/elements/info_string.rb +10 -0
- data/lib/jsi/schema/elements/items.rb +93 -0
- data/lib/jsi/schema/elements/items_prefixed.rb +96 -0
- data/lib/jsi/schema/elements/not.rb +31 -0
- data/lib/jsi/schema/elements/numeric.rb +137 -0
- data/lib/jsi/schema/elements/numeric_draft04.rb +77 -0
- data/lib/jsi/schema/elements/object_validation.rb +55 -0
- data/lib/jsi/schema/elements/pattern.rb +35 -0
- data/lib/jsi/schema/elements/properties.rb +145 -0
- data/lib/jsi/schema/elements/property_names.rb +48 -0
- data/lib/jsi/schema/elements/ref.rb +62 -0
- data/lib/jsi/schema/elements/required.rb +34 -0
- data/lib/jsi/schema/elements/self.rb +24 -0
- data/lib/jsi/schema/elements/some_of.rb +180 -0
- data/lib/jsi/schema/elements/string_validation.rb +57 -0
- data/lib/jsi/schema/elements/type.rb +43 -0
- data/lib/jsi/schema/elements/unevaluated_items.rb +54 -0
- data/lib/jsi/schema/elements/unevaluated_properties.rb +54 -0
- data/lib/jsi/schema/elements/xschema.rb +10 -0
- data/lib/jsi/schema/elements/xvocabulary.rb +10 -0
- data/lib/jsi/schema/elements.rb +101 -0
- data/lib/jsi/schema/issue.rb +3 -4
- data/lib/jsi/schema/schema_ancestor_node.rb +105 -52
- data/lib/jsi/schema/vocabulary.rb +36 -0
- data/lib/jsi/schema.rb +598 -383
- data/lib/jsi/schema_classes.rb +195 -141
- data/lib/jsi/schema_set.rb +85 -128
- data/lib/jsi/set.rb +23 -0
- data/lib/jsi/simple_wrap.rb +14 -17
- data/lib/jsi/struct.rb +57 -0
- data/lib/jsi/uri.rb +40 -0
- data/lib/jsi/util/private/memo_map.rb +9 -13
- data/lib/jsi/util/private.rb +59 -31
- data/lib/jsi/util/typelike.rb +19 -60
- data/lib/jsi/util.rb +53 -34
- data/lib/jsi/validation/error.rb +45 -2
- data/lib/jsi/validation/result.rb +121 -90
- data/lib/jsi/validation.rb +1 -6
- data/lib/jsi/version.rb +1 -1
- data/lib/jsi.rb +170 -36
- data/lib/schemas/json-schema.org/draft/2020-12/schema.rb +62 -0
- data/lib/schemas/json-schema.org/draft-04/schema.rb +60 -109
- data/lib/schemas/json-schema.org/draft-06/schema.rb +53 -108
- data/lib/schemas/json-schema.org/draft-07/schema.rb +63 -127
- data/readme.rb +4 -4
- data/{resources}/schemas/2020-12_strict.json +19 -0
- data/{resources}/schemas/json-schema.org/draft/2020-12/meta/applicator.json +48 -0
- data/{resources}/schemas/json-schema.org/draft/2020-12/meta/content.json +17 -0
- data/{resources}/schemas/json-schema.org/draft/2020-12/meta/core.json +51 -0
- data/{resources}/schemas/json-schema.org/draft/2020-12/meta/format-annotation.json +14 -0
- data/{resources}/schemas/json-schema.org/draft/2020-12/meta/format-assertion.json +14 -0
- data/{resources}/schemas/json-schema.org/draft/2020-12/meta/meta-data.json +37 -0
- data/{resources}/schemas/json-schema.org/draft/2020-12/meta/unevaluated.json +15 -0
- data/{resources}/schemas/json-schema.org/draft/2020-12/meta/validation.json +98 -0
- data/{resources}/schemas/json-schema.org/draft/2020-12/schema.json +58 -0
- metadata +73 -52
- data/docs/glossary.md +0 -281
- data/lib/jsi/metaschema.rb +0 -6
- data/lib/jsi/schema/application/child_application/contains.rb +0 -25
- data/lib/jsi/schema/application/child_application/draft04.rb +0 -21
- data/lib/jsi/schema/application/child_application/draft06.rb +0 -28
- data/lib/jsi/schema/application/child_application/draft07.rb +0 -28
- data/lib/jsi/schema/application/child_application/items.rb +0 -18
- data/lib/jsi/schema/application/child_application/properties.rb +0 -25
- data/lib/jsi/schema/application/child_application.rb +0 -13
- data/lib/jsi/schema/application/draft04.rb +0 -8
- data/lib/jsi/schema/application/draft06.rb +0 -8
- data/lib/jsi/schema/application/draft07.rb +0 -8
- data/lib/jsi/schema/application/inplace_application/dependencies.rb +0 -28
- data/lib/jsi/schema/application/inplace_application/draft04.rb +0 -25
- data/lib/jsi/schema/application/inplace_application/draft06.rb +0 -26
- data/lib/jsi/schema/application/inplace_application/draft07.rb +0 -32
- data/lib/jsi/schema/application/inplace_application/ifthenelse.rb +0 -20
- data/lib/jsi/schema/application/inplace_application/ref.rb +0 -18
- data/lib/jsi/schema/application/inplace_application/someof.rb +0 -44
- data/lib/jsi/schema/application/inplace_application.rb +0 -14
- data/lib/jsi/schema/application.rb +0 -12
- data/lib/jsi/schema/ref.rb +0 -183
- data/lib/jsi/schema/validation/array.rb +0 -69
- data/lib/jsi/schema/validation/contains.rb +0 -25
- data/lib/jsi/schema/validation/dependencies.rb +0 -49
- data/lib/jsi/schema/validation/draft04/minmax.rb +0 -91
- data/lib/jsi/schema/validation/draft04.rb +0 -110
- data/lib/jsi/schema/validation/draft06.rb +0 -120
- data/lib/jsi/schema/validation/draft07.rb +0 -157
- data/lib/jsi/schema/validation/enum.rb +0 -25
- data/lib/jsi/schema/validation/ifthenelse.rb +0 -46
- data/lib/jsi/schema/validation/items.rb +0 -54
- data/lib/jsi/schema/validation/not.rb +0 -20
- data/lib/jsi/schema/validation/numeric.rb +0 -121
- data/lib/jsi/schema/validation/object.rb +0 -45
- data/lib/jsi/schema/validation/pattern.rb +0 -34
- data/lib/jsi/schema/validation/properties.rb +0 -101
- data/lib/jsi/schema/validation/property_names.rb +0 -32
- data/lib/jsi/schema/validation/ref.rb +0 -40
- data/lib/jsi/schema/validation/required.rb +0 -27
- data/lib/jsi/schema/validation/someof.rb +0 -90
- data/lib/jsi/schema/validation/string.rb +0 -47
- data/lib/jsi/schema/validation/type.rb +0 -49
- data/lib/jsi/schema/validation.rb +0 -49
- data/lib/jsi/schema_registry.rb +0 -190
- data/lib/jsi/util/private/attr_struct.rb +0 -130
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module JSI
|
|
4
|
-
module Util::Private
|
|
5
|
-
# like a Struct, but stores all the attributes in one @attributes Hash, instead of individual instance
|
|
6
|
-
# variables for each attribute.
|
|
7
|
-
# this tends to be easier to work with and more flexible. keys which are symbols are converted to strings.
|
|
8
|
-
class AttrStruct
|
|
9
|
-
class AttrStructError < StandardError
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
class UndefinedAttributeKey < AttrStructError
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
class << self
|
|
16
|
-
# creates a AttrStruct subclass with the given attribute keys.
|
|
17
|
-
# @param attribute_keys [Enumerable<String, Symbol>]
|
|
18
|
-
def subclass(*attribute_keys)
|
|
19
|
-
bad = attribute_keys.reject { |key| key.respond_to?(:to_str) || key.is_a?(Symbol) }
|
|
20
|
-
unless bad.empty?
|
|
21
|
-
raise ArgumentError, "attribute keys must be String or Symbol; got keys: #{bad.map(&:inspect).join(', ')}"
|
|
22
|
-
end
|
|
23
|
-
attribute_keys = attribute_keys.map { |key| convert_key(key) }
|
|
24
|
-
|
|
25
|
-
all_attribute_keys = (self.attribute_keys + attribute_keys).freeze
|
|
26
|
-
|
|
27
|
-
Class.new(self).tap do |klass|
|
|
28
|
-
klass.define_singleton_method(:attribute_keys) { all_attribute_keys }
|
|
29
|
-
|
|
30
|
-
attribute_keys.each do |attribute_key|
|
|
31
|
-
# reader
|
|
32
|
-
klass.send(:define_method, attribute_key) do
|
|
33
|
-
@attributes[attribute_key]
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# writer
|
|
37
|
-
klass.send(:define_method, "#{attribute_key}=") do |value|
|
|
38
|
-
@attributes[attribute_key] = value
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
alias_method :[], :subclass
|
|
45
|
-
|
|
46
|
-
# the attribute keys defined for this class
|
|
47
|
-
# @return [Set<String>]
|
|
48
|
-
def attribute_keys
|
|
49
|
-
# empty for AttrStruct itself; redefined on each subclass
|
|
50
|
-
Util::Private::EMPTY_SET
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
# returns a frozen string, given a string or symbol.
|
|
54
|
-
# returns anything else as-is for the caller to handle.
|
|
55
|
-
# @api private
|
|
56
|
-
def convert_key(key)
|
|
57
|
-
# TODO use Symbol#name when available on supported rubies
|
|
58
|
-
key.is_a?(Symbol) ? key.to_s.freeze : key.frozen? ? key : key.is_a?(String) ? key.dup.freeze : key
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def initialize(attributes = {})
|
|
63
|
-
unless attributes.respond_to?(:to_hash)
|
|
64
|
-
raise(TypeError, "expected attributes to be a Hash; got: #{attributes.inspect}")
|
|
65
|
-
end
|
|
66
|
-
@attributes = {}
|
|
67
|
-
attributes.to_hash.each do |k, v|
|
|
68
|
-
@attributes[self.class.convert_key(k)] = v
|
|
69
|
-
end
|
|
70
|
-
bad = @attributes.keys.reject { |k| attribute_keys.include?(k) }
|
|
71
|
-
unless bad.empty?
|
|
72
|
-
raise UndefinedAttributeKey, "undefined attribute keys: #{bad.map(&:inspect).join(', ')}"
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
def [](key)
|
|
77
|
-
@attributes[key.is_a?(Symbol) ? key.to_s : key]
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
def []=(key, value)
|
|
81
|
-
key = self.class.convert_key(key)
|
|
82
|
-
unless attribute_keys.include?(key)
|
|
83
|
-
raise UndefinedAttributeKey, "undefined attribute key: #{key.inspect}"
|
|
84
|
-
end
|
|
85
|
-
@attributes[key] = value
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
# @return [String]
|
|
89
|
-
def inspect
|
|
90
|
-
-"\#<#{self.class.name}#{@attributes.map { |k, v| " #{k}: #{v.inspect}" }.join(',')}>"
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
alias_method :to_s, :inspect
|
|
94
|
-
|
|
95
|
-
# pretty-prints a representation of self to the given printer
|
|
96
|
-
# @return [void]
|
|
97
|
-
def pretty_print(q)
|
|
98
|
-
q.text '#<'
|
|
99
|
-
q.text self.class.name
|
|
100
|
-
q.group_sub {
|
|
101
|
-
q.nest(2) {
|
|
102
|
-
q.breakable(@attributes.empty? ? '' : ' ')
|
|
103
|
-
q.seplist(@attributes, nil, :each_pair) { |k, v|
|
|
104
|
-
q.group {
|
|
105
|
-
q.text k
|
|
106
|
-
q.text ': '
|
|
107
|
-
q.pp v
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
q.breakable ''
|
|
113
|
-
q.text '>'
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
# (see AttrStruct.attribute_keys)
|
|
117
|
-
def attribute_keys
|
|
118
|
-
self.class.attribute_keys
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
include FingerprintHash
|
|
122
|
-
|
|
123
|
-
# see {Util::Private::FingerprintHash}
|
|
124
|
-
# @api private
|
|
125
|
-
def jsi_fingerprint
|
|
126
|
-
{class: self.class, attributes: @attributes}
|
|
127
|
-
end
|
|
128
|
-
end
|
|
129
|
-
end
|
|
130
|
-
end
|