From 29c82b3fda2cfd393ab05138e2ae60b017e80878 Mon Sep 17 00:00:00 2001 From: Peter Solnica Date: Fri, 14 Oct 2022 15:42:33 +0200 Subject: [PATCH] Add zeitwerk loader --- dry-system.gemspec | 1 + lib/dry/system.rb | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/dry-system.gemspec b/dry-system.gemspec index 756f63ac..4c105bc2 100644 --- a/dry-system.gemspec +++ b/dry-system.gemspec @@ -29,6 +29,7 @@ Gem::Specification.new do |spec| spec.required_ruby_version = ">= 2.7.0" # to update dependencies edit project.yml + spec.add_runtime_dependency "zeitwerk", "~> 2.6" spec.add_runtime_dependency "dry-auto_inject", ">= 0.4.0" spec.add_runtime_dependency "dry-configurable", "~> 0.16", ">= 0.16.0" spec.add_runtime_dependency "dry-container", "~> 0.10", ">= 0.10.0" diff --git a/lib/dry/system.rb b/lib/dry/system.rb index 06ab70b2..fa66f5bb 100644 --- a/lib/dry/system.rb +++ b/lib/dry/system.rb @@ -1,10 +1,26 @@ # frozen_string_literal: true +require "zeitwerk" require "dry/core" require_relative "system/provider_source_registry" module Dry module System + # @api private + def self.loader + @loader ||= Zeitwerk::Loader.new.tap do |loader| + root = File.expand_path("..", __dir__) + loader.tag = "dry-system" + loader.inflector = Zeitwerk::GemInflector.new("#{root}/dry-system.rb") + loader.push_dir(root) + loader.ignore( + "#{root}/dry-system.rb", + "#{root}/dry/system/{constants,errors,stubs,version}.rb" + ) + loader.inflector.inflect("dsl" => "DSL") + end + end + # Registers the provider sources in the files under the given path # # @api public @@ -58,5 +74,7 @@ def self.register_component(name, provider:, &block) def self.provider_sources @provider_sources ||= ProviderSourceRegistry.new end + + loader.setup end end