Sha256: f67703ac243b16445b8d700f75034c944895b188ac563b3cfa898f2b0146e066

Contents?: true

Size: 1.08 KB

Versions: 166

Compression:

Stored size: 1.08 KB

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
    def initialize(types)
      @inner_types = types
    end

    def types
      @types ||= @inner_types.flat_map do |type|
        type = T::Utils.resolve_alias(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

    def build_type
      types
      nil
    end

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

    # overrides Base
    def recursively_valid?(obj)
      types.all? {|type| type.recursively_valid?(obj)}
    end

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

    # overrides 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

166 entries across 166 versions & 1 rubygems

Version Path
sorbet-runtime-0.5.11349 lib/types/types/intersection.rb
sorbet-runtime-0.5.11347 lib/types/types/intersection.rb
sorbet-runtime-0.5.11346 lib/types/types/intersection.rb
sorbet-runtime-0.5.11342 lib/types/types/intersection.rb
sorbet-runtime-0.5.11340 lib/types/types/intersection.rb
sorbet-runtime-0.5.11338 lib/types/types/intersection.rb
sorbet-runtime-0.5.11336 lib/types/types/intersection.rb
sorbet-runtime-0.5.11332 lib/types/types/intersection.rb
sorbet-runtime-0.5.11330 lib/types/types/intersection.rb
sorbet-runtime-0.5.11327 lib/types/types/intersection.rb
sorbet-runtime-0.5.11323 lib/types/types/intersection.rb
sorbet-runtime-0.5.11319 lib/types/types/intersection.rb
sorbet-runtime-0.5.11318 lib/types/types/intersection.rb
sorbet-runtime-0.5.11316 lib/types/types/intersection.rb
sorbet-runtime-0.5.11311 lib/types/types/intersection.rb
sorbet-runtime-0.5.11307 lib/types/types/intersection.rb
sorbet-runtime-0.5.11305 lib/types/types/intersection.rb
sorbet-runtime-0.5.11303 lib/types/types/intersection.rb
sorbet-runtime-0.5.11301 lib/types/types/intersection.rb
sorbet-runtime-0.5.11295 lib/types/types/intersection.rb