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
Public: Registered definitions (list of metadata).
Public: Registry
version number.
Public Class Methods
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
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
# File lib/stargate/server/registry_version.rb, line 64 def each(&block) @definitions.each(&block) end
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
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
# File lib/stargate/server/registry_version.rb, line 72 def serialize { version: @version, definitions: @definitions.map(&:serialize) } end
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
# File lib/stargate/server/registry_version.rb, line 68 def size @definitions.size end