class Dry::Configurable::Setting
@api private
This class represents a setting and is used internally.
def self.cloneable_value?(value)
- Api: - private
def self.cloneable_value?(value) CLONEABLE_VALUE_TYPES.any? { |type| value.is_a?(type) } end
def cloneable?
- Api: - private
def cloneable? if options.key?(:cloneable) # Return cloneable option if explicitly set options[:cloneable] else # Otherwise, infer cloneable from any of the input, default, or value Setting.cloneable_value?(input) || Setting.cloneable_value?(default) || ( evaluated? && Setting.cloneable_value?(value) ) end end
def constructor
- Api: - private
def constructor options[:constructor] || DEFAULT_CONSTRUCTOR end
def evaluate
- Api: - private
def evaluate @value = constructor[Undefined.coalesce(input, default, nil)] end
def evaluated?
- Api: - private
def evaluated? instance_variable_defined?(:@value) end
def initialize(name, input: Undefined, default: Undefined, **options)
- Api: - private
def initialize(name, input: Undefined, default: Undefined, **options) @name = name @writer_name = :"#{name}=" @input = input @default = default @options = options evaluate if input_defined? end
def initialize_copy(source)
- Api: - private
def initialize_copy(source) super @options = source.options.dup if source.cloneable? @input = source.input.dup @default = source.default.dup @value = source.value.dup if source.evaluated? end end
def input_defined?
- Api: - private
def input_defined? !input.equal?(Undefined) end
def nested(settings)
- Api: - private
def nested(settings) Nested.new(name, input: settings, **options) end
def pristine
- Api: - private
def pristine with(input: Undefined) end
def reader?
- Api: - private
def reader? options[:reader].equal?(true) end
def value
- Api: - private
def value @value ||= evaluate end
def with(new_opts)
- Api: - private
def with(new_opts) self.class.new(name, input: input, default: default, **options, **new_opts) end
def writer?(meth)
- Api: - private
def writer?(meth) writer_name.equal?(meth) end