class Stargate::Server::RegistryVersion

Internal: Here's where all information about served classes are stored. Registered classes information is stored in form of Stargate::Metadata.

Attributes

definitions[R]

Public: Registered definitions (list of metadata).

version[R]

Public: Registry version number.

Public Class Methods

new(version = 1, &block) click to toggle source

Public: Constructor.

# File lib/stargate/server/registry_version.rb, line 19
def initialize(version = 1, &block)
  @version = version
  @definitions = []

  instance_eval(&block) if block_given?
end

Public Instance Methods

[](klass_name) click to toggle source

Internal: Finds metadata information for given class.

Returns Stargate::Metadata if found. Raises ClassNotExposedError if not found.

# File lib/stargate/server/registry_version.rb, line 59
def [](klass_name)
  metadata = @definitions.find { |metadata| metadata.name == klass_name }
  metadata or raise ClassNotExposedError, "Class not registered under name: #{klass_name}"
end
each(&block) click to toggle source
# File lib/stargate/server/registry_version.rb, line 64
def each(&block)
  @definitions.each(&block)
end
metadata_for(obj) click to toggle source

Internal: Finds metadata information for given object (namely for the class of given object).

Returns Stargate::Metadata if found. Raises ClassNotExposedError if not found.

# File lib/stargate/server/registry_version.rb, line 50
def metadata_for(obj)
  metadata = @definitions.find { |metadata| metadata.klass == obj.class }
  metadata or raise ClassNotExposedError, "Class not registered: #{obj.class.name}"
end
registered?(klass) click to toggle source

Internal: Returns true when given class is already registered.

# File lib/stargate/server/registry_version.rb, line 42
def registered?(klass)
  @definitions.find { |metadata| metadata.klass == klass }
end
serialize() click to toggle source
# File lib/stargate/server/registry_version.rb, line 72
def serialize
  { version: @version, definitions: @definitions.map(&:serialize) }
end
serve(klass, params = {}, &block) click to toggle source

Public: Registers given class in this registry. A class can be registered with different name using the `:as` params key.

Raises ClassAlreadyRegisteredError if class is already registered.

# File lib/stargate/server/registry_version.rb, line 30
def serve(klass, params = {}, &block)
  raise ClassAlreadyRegisteredError, "Class already registered: #{klass.name}" if registered?(klass)

  params.symbolize_keys!
  klass_name = params[:as] || klass.name
  log.debug("Registering class", local_class_name: klass.name, serve_as: klass_name)
  @definitions << Metadata.new(klass, klass_name, &block)

  self
end
size() click to toggle source
# File lib/stargate/server/registry_version.rb, line 68
def size
  @definitions.size
end