module Dry::Core::Extensions

def self.extended(obj)

Other tags:
    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)

Returns:
  • (Boolean) - Extension availability

Parameters:
  • name (Symbol) -- extension name
def available_extension?(name)
  @__available_extensions__.key?(name)
end

def load_extensions(*extensions)

Parameters:
  • 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)

Other tags:
    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