Sha256: 3a9ea3d7df6fe6f17587ef7159dcbfa51e9b1b6e5f48be8780ada8145ac62278

Contents?: true

Size: 827 Bytes

Versions: 1

Compression:

Stored size: 827 Bytes

Contents

# frozen_string_literal: true

module Kind
  class Any
    FilledList = ->(val) {(val.is_a?(::Array) || val.is_a?(::Set)) && !val.empty?}

    singleton_class.send(:alias_method, :[], :new)

    attr_reader :values

    def initialize(*args)
      array = args.size == 1 ? args[0] : args

      @values = Kind.of(FilledList, array, expected: 'filled array or set')
    end

    def ===(value)
      @values.include?(value)
    end

    def [](value, label: nil)
      STRICT.object_is_a(self, value, label)
    end

    def |(another_kind)
      UnionType[self] | another_kind
    end

    def name
      str = @values.inspect

      if @values.is_a?(::Set)
        str.sub!(/\A#<Set: /, '')
        str.chomp!('>')
      end

      "Kind::Any#{str}"
    end

    alias inspect name

    private_constant :FilledList
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
kind-5.10.0 lib/kind/any.rb