# frozen_string_literal: true require 'dry/plugins/config' require 'dry/plugins/host/dsl' module Dry module Plugins # Plug-ins builder # @see Builder#call class Builder # @!method module_builder # @return [ModuleBuilder] # # @!method registry_builder # @return [Registry::Builder] # # @!method host_builder # @return [Host::Builder] include Import[:module_builder, :registry_builder, :host_builder] # Build a plug-in registry for given `host` # # 1. Extend `host` with a {Host::DSL plug-ins host DSL} # 2. Create a {Registry plug-ins registry} for `host`, # Find or create a `Module` containing plug-ins for `host`, # and extend it with {DSL plug-ins registry DSL} # # @param host [Module] # @return [Registry] def call(host, registry: registry_builder.call(host)) host_builder.call(host, registry) end end end end