blambeau/qrb

View on GitHub
lib/finitio/type/alias_type.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Finitio
  class AliasType < Type

    def initialize(target, name, metadata = nil)
      unless target.is_a?(Type)
        raise ArgumentError, "Type expected for target type, got `#{target}`"
      end
      if name.nil?
        raise ArgumentError, "Alias name cannot be nil"
      end

      super(name, metadata)
      @target = target
    end
    attr_reader :target

    def default_name
      @name
    end

    [
      :representator,
      :dress,
      :undress,
      :include?,
      :==,
      :eql?,
      :hash,
      :to_s
    ].each do |meth|
      define_method(meth) do |*args, &bl|
        @target.send(meth, *args, &bl)
      end
    end

    def resolve_proxies(system)
      AliasType.new(target.resolve_proxies(system), name, metadata)
    end

    def unconstrained
      AliasType.new(target.unconstrained, name, metadata)
    end

  end # class AliasType
end # module Finitio