module JSI
class MetaschemaNode::BootstrapSchema
include Util::FingerprintHash
include Schema::SchemaAncestorNode
include Schema
class << self
def inspect
if self == MetaschemaNode::BootstrapSchema
name
else
-"#{name || MetaschemaNode::BootstrapSchema.name} (#{schema_implementation_modules.map(&:inspect).join(', ')})"
end
end
alias_method :to_s, :inspect
end
def initialize(
jsi_document,
jsi_ptr: Ptr[],
jsi_schema_base_uri: nil
)
raise(Bug, "no #schema_implementation_modules") unless respond_to?(:schema_implementation_modules)
super()
self.jsi_ptr = jsi_ptr
self.jsi_document = jsi_document
self.jsi_schema_base_uri = jsi_schema_base_uri
self.jsi_schema_resource_ancestors = Util::EMPTY_ARY
end
attr_reader :jsi_document
attr_reader :jsi_ptr
def jsi_node_content
jsi_ptr.evaluate(jsi_document)
end
def subschema(subptr)
self.class.new(
jsi_document,
jsi_ptr: jsi_ptr + subptr,
jsi_schema_base_uri: jsi_resource_ancestor_uri,
)
end
def resource_root_subschema(ptr)
self.class.new(
jsi_document,
jsi_ptr: Ptr.ary_ptr(ptr),
jsi_schema_base_uri: nil,
)
end
def inspect
-"\#<#{jsi_object_group_text.join(' ')} #{schema_content.inspect}>"
end
alias_method :to_s, :inspect
def pretty_print(q)
q.text '#<'
q.text jsi_object_group_text.join(' ')
q.group_sub {
q.nest(2) {
q.breakable ' '
q.pp schema_content
}
}
q.breakable ''
q.text '>'
end
def jsi_object_group_text
[
self.class.name || MetaschemaNode::BootstrapSchema.name,
-"(#{schema_implementation_modules.map(&:inspect).join(', ')})",
jsi_ptr.uri,
]
end
def jsi_fingerprint
{
class: self.class,
jsi_ptr: @jsi_ptr,
jsi_document: @jsi_document,
jsi_schema_base_uri: jsi_schema_base_uri,
schema_implementation_modules: schema_implementation_modules,
}
end
end
end