kind 3.0.1 → 5.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|