Sha256: 8fa24d4fec85f4e4028ed3f9376bd0310b914e8deba88230d7e02f4c04fe54a0

Contents?: true

Size: 699 Bytes

Versions: 3

Compression:

Stored size: 699 Bytes

Contents

# frozen_string_literal: true

module Kind
  class Any
    FilledArray = ->(value) {value.is_a?(::Array) && !value.empty?}

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

    attr_reader :values

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

      @values = Kind.of(FilledArray, array, expected: 'filled array')
    end

    def ===(other)
      @values.any? { |value| value == other }
    end

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

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

    def name
      "Kind::Any#{@values}"
    end

    alias inspect name

    private_constant :FilledArray
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
kind-5.9.0 lib/kind/any.rb
kind-5.8.1 lib/kind/any.rb
kind-5.8.0 lib/kind/any.rb