Sha256: 1f2fede58cb81b685f51c7af80f99a51ca4aaa252aeccf69a71a9e3460ff8168
Contents?: true
Size: 1.39 KB
Versions: 1
Compression:
Stored size: 1.39 KB
Contents
module Dry::Initializer # Contains definitions for a single attribute, and builds its parts of mixin class Attribute attr_reader :source, :target, :coercer, :default, :optional, :reader # definition for the getter method def getter return unless reader command = %w(private protected).include?(reader.to_s) ? reader : :public <<-RUBY.gsub(/^ *\|/, "") |def #{target} | @#{target} unless @#{target} == Dry::Initializer::UNDEFINED |end |#{command} :#{target} RUBY end private def initialize(source, coercer = nil, **options) @source = source @target = options.fetch(:as, source) @coercer = coercer || options[:type] @reader = options.fetch(:reader, :public) @default = options[:default] @optional = !!(options[:optional] || @default) validate end def validate validate_target validate_default validate_coercer end def validate_target return if target =~ /\A\w+\Z/ fail ArgumentError.new("Invalid name '#{target}' for the target variable") end def validate_default return if default.nil? || default.is_a?(Proc) fail DefaultValueError.new(source, default) end def validate_coercer return if coercer.nil? || coercer.respond_to?(:call) fail TypeConstraintError.new(source, coercer) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
dry-initializer-1.0.0 | lib/dry/initializer/attribute.rb |