Sha256: 7d3da136080dad50383c12f28bd18a3a1bb39e90b743f3e96e906439f214f5da
Contents?: true
Size: 1.2 KB
Versions: 1
Compression:
Stored size: 1.2 KB
Contents
require 'dry/types/decorator' module Dry module Types class Constructor < Definition include Dry::Equalizer(:type) undef_method :primitive attr_reader :fn attr_reader :type def self.new(input, options = {}) type = input.is_a?(Definition) ? input : Definition.new(input) super(type, options) end def initialize(type, options = {}) super @type = type @fn = options.fetch(:fn) end def primitive type.primitive end def call(input) fn[input] end alias_method :[], :call def constructor(new_fn, options = {}) with(options.merge(fn: -> input { new_fn[fn[input]] })) end def respond_to_missing?(meth, include_private = false) super || type.respond_to?(meth) end private def method_missing(meth, *args, &block) if type.respond_to?(meth) response = type.__send__(meth, *args, &block) if response.is_a?(Constructor) constructor(response.fn, options.merge(response.options)) else response end else super end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
dry-types-0.6.0 | lib/dry/types/constructor.rb |