Sha256: 0793eec5ca9e11e8afc620bf4b1b2cd0f1ed4268a6b5bb2b4ebaf7d3162024e4
Contents?: true
Size: 1.33 KB
Versions: 2
Compression:
Stored size: 1.33 KB
Contents
module Dry module Configurable # @private class Config DEFAULT_PROCESSOR = ->(v) { v }.freeze def self.create(settings) klass = ::Class.new(self) settings.each do |setting| klass.__send__(:define_method, setting.name) do @config[setting.name] end klass.__send__(:define_method, "#{setting.name}=") do |value| @config[setting.name] = setting.processor.call(value) end end klass.new(settings) end def initialize(settings) @config = ::Concurrent::Hash.new settings.each do |setting| if setting.none? @config[setting.name] = nil else public_send("#{setting.name}=", setting.value) end end end def dup dup = super dup.instance_variable_set(:@config, @config.dup) dup end def clone clone = super clone.instance_variable_set(:@config, @config.clone) clone end def to_h @config.each_with_object({}) do |tuple, hash| key, value = tuple if value.kind_of?(::Dry::Configurable::Config) hash[key] = value.to_h else hash[key] = value end end end alias to_hash to_h end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
dry-configurable-0.4.0 | lib/dry/configurable/config.rb |
dry-configurable-0.3.0 | lib/dry/configurable/config.rb |