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