module Dry::Configurable
def self.extended(base)
- Private: -
def self.extended(base) base.class_eval do @_config_mutex = Mutex.new @_settings = Concurrent::Map.new end end
def _config_for(&block)
- Private: -
def _config_for(&block) config_klass = Class.new { extend Dry::Configurable } config_klass.instance_eval(&block) config_klass.config end
def _settings
- Private: - no, really...
def _settings @_settings end
def config
- 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
- Api: - public
Returns:
-
(Dry::Configurable::Config)
-
Other tags:
- Yield: -
def configure yield(config) if block_given? end
def inherited(subclass)
- Private: -
def inherited(subclass) subclass.instance_variable_set(:@_config_mutex, Mutex.new) subclass.instance_variable_set(:@_settings, @_settings.clone) subclass.instance_variable_set(:@_config, @_config.clone) if defined?(@_config) super end
def setting(key, default = nil, &block)
- 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