Sha256: 7a125411bbba4c7e24d87620e627bccdcc4f056695f2763e09e0def4005fb4fb

Contents?: true

Size: 1.86 KB

Versions: 13

Compression:

Stored size: 1.86 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_not_found(*registered_initialize_args)
      end

      def detect_optional(*registered_initialize_args)
        registered_modules.reverse.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 raise_not_found(*args)
        raise("No registered module valid for #{args}" \
            " (Module suffix: #{module_suffix}, Available: #{registered_modules.join(', ')})")
      end

      def registered_modules_uncached
        registered_gems.flat_map { |registry| modules_from_registry(registry) }
          .select { |v| valid_registered_module?(v) }.uniq
      end

      def modules_from_registry(registry)
        if registry.registry.module_suffix == provider_module_suffix
          registry.registered_module.new.all
        else
          [registry.registered_module]
        end
      end

      def registered_gems
        (single_instance_registry.registered + provider_registry.registered).sort
      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

13 entries across 13 versions & 3 rubygems

Version Path
avm-0.26.0 lib/avm/registry/base.rb
eac_tools-0.8.0 sub/avm/lib/avm/registry/base.rb
eac_tools-0.7.0 sub/avm/lib/avm/registry/base.rb
avm-0.25.0 lib/avm/registry/base.rb
eac_tools-0.6.0 sub/avm/lib/avm/registry/base.rb
eac_tools-0.5.0 sub/avm/lib/avm/registry/base.rb
avm-0.24.0 lib/avm/registry/base.rb
eac_tools-0.4.0 sub/avm/lib/avm/registry/base.rb
eac_tools-0.3.0 sub/avm/lib/avm/registry/base.rb
eac_tools-0.2.2 sub/avm/lib/avm/registry/base.rb
avm-0.23.0 lib/avm/registry/base.rb
avm-0.22.0 lib/avm/registry/base.rb
avm-tools-0.120.0 sub/avm/lib/avm/registry/base.rb