# frozen_string_literal: true require "singleton" module Rack class ECG class CheckRegistry # Raised when a check didn't exist during lookup CheckNotRegistered = Class.new(StandardError) include Singleton # Constructs the singleton instance of the registry def initialize @registry = {} end # Register a check class by name # # @param [Symbol] name Desired check name # @param [Class] check_class Class implementing check functionality def register(name, check_class) @registry[name] = check_class end # Fetches the registered check class by name # # @param [Symbol] name Registered check name # @raise [CheckNotRegistered] if the named check has not been registered def lookup(name) @registry.fetch(name) { raise CheckNotRegistered, "Check '#{name}' is not registered" } end class << self # (see #lookup) def lookup(name) instance.lookup(name) end # (see #register) def register(name, check_class) instance.register(name, check_class) end end end end end