Sha256: faba8cd829b9237bc7c6ea64c3b77d4a941440d875aed16d412303f29cea81f1

Contents?: true

Size: 1.71 KB

Versions: 7

Compression:

Stored size: 1.71 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})")
      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

7 entries across 7 versions & 2 rubygems

Version Path
avm-0.8.0 lib/avm/registry/base.rb
avm-0.7.0 lib/avm/registry/base.rb
avm-tools-0.110.0 vendor/avm/lib/avm/registry/base.rb
avm-0.6.1 lib/avm/registry/base.rb
avm-tools-0.109.1 vendor/avm/lib/avm/registry/base.rb
avm-0.6.0 lib/avm/registry/base.rb
avm-tools-0.109.0 vendor/avm/lib/avm/registry/base.rb