module Dry::Configurable::ClassMethods

def self.define(name)

def self.define(name)
  define_method(name) do
    config[name]
  end
end

def __config_build__(settings = self.settings)

Other tags:
    Api: - private
def __config_build__(settings = self.settings)
  __config_extension__.config_class.new(settings)
end

def __config_dsl__

Other tags:
    Api: - private
def __config_dsl__
  @__config_dsl__ ||= DSL.new(
    config_class: __config_extension__.config_class,
    default_undefined: __config_extension__.default_undefined
  )
end

def __config_extension__

Other tags:
    Api: - private
def __config_extension__
  @__config_extension__
end

def __config_reader__

Other tags:
    Api: - private
def __config_reader__
  @__config_reader__ ||=
    begin
      reader = Module.new do
        def self.define(name)
          define_method(name) do
            config[name]
          end
        end
      end
      if included_modules.include?(InstanceMethods)
        include(reader)
      end
      extend(reader)
      reader
    end
end

def config

Other tags:
    Api: - public

Returns:
  • (Config) -
def config
  @__config__ ||= __config_build__
end

def inherited(subclass)

Other tags:
    Api: - private
def inherited(subclass)
  super
  subclass.instance_variable_set(:@__config_extension__, __config_extension__)
  new_settings = settings.dup
  subclass.instance_variable_set(:@__settings__, new_settings)
  # Only classes **extending** Dry::Configurable have class-level config. When
  # Dry::Configurable is **included**, the class-level config method is undefined because it
  # resides at the instance-level instead (see `Configurable.included`).
  if respond_to?(:config)
    subclass.instance_variable_set(:@__config__, config.dup_for_settings(new_settings))
  end
end

def setting(*args, **options, &block)

Other tags:
    Api: - public

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

Other tags:
    Yield: -

Parameters:
  • reader (Boolean) --
  • constructor (#call) --
  • default (Mixed) --
  • name (Mixed) --
def setting(*args, **options, &block)
  setting = __config_dsl__.setting(*args, **options, &block)
  settings << setting
  __config_reader__.define(setting.name) if setting.reader?
  self
end

def settings

Other tags:
    Api: - public

Returns:
  • (Settings) -
def settings
  @__settings__ ||= Settings.new
end