Sha256: 1469d1017cf46f6448bf7f49381d523c7bfa38305c2aab59963831245b4aba40

Contents?: true

Size: 1.05 KB

Versions: 1

Compression:

Stored size: 1.05 KB

Contents

module Dry::Initializer
  class Param < Attribute
    # part of __initializer__ definition
    def initializer_signature
      optional ? "#{target} = Dry::Initializer::UNDEFINED" : target
    end

    # parts of __initalizer__
    def presetter; end

    def safe_setter
      "@#{target} = #{maybe_coerced}"
    end

    def fast_setter
      safe_setter
    end

    def postsetter; end

    # part of __defaults__
    def default_hash
      super :param
    end

    # part of __coercers__
    def coercer_hash
      super :param
    end

    private

    def initialize(*args, **options)
      fail ArgumentError.new("Do not rename params") if options.key? :as
      super
    end

    def maybe_coerced
      return maybe_default unless coercer
      "__coercers__[:param_#{target}].call(#{maybe_default})"
    end

    def maybe_default
      "#{target}#{default_part}"
    end

    def default_part
      return unless default
      " == Dry::Initializer::UNDEFINED ?" \
      " instance_exec(&__defaults__[:param_#{target}]) :" \
      " #{target}"
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dry-initializer-1.2.0 lib/dry/initializer/param.rb