Sha256: 44b86f060f278127e6a0a91f853f29255ad7c4c3c82041bf104c022fa263f53f

Contents?: true

Size: 1.1 KB

Versions: 50

Compression:

Stored size: 1.1 KB

Contents

# frozen_string_literal: true
# typed: true

module T::Types
  # Validates that an object belongs to the specified class.
  class ClassOf < Base
    attr_reader :type

    def initialize(type)
      @type = type
    end

    def build_type
      nil
    end

    # overrides Base
    def name
      "T.class_of(#{@type})"
    end

    # overrides Base
    def valid?(obj)
      obj.is_a?(Module) && (obj <= @type || false)
    end

    # overrides Base
    def subtype_of_single?(other)
      case other
      when ClassOf
        @type <= other.type
      when Simple
        @type.is_a?(other.raw_type)
      when TypedClass
        @type.is_a?(other.underlying_class)
      else
        false
      end
    end

    # overrides Base
    def describe_obj(obj)
      obj.inspect
    end

    # So that `T.class_of(...)[...]` syntax is valid.
    # Mirrors the definition of T::Generic#[] (generics are erased).
    #
    # We avoid simply writing `include T::Generic` because we don't want any of
    # the other methods to appear (`T.class_of(A).type_member` doesn't make sense)
    def [](*types)
      self
    end
  end
end

Version data entries

50 entries across 50 versions & 1 rubygems

Version Path
sorbet-runtime-0.5.11668 lib/types/types/class_of.rb
sorbet-runtime-0.5.11663 lib/types/types/class_of.rb
sorbet-runtime-0.5.11647 lib/types/types/class_of.rb
sorbet-runtime-0.5.11645 lib/types/types/class_of.rb
sorbet-runtime-0.5.11642 lib/types/types/class_of.rb
sorbet-runtime-0.5.11641 lib/types/types/class_of.rb
sorbet-runtime-0.5.11637 lib/types/types/class_of.rb
sorbet-runtime-0.5.11635 lib/types/types/class_of.rb
sorbet-runtime-0.5.11633 lib/types/types/class_of.rb
sorbet-runtime-0.5.11631 lib/types/types/class_of.rb
sorbet-runtime-0.5.11630 lib/types/types/class_of.rb
sorbet-runtime-0.5.11625 lib/types/types/class_of.rb
sorbet-runtime-0.5.11620 lib/types/types/class_of.rb
sorbet-runtime-0.5.11618 lib/types/types/class_of.rb
sorbet-runtime-0.5.11615 lib/types/types/class_of.rb
sorbet-runtime-0.5.11611 lib/types/types/class_of.rb
sorbet-runtime-0.5.11610 lib/types/types/class_of.rb
sorbet-runtime-0.5.11609 lib/types/types/class_of.rb
sorbet-runtime-0.5.11608 lib/types/types/class_of.rb
sorbet-runtime-0.5.11604 lib/types/types/class_of.rb