Sha256: 0d755061375fd0dd7846505c1fa81b2336294c34e9e3c587d2b254883a8a2782
Contents?: true
Size: 1.4 KB
Versions: 1
Compression:
Stored size: 1.4 KB
Contents
module Dry::Initializer class Option < Attribute # part of __initializer__ definition def initializer_signature "**__options__" end # parts of __initalizer__ def presetter "@#{target} = Dry::Initializer::UNDEFINED" if dispensable? end def safe_setter "@#{target} = #{safe_coerced}#{maybe_optional}" end def fast_setter return safe_setter unless dispensable? "@#{target} = __options__.key?(:'#{source}') ? #{safe_coerced} : " \ "Dry::Initializer::UNDEFINED" end def postsetter "@__options__[:#{target}] = @#{target}" \ " unless @#{target} == Dry::Initializer::UNDEFINED" end # part of __defaults__ def default_hash super :option end # part of __coercers__ def coercer_hash super :option end private def dispensable? optional && !default end def maybe_optional " if __options__.key? :'#{source}'" if dispensable? end def safe_coerced return safe_default unless coercer "__coercers__[:'option_#{source}'].call(#{safe_default})" end def safe_default "__options__.fetch(:'#{source}')#{default_part}" end def default_part if default " { instance_exec(&__defaults__[:'option_#{source}']) }" elsif !optional " { raise ArgumentError, \"option :'#{source}' is required\" }" end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
dry-initializer-1.2.0 | lib/dry/initializer/option.rb |