class Jimmy::Index

Represents an in-memory collection of schemas

Public Class Methods

new() click to toggle source
# File lib/jimmy/index.rb, line 11
def initialize # rubocop:disable Style/DocumentationMethod
  @by_uri = {}
end

Public Instance Methods

<<(*schemas_with_uris)
Alias for: push
[](uri)
Alias for: resolve
[]=(uri, schema)
Alias for: add
add(uri, schema) click to toggle source

@param [Json::URI, URI, String] uri @param [Jimmy::Schema] schema @return [self] self, for chaining

# File lib/jimmy/index.rb, line 32
def add(uri, schema)
  uri = Json::URI.new(uri)
  raise Error::BadArgument, 'Expected a schema' unless schema.is_a? Schema
  raise Error::BadArgument, 'Cannot index relative URIs' if uri.relative?

  push SchemaWithURI.new(uri, schema)
end
Also aliased as: []=
each(&block) click to toggle source

@yieldparam [Jimmy::SchemaWithURI] schema_with_uri

# File lib/jimmy/index.rb, line 74
def each(&block)
  @by_uri.each_value &block
end
has_key?(uri)
Alias for: key?
key?(uri)
Also aliased as: has_key?
Alias for: uri?
keys()
Alias for: uris
push(*schemas_with_uris) click to toggle source

@param [Array<Jimmy::SchemaWithURI>] schemas_with_uris @return [self]

# File lib/jimmy/index.rb, line 44
def push(*schemas_with_uris)
  schemas_with_uris.each do |schema_with_uri|
    unless schema_with_uri.is_a? SchemaWithURI
      raise Error::BadArgument, 'Expected a SchemaWithURI'
    end

    @by_uri[schema_with_uri.uri] = schema_with_uri
  end
  self
end
Also aliased as: <<
resolve(uri) click to toggle source

@param [Json::URI, URI, String] uri @return [Jimmy::SchemaWithURI, nil]

# File lib/jimmy/index.rb, line 17
def resolve(uri)
  uri = Json::URI.new(uri)
  raise Error::BadArgument, 'Cannot resolve relative URIs' if uri.relative?

  return @by_uri[uri] if @by_uri.key? uri
  return if uri.pointer.empty?

  resolve(uri / -1)&.resolve uri
end
Also aliased as: []
uri?(uri) click to toggle source

@param [Json::URI, URI, String] uri @return [true, false]

# File lib/jimmy/index.rb, line 66
def uri?(uri)
  !resolve(uri).nil?
end
Also aliased as: key?
uris() click to toggle source

@return [Array<Json::URI>]

# File lib/jimmy/index.rb, line 58
def uris
  @by_uri.keys
end
Also aliased as: keys