kind 3.0.1 → 5.1.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 -0
- data/.travis.sh +42 -12
- data/.travis.yml +7 -5
- data/CHANGELOG.md +1309 -0
- data/Gemfile +22 -7
- data/README.md +990 -490
- data/kind.gemspec +1 -1
- data/lib/kind.rb +29 -292
- data/lib/kind/active_model/validation.rb +3 -4
- data/lib/kind/core.rb +15 -0
- data/lib/kind/core/dig.rb +40 -0
- data/lib/kind/core/empty.rb +13 -0
- data/lib/kind/core/empty/constant.rb +7 -0
- data/lib/kind/{error.rb → core/error.rb} +2 -6
- data/lib/kind/core/maybe.rb +42 -0
- data/lib/kind/core/maybe/none.rb +57 -0
- data/lib/kind/core/maybe/result.rb +51 -0
- data/lib/kind/core/maybe/some.rb +90 -0
- data/lib/kind/core/maybe/typed.rb +29 -0
- data/lib/kind/core/maybe/wrappable.rb +33 -0
- data/lib/kind/core/presence.rb +33 -0
- data/lib/kind/core/try.rb +34 -0
- data/lib/kind/core/type_checker.rb +87 -0
- data/lib/kind/core/type_checkers.rb +30 -0
- data/lib/kind/core/type_checkers/custom/boolean.rb +19 -0
- data/lib/kind/core/type_checkers/custom/callable.rb +19 -0
- data/lib/kind/core/type_checkers/custom/lambda.rb +19 -0
- data/lib/kind/core/type_checkers/ruby/array.rb +17 -0
- data/lib/kind/core/type_checkers/ruby/class.rb +13 -0
- data/lib/kind/core/type_checkers/ruby/comparable.rb +13 -0
- data/lib/kind/core/type_checkers/ruby/enumerable.rb +13 -0
- data/lib/kind/core/type_checkers/ruby/enumerator.rb +13 -0
- data/lib/kind/core/type_checkers/ruby/file.rb +13 -0
- data/lib/kind/core/type_checkers/ruby/float.rb +13 -0
- data/lib/kind/core/type_checkers/ruby/hash.rb +17 -0
- data/lib/kind/core/type_checkers/ruby/integer.rb +13 -0
- data/lib/kind/core/type_checkers/ruby/io.rb +13 -0
- data/lib/kind/core/type_checkers/ruby/method.rb +13 -0
- data/lib/kind/core/type_checkers/ruby/module.rb +17 -0
- data/lib/kind/core/type_checkers/ruby/numeric.rb +13 -0
- data/lib/kind/core/type_checkers/ruby/proc.rb +13 -0
- data/lib/kind/core/type_checkers/ruby/queue.rb +14 -0
- data/lib/kind/core/type_checkers/ruby/range.rb +13 -0
- data/lib/kind/core/type_checkers/ruby/regexp.rb +13 -0
- data/lib/kind/core/type_checkers/ruby/string.rb +17 -0
- data/lib/kind/core/type_checkers/ruby/struct.rb +13 -0
- data/lib/kind/core/type_checkers/ruby/symbol.rb +13 -0
- data/lib/kind/core/type_checkers/ruby/time.rb +13 -0
- data/lib/kind/core/type_checkers/stdlib/open_struct.rb +13 -0
- data/lib/kind/core/type_checkers/stdlib/set.rb +17 -0
- data/lib/kind/{undefined.rb → core/undefined.rb} +4 -2
- data/lib/kind/core/utils/kind.rb +61 -0
- data/lib/kind/core/utils/undefined.rb +7 -0
- data/lib/kind/validator.rb +108 -1
- data/lib/kind/version.rb +1 -1
- data/test.sh +4 -4
- metadata +50 -15
- data/lib/kind/active_model/kind_validator.rb +0 -96
- data/lib/kind/checker.rb +0 -15
- data/lib/kind/checker/factory.rb +0 -35
- data/lib/kind/checker/protocol.rb +0 -73
- data/lib/kind/empty.rb +0 -21
- data/lib/kind/is.rb +0 -19
- data/lib/kind/maybe.rb +0 -183
- data/lib/kind/of.rb +0 -11
- data/lib/kind/types.rb +0 -115
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'kind/core/type_checkers/ruby/array'
|
4
|
+
require 'kind/core/type_checkers/ruby/class'
|
5
|
+
require 'kind/core/type_checkers/ruby/comparable'
|
6
|
+
require 'kind/core/type_checkers/ruby/enumerable'
|
7
|
+
require 'kind/core/type_checkers/ruby/enumerator'
|
8
|
+
require 'kind/core/type_checkers/ruby/file'
|
9
|
+
require 'kind/core/type_checkers/ruby/float'
|
10
|
+
require 'kind/core/type_checkers/ruby/hash'
|
11
|
+
require 'kind/core/type_checkers/ruby/integer'
|
12
|
+
require 'kind/core/type_checkers/ruby/io'
|
13
|
+
require 'kind/core/type_checkers/ruby/module'
|
14
|
+
require 'kind/core/type_checkers/ruby/method'
|
15
|
+
require 'kind/core/type_checkers/ruby/numeric'
|
16
|
+
require 'kind/core/type_checkers/ruby/proc'
|
17
|
+
require 'kind/core/type_checkers/ruby/queue'
|
18
|
+
require 'kind/core/type_checkers/ruby/range'
|
19
|
+
require 'kind/core/type_checkers/ruby/regexp'
|
20
|
+
require 'kind/core/type_checkers/ruby/string'
|
21
|
+
require 'kind/core/type_checkers/ruby/struct'
|
22
|
+
require 'kind/core/type_checkers/ruby/symbol'
|
23
|
+
require 'kind/core/type_checkers/ruby/time'
|
24
|
+
|
25
|
+
require 'kind/core/type_checkers/stdlib/open_struct'
|
26
|
+
require 'kind/core/type_checkers/stdlib/set'
|
27
|
+
|
28
|
+
require 'kind/core/type_checkers/custom/boolean'
|
29
|
+
require 'kind/core/type_checkers/custom/callable'
|
30
|
+
require 'kind/core/type_checkers/custom/lambda'
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kind
|
4
|
+
module Boolean
|
5
|
+
extend self, TypeChecker
|
6
|
+
|
7
|
+
def kind; [TrueClass, FalseClass].freeze; end
|
8
|
+
|
9
|
+
def name; 'Boolean'; end
|
10
|
+
|
11
|
+
def ===(value)
|
12
|
+
::TrueClass === value || ::FalseClass === value
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.Boolean?(*values)
|
17
|
+
KIND.of?(Boolean, values)
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kind
|
4
|
+
module Callable
|
5
|
+
extend self, TypeChecker
|
6
|
+
|
7
|
+
def kind; raise NotImplementedError; end
|
8
|
+
|
9
|
+
def name; 'Callable'; end
|
10
|
+
|
11
|
+
def ===(value)
|
12
|
+
value.respond_to?(:call)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.Callable?(*values)
|
17
|
+
KIND.of?(Callable, values)
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kind
|
4
|
+
module Lambda
|
5
|
+
extend self, TypeChecker
|
6
|
+
|
7
|
+
def kind; ::Proc; end
|
8
|
+
|
9
|
+
def name; 'Lambda'; end
|
10
|
+
|
11
|
+
def ===(value)
|
12
|
+
value.kind_of?(::Proc) && value.lambda?
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.Lambda?(*values)
|
17
|
+
KIND.of?(Lambda, values)
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kind
|
4
|
+
module Array
|
5
|
+
extend self, TypeChecker
|
6
|
+
|
7
|
+
def kind; ::Array; end
|
8
|
+
|
9
|
+
def value_or_empty(arg)
|
10
|
+
KIND.value(self, arg, Empty::ARRAY)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.Array?(*values)
|
15
|
+
KIND.of?(::Array, values)
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kind
|
4
|
+
module Hash
|
5
|
+
extend self, TypeChecker
|
6
|
+
|
7
|
+
def kind; ::Hash; end
|
8
|
+
|
9
|
+
def value_or_empty(arg)
|
10
|
+
KIND.value(self, arg, Empty::HASH)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.Hash?(*values)
|
15
|
+
KIND.of?(::Hash, values)
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kind
|
4
|
+
module Module
|
5
|
+
extend self, TypeChecker
|
6
|
+
|
7
|
+
def kind; ::Module; end
|
8
|
+
|
9
|
+
def ===(value)
|
10
|
+
Kind.of_module?(value)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.Module?(*values)
|
15
|
+
KIND.of?(::Kind::Module, values)
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kind
|
4
|
+
module String
|
5
|
+
extend self, TypeChecker
|
6
|
+
|
7
|
+
def kind; ::String; end
|
8
|
+
|
9
|
+
def value_or_empty(arg)
|
10
|
+
KIND.value(self, arg, Empty::STRING)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.String?(*values)
|
15
|
+
KIND.of?(::String, values)
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kind
|
4
|
+
module Set
|
5
|
+
extend self, TypeChecker
|
6
|
+
|
7
|
+
def kind; ::Set; end
|
8
|
+
|
9
|
+
def value_or_empty(arg)
|
10
|
+
KIND.value(self, arg, Empty::SET)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.Set?(*values)
|
15
|
+
KIND.of?(::Set, values)
|
16
|
+
end
|
17
|
+
end
|