lib/dry/monads.rb in dry-monads-1.4.0 vs lib/dry/monads.rb in dry-monads-1.5.0

- old
+ new

@@ -1,15 +1,34 @@ # frozen_string_literal: true -require "dry/core/constants" +require "concurrent/map" +require "zeitwerk" +require "dry/core" +require "dry/monads/constants" +require "dry/monads/errors" require "dry/monads/registry" module Dry # Common, idiomatic monads for Ruby # # @api public module Monads + # @api private + def self.loader + @loader ||= Zeitwerk::Loader.new.tap do |loader| + root = File.expand_path("..", __dir__) + loader.tag = "dry-monads" + loader.inflector = Zeitwerk::GemInflector.new("#{root}/dry-monads.rb") + loader.push_dir(root) + loader.ignore( + "#{root}/dry-monads.rb", + "#{root}/dry/monads/{all,constants,errors,registry,version}.rb", + "#{root}/json/**/*.rb" + ) + end + end + # @private def self.included(base) if all_loaded? base.include(*constructors) else @@ -47,12 +66,14 @@ # @return [Module] # @api public def self.[](*monads) monads.sort! @mixins.fetch_or_store(monads.hash) do - monads.each { |m| load_monad(m) } - mixins = monads.map { |m| registry.fetch(m) } + monads.each { load_monad(_1) } + mixins = monads.map { registry.fetch(_1) } ::Module.new { include(*mixins) }.freeze end end + + loader.setup end end