module Dry::Core::Extensions
def self.extended(obj)
- Api: - private
def self.extended(obj) super obj.instance_variable_set(:@__available_extensions__, {}) obj.instance_variable_set(:@__loaded_extensions__, ::Set.new) end
def available_extension?(name)
-
(Boolean)
- Extension availability
Parameters:
-
name
(Symbol
) -- extension name
def available_extension?(name) @__available_extensions__.key?(name) end
def load_extensions(*extensions)
-
extensions
(Array
) -- list of extension names
def load_extensions(*extensions) extensions.each do |ext| block = @__available_extensions__.fetch(ext) do raise ::ArgumentError, "Unknown extension: #{ext.inspect}" end unless @__loaded_extensions__.include?(ext) block.call @__loaded_extensions__ << ext end end end
def register_extension(name, &block)
- Yield: - extension block. This block guaranteed not to be called more than once
Parameters:
-
name
(Symbol
) -- extension name
def register_extension(name, &block) @__available_extensions__[name] = block end