module Dry::Configurable

def self.extended(base)

Other tags:
    Private: -
def self.extended(base)
  base.instance_variable_set(:@_config_mutex, Mutex.new)
  base.instance_variable_set(:@_settings_mutex, Mutex.new)
end

def _config_for(&block)

Other tags:
    Private: -
def _config_for(&block)
  config_klass = Class.new { extend Dry::Configurable }
  config_klass.instance_eval(&block)
  config_klass.config
end

def _settings

Other tags:
    Private: -
def _settings
  @_settings_mutex.synchronize { @_settings ||= ThreadSafe::Cache.new }
end

def config

Other tags:
    Api: - public

Returns:
  • (Dry::Configurable::Config) -
def config
  @_config_mutex.synchronize do
    return @_config if defined?(@_config)
    @_config = Config.new(*_settings.keys).new(*_settings.values) unless _settings.empty?
  end
end

def configure

Other tags:
    Api: - public

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

Other tags:
    Yield: -
def configure
  yield(config) if block_given?
end

def setting(key, default = nil, &block)

Other tags:
    Api: - public

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

Other tags:
    Yield: -

Parameters:
  • default (Mixed) --
  • key (Mixed) --
def setting(key, default = nil, &block)
  default = _config_for(&block) if block_given?
  _settings[key] = default
end