Sha256: 0ffef34c9bbd41a998e50fb43b41e89644c157cc65a16e6b3db62388ae0b0c94

Contents?: true

Size: 1.76 KB

Versions: 1

Compression:

Stored size: 1.76 KB

Contents

# frozen_string_literal: true

require 'eac_ruby_utils/core_ext'
require 'eac_ruby_utils/gems_registry'

module Avm
  module Registry
    class Base
      enable_simple_cache
      common_constructor :module_suffix

      def detect(*registered_initialize_args)
        detect_optional(*registered_initialize_args) ||
          raise("No registered module valid for #{registered_initialize_args}" \
            " (Module suffix: #{module_suffix}, Available: #{registered_modules.join(', ')})")
      end

      def detect_optional(*registered_initialize_args)
        registered_modules.lazy.map { |klass| klass.new(*registered_initialize_args) }
                          .find(&:valid?)
      end

      def provider_module_suffix
        "#{module_suffix}::Provider"
      end

      def single_module_suffix
        "#{module_suffix}::Base"
      end

      def to_s
        "#{self.class}[#{module_suffix}]"
      end

      def valid_registered_module?(a_module)
        a_module.is_a?(::Class) && !a_module.abstract?
      end

      private

      def registered_modules_uncached
        (single_registered_modules + provider_registered_modules)
          .select { |v| valid_registered_module?(v) }.uniq.sort_by { |s| [s.name] }
      end

      def single_registered_modules
        single_instance_registry.registered.map(&:registered_module)
      end

      def provider_registered_modules
        provider_registry.registered.map(&:registered_module).flat_map do |provider_class|
          provider_class.new.all
        end
      end

      def single_instance_registry_uncached
        ::EacRubyUtils::GemsRegistry.new(single_module_suffix)
      end

      def provider_registry_uncached
        ::EacRubyUtils::GemsRegistry.new(provider_module_suffix)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
avm-0.9.0 lib/avm/registry/base.rb