kind 4.0.0 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/.tool-versions +1 -1
 - data/.travis.sh +39 -7
 - data/.travis.yml +1 -2
 - data/CHANGELOG.md +486 -28
 - data/Gemfile +13 -6
 - data/README.md +153 -49
 - data/kind.gemspec +1 -1
 - data/lib/kind.rb +2 -84
 - data/lib/kind/__lib__/action_steps.rb +57 -0
 - data/lib/kind/__lib__/attributes.rb +66 -0
 - data/lib/kind/__lib__/kind.rb +51 -0
 - data/lib/kind/__lib__/of.rb +17 -0
 - data/lib/kind/__lib__/strict.rb +49 -0
 - data/lib/kind/__lib__/undefined.rb +14 -0
 - data/lib/kind/action.rb +127 -0
 - data/lib/kind/active_model/validation.rb +3 -4
 - data/lib/kind/basic.rb +79 -0
 - data/lib/kind/basic/error.rb +29 -0
 - data/lib/kind/{undefined.rb → basic/undefined.rb} +6 -1
 - data/lib/kind/dig.rb +21 -5
 - data/lib/kind/either.rb +30 -0
 - data/lib/kind/either/left.rb +29 -0
 - data/lib/kind/either/methods.rb +17 -0
 - data/lib/kind/either/monad.rb +65 -0
 - data/lib/kind/either/monad/wrapper.rb +19 -0
 - data/lib/kind/either/right.rb +38 -0
 - data/lib/kind/empty.rb +2 -2
 - data/lib/kind/empty/constant.rb +7 -0
 - data/lib/kind/enum.rb +63 -0
 - data/lib/kind/enum/item.rb +40 -0
 - data/lib/kind/enum/methods.rb +72 -0
 - data/lib/kind/function.rb +45 -0
 - data/lib/kind/functional.rb +89 -0
 - data/lib/kind/functional/action.rb +90 -0
 - data/lib/kind/immutable_attributes.rb +34 -0
 - data/lib/kind/immutable_attributes/initializer.rb +70 -0
 - data/lib/kind/immutable_attributes/reader.rb +38 -0
 - data/lib/kind/maybe.rb +37 -12
 - data/lib/kind/maybe/methods.rb +21 -0
 - data/lib/kind/maybe/monad.rb +82 -0
 - data/lib/kind/maybe/monad/wrapper.rb +19 -0
 - data/lib/kind/maybe/none.rb +12 -19
 - data/lib/kind/maybe/some.rb +68 -26
 - data/lib/kind/maybe/typed.rb +11 -5
 - data/lib/kind/maybe/{wrappable.rb → wrapper.rb} +9 -7
 - data/lib/kind/monad.rb +22 -0
 - data/lib/kind/monads.rb +5 -0
 - data/lib/kind/objects.rb +17 -0
 - data/lib/kind/objects/basic_object.rb +43 -0
 - data/lib/kind/objects/modules.rb +32 -0
 - data/lib/kind/{type_checkers → objects/modules}/core/array.rb +3 -1
 - data/lib/kind/{type_checkers → objects/modules}/core/class.rb +1 -1
 - data/lib/kind/{type_checkers → objects/modules}/core/comparable.rb +1 -1
 - data/lib/kind/{type_checkers → objects/modules}/core/enumerable.rb +1 -1
 - data/lib/kind/{type_checkers → objects/modules}/core/enumerator.rb +1 -1
 - data/lib/kind/{type_checkers → objects/modules}/core/file.rb +1 -1
 - data/lib/kind/{type_checkers → objects/modules}/core/float.rb +1 -1
 - data/lib/kind/{type_checkers → objects/modules}/core/hash.rb +3 -1
 - data/lib/kind/{type_checkers → objects/modules}/core/integer.rb +1 -1
 - data/lib/kind/{type_checkers → objects/modules}/core/io.rb +1 -1
 - data/lib/kind/{type_checkers → objects/modules}/core/method.rb +1 -1
 - data/lib/kind/{type_checkers → objects/modules}/core/module.rb +1 -1
 - data/lib/kind/{type_checkers → objects/modules}/core/numeric.rb +1 -1
 - data/lib/kind/{type_checkers → objects/modules}/core/proc.rb +1 -1
 - data/lib/kind/{type_checkers → objects/modules}/core/queue.rb +1 -1
 - data/lib/kind/{type_checkers → objects/modules}/core/range.rb +1 -1
 - data/lib/kind/{type_checkers → objects/modules}/core/regexp.rb +1 -1
 - data/lib/kind/{type_checkers → objects/modules}/core/string.rb +3 -1
 - data/lib/kind/{type_checkers → objects/modules}/core/struct.rb +1 -1
 - data/lib/kind/{type_checkers → objects/modules}/core/symbol.rb +1 -1
 - data/lib/kind/{type_checkers → objects/modules}/core/time.rb +1 -1
 - data/lib/kind/{type_checkers → objects/modules}/custom/boolean.rb +2 -2
 - data/lib/kind/{type_checkers → objects/modules}/custom/callable.rb +1 -1
 - data/lib/kind/{type_checkers → objects/modules}/custom/lambda.rb +1 -1
 - data/lib/kind/{type_checkers → objects/modules}/stdlib/open_struct.rb +3 -1
 - data/lib/kind/{type_checkers → objects/modules}/stdlib/set.rb +3 -1
 - data/lib/kind/objects/nil.rb +17 -0
 - data/lib/kind/objects/not_nil.rb +9 -0
 - data/lib/kind/objects/object.rb +56 -0
 - data/lib/kind/objects/respond_to.rb +30 -0
 - data/lib/kind/objects/union_type.rb +44 -0
 - data/lib/kind/presence.rb +4 -2
 - data/lib/kind/result.rb +31 -0
 - data/lib/kind/result/abstract.rb +53 -0
 - data/lib/kind/result/failure.rb +33 -0
 - data/lib/kind/result/methods.rb +17 -0
 - data/lib/kind/result/monad.rb +74 -0
 - data/lib/kind/result/monad/wrapper.rb +19 -0
 - data/lib/kind/result/success.rb +53 -0
 - data/lib/kind/strict/disabled.rb +34 -0
 - data/lib/kind/try.rb +21 -11
 - data/lib/kind/validator.rb +111 -0
 - data/lib/kind/version.rb +1 -1
 - metadata +78 -48
 - data/lib/kind/active_model/kind_validator.rb +0 -96
 - data/lib/kind/core.rb +0 -9
 - data/lib/kind/core/deprecation.rb +0 -29
 - data/lib/kind/core/kind.rb +0 -61
 - data/lib/kind/core/undefined.rb +0 -7
 - data/lib/kind/deprecations/built_in_type_checkers.rb +0 -23
 - data/lib/kind/deprecations/checker.rb +0 -16
 - data/lib/kind/deprecations/checker/factory.rb +0 -31
 - data/lib/kind/deprecations/checker/protocol.rb +0 -73
 - data/lib/kind/deprecations/is.rb +0 -35
 - data/lib/kind/deprecations/of.rb +0 -258
 - data/lib/kind/deprecations/types.rb +0 -121
 - data/lib/kind/error.rb +0 -15
 - data/lib/kind/maybe/result.rb +0 -51
 - data/lib/kind/type_checker.rb +0 -73
 - data/lib/kind/type_checkers.rb +0 -30
 
| 
         @@ -1,121 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            module Kind
         
     | 
| 
       4 
     | 
    
         
            -
              module Types
         
     | 
| 
       5 
     | 
    
         
            -
                extend self
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
                COLONS = '::'.freeze
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
                KIND_OF = <<-RUBY
         
     | 
| 
       10 
     | 
    
         
            -
                  def self.%{method_name}(object = Undefined, options = Empty::HASH)
         
     | 
| 
       11 
     | 
    
         
            -
                    DEPRECATION.warn_method_replacement('Kind::Of::%{method_name}', 'Kind::%{method_name}')
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                    default = options[:or]
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                    return Kind::Of::%{kind_name} if Undefined == object && default.nil?
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                    is_instance = Kind::Of::%{kind_name}.__is_instance__(object)
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                    return object if is_instance
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
                    KIND.of!(::%{kind_name_to_check}, object && default ? default : object || default)
         
     | 
| 
       22 
     | 
    
         
            -
                  end
         
     | 
| 
       23 
     | 
    
         
            -
                RUBY
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
                KIND_OF_IS = <<-RUBY
         
     | 
| 
       26 
     | 
    
         
            -
                  def self.%{method_name}?(*args)
         
     | 
| 
       27 
     | 
    
         
            -
                    DEPRECATION.warn_method_replacement('Kind::Of::%{method_name}?', 'Kind::%{method_name}?')
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
                    Kind::Of::%{kind_name}.instance?(*args)
         
     | 
| 
       30 
     | 
    
         
            -
                  end
         
     | 
| 
       31 
     | 
    
         
            -
                RUBY
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
                KIND_IS = <<-RUBY
         
     | 
| 
       34 
     | 
    
         
            -
                  def self.%{method_name}(value)
         
     | 
| 
       35 
     | 
    
         
            -
                    DEPRECATION.warn_removal('Kind::Is::%{method_name}')
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
                    KIND.is!(::%{kind_name_to_check}, value)
         
     | 
| 
       38 
     | 
    
         
            -
                  end
         
     | 
| 
       39 
     | 
    
         
            -
                RUBY
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
                private_constant :KIND_OF, :KIND_IS, :COLONS
         
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
                def add(kind, name: nil)
         
     | 
| 
       44 
     | 
    
         
            -
                  DEPRECATION.warn_removal('Kind::Types')
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
                  kind_name = KIND.of_module_or_class!(kind).name
         
     | 
| 
       47 
     | 
    
         
            -
                  checker = name ? Kind::String[name] : kind_name
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
                  if checker.include?(COLONS)
         
     | 
| 
       50 
     | 
    
         
            -
                    add_kind_with_namespace(checker, method_name: name)
         
     | 
| 
       51 
     | 
    
         
            -
                  else
         
     | 
| 
       52 
     | 
    
         
            -
                    add_root(checker, kind_name, method_name: name,
         
     | 
| 
       53 
     | 
    
         
            -
                                                 kind_name_to_check: kind_name,
         
     | 
| 
       54 
     | 
    
         
            -
                                                 create_kind_is_mod: false)
         
     | 
| 
       55 
     | 
    
         
            -
                  end
         
     | 
| 
       56 
     | 
    
         
            -
                end
         
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
                private
         
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
                  def add_root(checker, kind_name, method_name:, create_kind_is_mod:, kind_name_to_check: nil)
         
     | 
| 
       61 
     | 
    
         
            -
                    root_kind_name = method_name ? method_name : kind_name
         
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
       63 
     | 
    
         
            -
                    params = {
         
     | 
| 
       64 
     | 
    
         
            -
                      method_name: method_name ? method_name : checker,
         
     | 
| 
       65 
     | 
    
         
            -
                      kind_name: method_name ? method_name : kind_name,
         
     | 
| 
       66 
     | 
    
         
            -
                      kind_name_to_check: kind_name_to_check || root_kind_name
         
     | 
| 
       67 
     | 
    
         
            -
                    }
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
                    add_kind(params, Kind::Of, Kind::Is, create_kind_is_mod)
         
     | 
| 
       70 
     | 
    
         
            -
                  end
         
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       72 
     | 
    
         
            -
                  def add_kind_with_namespace(checker, method_name:)
         
     | 
| 
       73 
     | 
    
         
            -
                    raise NotImplementedError if method_name
         
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
                    const_names = checker.split(COLONS)
         
     | 
| 
       76 
     | 
    
         
            -
                    const_names.each_with_index do |const_name, index|
         
     | 
| 
       77 
     | 
    
         
            -
                      if index == 0
         
     | 
| 
       78 
     | 
    
         
            -
                        add_root(const_name, const_name, method_name: nil, create_kind_is_mod: true)
         
     | 
| 
       79 
     | 
    
         
            -
                      else
         
     | 
| 
       80 
     | 
    
         
            -
                        add_node(const_names, index)
         
     | 
| 
       81 
     | 
    
         
            -
                      end
         
     | 
| 
       82 
     | 
    
         
            -
                    end
         
     | 
| 
       83 
     | 
    
         
            -
                  end
         
     | 
| 
       84 
     | 
    
         
            -
             
     | 
| 
       85 
     | 
    
         
            -
                  def add_node(const_names, index)
         
     | 
| 
       86 
     | 
    
         
            -
                    namespace = const_names[0..(index-1)]
         
     | 
| 
       87 
     | 
    
         
            -
                    namespace_name = namespace.join(COLONS)
         
     | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
       89 
     | 
    
         
            -
                    kind_of_mod = Kind::Of.const_get(namespace_name)
         
     | 
| 
       90 
     | 
    
         
            -
                    kind_is_mod = Kind::Is.const_get(namespace_name)
         
     | 
| 
       91 
     | 
    
         
            -
             
     | 
| 
       92 
     | 
    
         
            -
                    checker = const_names[index]
         
     | 
| 
       93 
     | 
    
         
            -
                    kind_name = const_names[0..index].join(COLONS)
         
     | 
| 
       94 
     | 
    
         
            -
             
     | 
| 
       95 
     | 
    
         
            -
                    params = { method_name: checker, kind_name: kind_name }
         
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
       97 
     | 
    
         
            -
                    add_kind(params, kind_of_mod, kind_is_mod, true)
         
     | 
| 
       98 
     | 
    
         
            -
                  end
         
     | 
| 
       99 
     | 
    
         
            -
             
     | 
| 
       100 
     | 
    
         
            -
                  def add_kind(params, kind_of_mod, kind_is_mod, create_kind_is_mod)
         
     | 
| 
       101 
     | 
    
         
            -
                    method_name = params[:method_name]
         
     | 
| 
       102 
     | 
    
         
            -
             
     | 
| 
       103 
     | 
    
         
            -
                    unless kind_of_mod.respond_to?(method_name)
         
     | 
| 
       104 
     | 
    
         
            -
                      kind_name = params[:kind_name]
         
     | 
| 
       105 
     | 
    
         
            -
                      params[:kind_name_to_check] ||= kind_name
         
     | 
| 
       106 
     | 
    
         
            -
             
     | 
| 
       107 
     | 
    
         
            -
                      kind_checker = ::Module.new { extend Checker::Protocol }
         
     | 
| 
       108 
     | 
    
         
            -
                      kind_checker.module_eval("def self.__kind; ::#{params[:kind_name_to_check]}; end")
         
     | 
| 
       109 
     | 
    
         
            -
             
     | 
| 
       110 
     | 
    
         
            -
                      kind_of_mod.instance_eval(KIND_OF % params)
         
     | 
| 
       111 
     | 
    
         
            -
                      kind_of_mod.const_set(method_name, kind_checker)
         
     | 
| 
       112 
     | 
    
         
            -
                      kind_of_mod.instance_eval(KIND_OF_IS % params)
         
     | 
| 
       113 
     | 
    
         
            -
                    end
         
     | 
| 
       114 
     | 
    
         
            -
             
     | 
| 
       115 
     | 
    
         
            -
                    unless kind_is_mod.respond_to?(method_name)
         
     | 
| 
       116 
     | 
    
         
            -
                      kind_is_mod.instance_eval(KIND_IS % params)
         
     | 
| 
       117 
     | 
    
         
            -
                      kind_is_mod.const_set(method_name, ::Module.new) if create_kind_is_mod
         
     | 
| 
       118 
     | 
    
         
            -
                    end
         
     | 
| 
       119 
     | 
    
         
            -
                  end
         
     | 
| 
       120 
     | 
    
         
            -
              end
         
     | 
| 
       121 
     | 
    
         
            -
            end
         
     | 
    
        data/lib/kind/error.rb
    DELETED
    
    | 
         @@ -1,15 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            module Kind
         
     | 
| 
       4 
     | 
    
         
            -
              class Error < TypeError
         
     | 
| 
       5 
     | 
    
         
            -
                def initialize(arg, object = UNDEFINED)
         
     | 
| 
       6 
     | 
    
         
            -
                  if UNDEFINED == object
         
     | 
| 
       7 
     | 
    
         
            -
                    # Will be used when the exception was raised with a message. e.g:
         
     | 
| 
       8 
     | 
    
         
            -
                    # raise Kind::Error, "some message"
         
     | 
| 
       9 
     | 
    
         
            -
                    super(arg)
         
     | 
| 
       10 
     | 
    
         
            -
                  else
         
     | 
| 
       11 
     | 
    
         
            -
                    super("#{object.inspect} expected to be a kind of #{arg}")
         
     | 
| 
       12 
     | 
    
         
            -
                  end
         
     | 
| 
       13 
     | 
    
         
            -
                end
         
     | 
| 
       14 
     | 
    
         
            -
              end
         
     | 
| 
       15 
     | 
    
         
            -
            end
         
     | 
    
        data/lib/kind/maybe/result.rb
    DELETED
    
    | 
         @@ -1,51 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            module Kind
         
     | 
| 
       4 
     | 
    
         
            -
              module Maybe
         
     | 
| 
       5 
     | 
    
         
            -
                class Result
         
     | 
| 
       6 
     | 
    
         
            -
                  attr_reader :value
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
                  Value = ->(arg) { arg.kind_of?(::Kind::Maybe::Result) ? arg.value : arg } # :nodoc:
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
                  def initialize(arg)
         
     | 
| 
       11 
     | 
    
         
            -
                    @value = Value.(arg)
         
     | 
| 
       12 
     | 
    
         
            -
                  end
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
                  def value_or(method_name = UNDEFINED, &block)
         
     | 
| 
       15 
     | 
    
         
            -
                    raise NotImplementedError
         
     | 
| 
       16 
     | 
    
         
            -
                  end
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
                  def none?
         
     | 
| 
       19 
     | 
    
         
            -
                    raise NotImplementedError
         
     | 
| 
       20 
     | 
    
         
            -
                  end
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
                  def some?; !none?; end
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
                  def map(&fn)
         
     | 
| 
       25 
     | 
    
         
            -
                    raise NotImplementedError
         
     | 
| 
       26 
     | 
    
         
            -
                  end
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
                  alias_method :map!, :map
         
     | 
| 
       29 
     | 
    
         
            -
                  alias_method :then, :map
         
     | 
| 
       30 
     | 
    
         
            -
                  alias_method :then!, :map
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
                  def check(&fn)
         
     | 
| 
       33 
     | 
    
         
            -
                    raise NotImplementedError
         
     | 
| 
       34 
     | 
    
         
            -
                  end
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
                  def try(method_name = UNDEFINED, &block)
         
     | 
| 
       37 
     | 
    
         
            -
                    raise NotImplementedError
         
     | 
| 
       38 
     | 
    
         
            -
                  end
         
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
                  alias_method :try!, :try
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
                  def dig(*keys)
         
     | 
| 
       43 
     | 
    
         
            -
                    raise NotImplementedError
         
     | 
| 
       44 
     | 
    
         
            -
                  end
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
                  def presence
         
     | 
| 
       47 
     | 
    
         
            -
                    raise NotImplementedError
         
     | 
| 
       48 
     | 
    
         
            -
                  end
         
     | 
| 
       49 
     | 
    
         
            -
                end
         
     | 
| 
       50 
     | 
    
         
            -
              end
         
     | 
| 
       51 
     | 
    
         
            -
            end
         
     | 
    
        data/lib/kind/type_checker.rb
    DELETED
    
    | 
         @@ -1,73 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            module Kind
         
     | 
| 
       4 
     | 
    
         
            -
              module TypeChecker
         
     | 
| 
       5 
     | 
    
         
            -
                def name
         
     | 
| 
       6 
     | 
    
         
            -
                  kind.name
         
     | 
| 
       7 
     | 
    
         
            -
                end
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
                def ===(value)
         
     | 
| 
       10 
     | 
    
         
            -
                  kind === value
         
     | 
| 
       11 
     | 
    
         
            -
                end
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                def [](value)
         
     | 
| 
       14 
     | 
    
         
            -
                  return value if self === value
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
                  KIND.error!(name, value)
         
     | 
| 
       17 
     | 
    
         
            -
                end
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                def or_nil(value)
         
     | 
| 
       20 
     | 
    
         
            -
                  return value if self === value
         
     | 
| 
       21 
     | 
    
         
            -
                end
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
                def or_undefined(value)
         
     | 
| 
       24 
     | 
    
         
            -
                  or_nil(value) || Undefined
         
     | 
| 
       25 
     | 
    
         
            -
                end
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
                def or(fallback, value = UNDEFINED)
         
     | 
| 
       28 
     | 
    
         
            -
                  return __or_func.(fallback) if UNDEFINED === value
         
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
                  self === value ? value : fallback
         
     | 
| 
       31 
     | 
    
         
            -
                end
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
                def value?(value = UNDEFINED)
         
     | 
| 
       34 
     | 
    
         
            -
                  return self === value if UNDEFINED != value
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
                  @__is_value ||= ->(ck) { ->(value) { ck === value } }.(self)
         
     | 
| 
       37 
     | 
    
         
            -
                end
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
                def value(arg, default:)
         
     | 
| 
       40 
     | 
    
         
            -
                  KIND.value(self, arg, self[default])
         
     | 
| 
       41 
     | 
    
         
            -
                end
         
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
                def or_null(value) # :nodoc:
         
     | 
| 
       44 
     | 
    
         
            -
                  KIND.null?(value) ? value : self[value]
         
     | 
| 
       45 
     | 
    
         
            -
                end
         
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
                private
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
                  def __or_func
         
     | 
| 
       50 
     | 
    
         
            -
                    @__or_func ||= ->(tc, fb, value) { tc === value ? value : tc.or_null(fb) }.curry[self]
         
     | 
| 
       51 
     | 
    
         
            -
                  end
         
     | 
| 
       52 
     | 
    
         
            -
              end
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
              class TypeChecker::Object # :nodoc: all
         
     | 
| 
       55 
     | 
    
         
            -
                include TypeChecker
         
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
                ResolveKindName = ->(kind, opt) do
         
     | 
| 
       58 
     | 
    
         
            -
                  name = Try.(opt, :[], :name)
         
     | 
| 
       59 
     | 
    
         
            -
                  name || Try.(kind, :name)
         
     | 
| 
       60 
     | 
    
         
            -
                end
         
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
                attr_reader :kind, :name
         
     | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
       64 
     | 
    
         
            -
                def initialize(kind, opt)
         
     | 
| 
       65 
     | 
    
         
            -
                  name = ResolveKindName.(kind, opt)
         
     | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
       67 
     | 
    
         
            -
                  @name = KIND.of!(::String, name)
         
     | 
| 
       68 
     | 
    
         
            -
                  @kind = KIND.respond_to!(:===, kind)
         
     | 
| 
       69 
     | 
    
         
            -
                end
         
     | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
       71 
     | 
    
         
            -
                private_constant :ResolveKindName
         
     | 
| 
       72 
     | 
    
         
            -
              end
         
     | 
| 
       73 
     | 
    
         
            -
            end
         
     | 
    
        data/lib/kind/type_checkers.rb
    DELETED
    
    | 
         @@ -1,30 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            require 'kind/type_checkers/core/array'
         
     | 
| 
       4 
     | 
    
         
            -
            require 'kind/type_checkers/core/class'
         
     | 
| 
       5 
     | 
    
         
            -
            require 'kind/type_checkers/core/comparable'
         
     | 
| 
       6 
     | 
    
         
            -
            require 'kind/type_checkers/core/enumerable'
         
     | 
| 
       7 
     | 
    
         
            -
            require 'kind/type_checkers/core/enumerator'
         
     | 
| 
       8 
     | 
    
         
            -
            require 'kind/type_checkers/core/file'
         
     | 
| 
       9 
     | 
    
         
            -
            require 'kind/type_checkers/core/float'
         
     | 
| 
       10 
     | 
    
         
            -
            require 'kind/type_checkers/core/hash'
         
     | 
| 
       11 
     | 
    
         
            -
            require 'kind/type_checkers/core/integer'
         
     | 
| 
       12 
     | 
    
         
            -
            require 'kind/type_checkers/core/io'
         
     | 
| 
       13 
     | 
    
         
            -
            require 'kind/type_checkers/core/module'
         
     | 
| 
       14 
     | 
    
         
            -
            require 'kind/type_checkers/core/method'
         
     | 
| 
       15 
     | 
    
         
            -
            require 'kind/type_checkers/core/numeric'
         
     | 
| 
       16 
     | 
    
         
            -
            require 'kind/type_checkers/core/proc'
         
     | 
| 
       17 
     | 
    
         
            -
            require 'kind/type_checkers/core/queue'
         
     | 
| 
       18 
     | 
    
         
            -
            require 'kind/type_checkers/core/range'
         
     | 
| 
       19 
     | 
    
         
            -
            require 'kind/type_checkers/core/regexp'
         
     | 
| 
       20 
     | 
    
         
            -
            require 'kind/type_checkers/core/string'
         
     | 
| 
       21 
     | 
    
         
            -
            require 'kind/type_checkers/core/struct'
         
     | 
| 
       22 
     | 
    
         
            -
            require 'kind/type_checkers/core/symbol'
         
     | 
| 
       23 
     | 
    
         
            -
            require 'kind/type_checkers/core/time'
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
            require 'kind/type_checkers/stdlib/open_struct'
         
     | 
| 
       26 
     | 
    
         
            -
            require 'kind/type_checkers/stdlib/set'
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
            require 'kind/type_checkers/custom/boolean'
         
     | 
| 
       29 
     | 
    
         
            -
            require 'kind/type_checkers/custom/callable'
         
     | 
| 
       30 
     | 
    
         
            -
            require 'kind/type_checkers/custom/lambda'
         
     |