Sha256: 6dcda7b98897077d335d3373f82b1f841c73617b680fa859a17992012048d71d

Contents?: true

Size: 851 Bytes

Versions: 341

Compression:

Stored size: 851 Bytes

Contents

# frozen_string_literal: true
# typed: true

module T::Types
  # Takes a list of types. Validates that an object matches all of the types.
  class Intersection < Base
    attr_reader :types

    def initialize(types)
      @types = types.flat_map do |type|
        if type.is_a?(Intersection)
          # Simplify nested intersections (mostly so `name` returns a nicer value)
          type.types
        else
          T::Utils.coerce(type)
        end
      end.uniq
    end

    # @override Base
    def name
      "T.all(#{@types.map(&:name).sort.join(', ')})"
    end

    # @override Base
    def valid?(obj)
      @types.all? {|type| type.valid?(obj)}
    end

    # @override Base
    private def subtype_of_single?(other)
      raise "This should never be reached if you're going through `subtype_of?` (and you should be)"
    end

  end
end

Version data entries

341 entries across 341 versions & 1 rubygems

Version Path
sorbet-runtime-0.4.4587 lib/types/types/intersection.rb
sorbet-runtime-0.4.4586 lib/types/types/intersection.rb
sorbet-runtime-0.4.4585 lib/types/types/intersection.rb
sorbet-runtime-0.4.4584 lib/types/types/intersection.rb
sorbet-runtime-0.4.4583 lib/types/types/intersection.rb
sorbet-runtime-0.4.4581 lib/types/types/intersection.rb
sorbet-runtime-0.4.4580 lib/types/types/intersection.rb
sorbet-runtime-0.4.4579 lib/types/types/intersection.rb
sorbet-runtime-0.4.4578 lib/types/types/intersection.rb
sorbet-runtime-0.4.4577 lib/types/types/intersection.rb
sorbet-runtime-0.4.4576 lib/types/types/intersection.rb
sorbet-runtime-0.4.4575 lib/types/types/intersection.rb
sorbet-runtime-0.4.4574 lib/types/types/intersection.rb
sorbet-runtime-0.4.4573 lib/types/types/intersection.rb
sorbet-runtime-0.4.4572 lib/types/types/intersection.rb
sorbet-runtime-0.4.4571 lib/types/types/intersection.rb
sorbet-runtime-0.4.4570 lib/types/types/intersection.rb
sorbet-runtime-0.4.4569 lib/types/types/intersection.rb
sorbet-runtime-0.4.4568 lib/types/types/intersection.rb
sorbet-runtime-0.4.4565 lib/types/types/intersection.rb