module Kinda::ClassMethods

Public Instance Methods

[](*klasses) click to toggle source
# File lib/kinda.rb, line 21
def [](*klasses)
  klasses = klasses.flatten.map { |k| convert_custom_klass(k) }.flatten

  unless klasses.all? { |k| k.kind_of?(Class) }
    raise ArgumentError.new("expected Class but given #{klasses.map(&:class).inspect}")
  end

  lambda do |obj|
    if klasses.none? { |k| obj.kind_of?(k) }
      raise ConstraintError.new("expected #{klasses.inspect} but given #{obj.class}")
    end

    obj
  end
end

Private Instance Methods

convert_custom_klass(klass) click to toggle source
# File lib/kinda.rb, line 39
def convert_custom_klass(klass)
  return klass unless klass < Kinda::Types::Custom

  case klass.name
  when 'Kinda::Types::Nil'
    NilClass
  when 'Kinda::Types::True'
    TrueClass
  when 'Kinda::Types::False'
    FalseClass
  when 'Kinda::Types::Bool'
    [TrueClass, FalseClass]
  else
    klass
  end
end