module Dry::Configurable::ClassMethods

def self.extended(base)

Other tags:
    Private: -
def self.extended(base)
  base.instance_exec do
    @settings = Settings.new
  end
end

def _settings

Other tags:
    Private: - no, really...
def _settings
  @settings
end

def inherited(subclass)

Other tags:
    Private: -
def inherited(subclass)
  parent = self
  subclass.instance_exec do
    @settings = parent._settings.dup
  end
  if singleton_class < Configurable
    parent_config = @config
    subclass.instance_exec do
      @config = _settings.create_config
      @config.define!(parent_config.to_h) if parent_config.defined?
    end
  end
  super
end

def raise_already_defined_config(key)

Other tags:
    Private: -
def raise_already_defined_config(key)
  raise AlreadyDefinedConfig,
        "Cannot add setting +#{key}+, #{self} is already configured"
end

def setting(key, value = Undefined, options = Undefined, &block)

Other tags:
    Api: - public

Returns:
  • (Dry::Configurable::Config) -

Other tags:
    Yield: -

Parameters:
  • default (Mixed) --
  • key (Mixed) --
def setting(key, value = Undefined, options = Undefined, &block)
  extended = singleton_class < Configurable
  raise_already_defined_config(key) if _settings.config_defined?
  setting = _settings.add(key, value, options, &block)
  if setting.reader?
    readers = extended ? singleton_class : self
    readers.send(:define_method, setting.name) { config[setting.name] }
  end
end

def settings

Other tags:
    Api: - public

Returns:
  • (Set) -
def settings
  _settings.names
end