kind 5.1.0 → 5.5.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 +37 -10
- data/CHANGELOG.md +518 -29
- data/README.md +48 -45
- data/kind.gemspec +2 -2
- data/lib/kind.rb +2 -49
- 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 +1 -1
- data/lib/kind/basic.rb +83 -0
- data/lib/kind/basic/error.rb +29 -0
- data/lib/kind/{core → basic}/undefined.rb +6 -1
- data/lib/kind/{core/dig.rb → 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/{core/empty.rb → empty.rb} +2 -0
- data/lib/kind/{core/empty → empty}/constant.rb +0 -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 +87 -0
- data/lib/kind/functional/steps.rb +22 -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 +69 -0
- 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 +50 -0
- data/lib/kind/maybe/some.rb +132 -0
- data/lib/kind/maybe/typed.rb +35 -0
- data/lib/kind/{core/maybe/wrappable.rb → maybe/wrapper.rb} +8 -4
- 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/{core/type_checkers/ruby → objects/modules/core}/array.rb +3 -1
- data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/class.rb +1 -1
- data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/comparable.rb +1 -1
- data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/enumerable.rb +1 -1
- data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/enumerator.rb +1 -1
- data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/file.rb +1 -1
- data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/float.rb +1 -1
- data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/hash.rb +3 -1
- data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/integer.rb +1 -1
- data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/io.rb +1 -1
- data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/method.rb +1 -1
- data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/module.rb +1 -1
- data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/numeric.rb +1 -1
- data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/proc.rb +1 -1
- data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/queue.rb +1 -1
- data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/range.rb +1 -1
- data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/regexp.rb +1 -1
- data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/string.rb +3 -1
- data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/struct.rb +1 -1
- data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/symbol.rb +1 -1
- data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/time.rb +1 -1
- data/lib/kind/{core/type_checkers → objects/modules}/custom/boolean.rb +2 -2
- data/lib/kind/{core/type_checkers → objects/modules}/custom/callable.rb +1 -1
- data/lib/kind/{core/type_checkers → objects/modules}/custom/lambda.rb +1 -1
- data/lib/kind/{core/type_checkers → objects/modules}/stdlib/open_struct.rb +3 -1
- data/lib/kind/{core/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/{core/presence.rb → 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 +46 -0
- data/lib/kind/validator.rb +14 -10
- data/lib/kind/version.rb +1 -1
- metadata +91 -49
- data/lib/kind/core.rb +0 -15
- data/lib/kind/core/error.rb +0 -15
- data/lib/kind/core/maybe.rb +0 -42
- data/lib/kind/core/maybe/none.rb +0 -57
- data/lib/kind/core/maybe/result.rb +0 -51
- data/lib/kind/core/maybe/some.rb +0 -90
- data/lib/kind/core/maybe/typed.rb +0 -29
- data/lib/kind/core/try.rb +0 -34
- data/lib/kind/core/type_checker.rb +0 -87
- data/lib/kind/core/type_checkers.rb +0 -30
- data/lib/kind/core/utils/kind.rb +0 -61
- data/lib/kind/core/utils/undefined.rb +0 -7
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kind
|
4
|
+
module Result::Abstract
|
5
|
+
def failure?
|
6
|
+
false
|
7
|
+
end
|
8
|
+
|
9
|
+
def failed?
|
10
|
+
failure?
|
11
|
+
end
|
12
|
+
|
13
|
+
def success?
|
14
|
+
false
|
15
|
+
end
|
16
|
+
|
17
|
+
def succeeded?
|
18
|
+
success?
|
19
|
+
end
|
20
|
+
|
21
|
+
def on(&block)
|
22
|
+
raise NotImplementedError
|
23
|
+
end
|
24
|
+
|
25
|
+
def on_success(types = Undefined, matcher = Undefined)
|
26
|
+
raise NotImplementedError
|
27
|
+
end
|
28
|
+
|
29
|
+
def on_failure(types = Undefined, matcher = Undefined)
|
30
|
+
raise NotImplementedError
|
31
|
+
end
|
32
|
+
|
33
|
+
def result?(types, matcher)
|
34
|
+
undef_t = Undefined == (t = types)
|
35
|
+
undef_m = Undefined == (m = matcher)
|
36
|
+
|
37
|
+
return true if undef_t && undef_m
|
38
|
+
|
39
|
+
if !undef_t && undef_m && !(Array === types || Symbol === types)
|
40
|
+
m, t = types, matcher
|
41
|
+
|
42
|
+
undef_m, undef_t = false, true
|
43
|
+
end
|
44
|
+
|
45
|
+
is_type = undef_t || (::Array === t ? t.empty? || t.include?(type) : t == type)
|
46
|
+
is_type && (undef_m || m === value)
|
47
|
+
end
|
48
|
+
|
49
|
+
def to_ary
|
50
|
+
[type, value]
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kind
|
4
|
+
class Result::Failure < Result::Monad
|
5
|
+
DEFAULT_TYPE = :error
|
6
|
+
|
7
|
+
def failure?
|
8
|
+
true
|
9
|
+
end
|
10
|
+
|
11
|
+
def value_or(default = UNDEFINED, &block)
|
12
|
+
Error.invalid_default_arg! if UNDEFINED == default && !block
|
13
|
+
|
14
|
+
UNDEFINED != default ? default : block.call(value)
|
15
|
+
end
|
16
|
+
|
17
|
+
def map(_ = UNDEFINED, &_fn)
|
18
|
+
self
|
19
|
+
end
|
20
|
+
|
21
|
+
alias_method :|, :map
|
22
|
+
alias_method :>>, :map
|
23
|
+
alias_method :map!, :map
|
24
|
+
alias_method :then, :map
|
25
|
+
alias_method :then!, :map
|
26
|
+
alias_method :and_then, :map
|
27
|
+
alias_method :and_then!, :map
|
28
|
+
|
29
|
+
def inspect
|
30
|
+
'#<%s type=%p value=%p>' % ['Kind::Failure', type, value]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kind
|
4
|
+
module Result::Methods
|
5
|
+
def Failure(arg1 = UNDEFINED, arg2 = UNDEFINED)
|
6
|
+
Result::Failure[arg1, arg2]
|
7
|
+
end
|
8
|
+
|
9
|
+
def Success(arg1 = UNDEFINED, arg2 = UNDEFINED)
|
10
|
+
Result::Success[arg1, arg2]
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.included(base)
|
14
|
+
base.send(:private, :Success, :Failure)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kind
|
4
|
+
class Result::Monad
|
5
|
+
include Result::Abstract
|
6
|
+
|
7
|
+
require 'kind/empty'
|
8
|
+
require 'kind/result/monad/wrapper'
|
9
|
+
|
10
|
+
attr_reader :type, :value
|
11
|
+
|
12
|
+
def self.[](arg1 = UNDEFINED, arg2 = UNDEFINED, opt = Empty::HASH) # :nodoc:
|
13
|
+
value_must_be_a = opt[:value_must_be_a]
|
14
|
+
|
15
|
+
type = UNDEFINED == arg2 ? self::DEFAULT_TYPE : STRICT.kind_of(::Symbol, arg1)
|
16
|
+
|
17
|
+
Error.wrong_number_of_args!(given: 0, expected: '1 or 2') if UNDEFINED == arg1
|
18
|
+
|
19
|
+
value = UNDEFINED == arg2 ? arg1 : arg2
|
20
|
+
|
21
|
+
new(type, (value_must_be_a ? STRICT.kind_of(value_must_be_a, value) : value))
|
22
|
+
end
|
23
|
+
|
24
|
+
private_class_method :new
|
25
|
+
|
26
|
+
def initialize(type, value)
|
27
|
+
@type = type
|
28
|
+
@value = value
|
29
|
+
end
|
30
|
+
|
31
|
+
def value_or(_method_name = UNDEFINED, &block)
|
32
|
+
raise NotImplementedError
|
33
|
+
end
|
34
|
+
|
35
|
+
def map(_ = UNDEFINED, &_fn)
|
36
|
+
raise NotImplementedError
|
37
|
+
end
|
38
|
+
|
39
|
+
alias_method :|, :map
|
40
|
+
alias_method :>>, :map
|
41
|
+
alias_method :map!, :map
|
42
|
+
alias_method :then, :map
|
43
|
+
alias_method :then!, :map
|
44
|
+
alias_method :and_then, :map
|
45
|
+
alias_method :and_then!, :map
|
46
|
+
|
47
|
+
def on
|
48
|
+
monad = Wrapper.new(self)
|
49
|
+
|
50
|
+
yield(monad)
|
51
|
+
|
52
|
+
monad.output
|
53
|
+
end
|
54
|
+
|
55
|
+
def on_success(types = Undefined, matcher = Undefined)
|
56
|
+
yield(value) if success? && result?(types, matcher)
|
57
|
+
|
58
|
+
self
|
59
|
+
end
|
60
|
+
|
61
|
+
def on_failure(types = Undefined, matcher = Undefined)
|
62
|
+
yield(value) if failure? && result?(types, matcher)
|
63
|
+
|
64
|
+
self
|
65
|
+
end
|
66
|
+
|
67
|
+
def ===(m)
|
68
|
+
return false unless Result::Abstract === m
|
69
|
+
return false unless (self.success? && m.success?) || (self.failure? && m.failure?)
|
70
|
+
|
71
|
+
self.type == m.type && self.value === m.value
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kind
|
4
|
+
require 'kind/monad'
|
5
|
+
|
6
|
+
class Result::Monad::Wrapper < Kind::Monad::Wrapper
|
7
|
+
def failure(types = Undefined, matcher = Undefined)
|
8
|
+
return if @monad.success? || output?
|
9
|
+
|
10
|
+
@output = yield(@monad.value) if @monad.result?(types, matcher)
|
11
|
+
end
|
12
|
+
|
13
|
+
def success(types = Undefined, matcher = Undefined)
|
14
|
+
return if @monad.failure? || output?
|
15
|
+
|
16
|
+
@output = yield(@monad.value) if @monad.result?(types, matcher)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kind
|
4
|
+
class Result::Success < Result::Monad
|
5
|
+
DEFAULT_TYPE = :ok
|
6
|
+
|
7
|
+
def success?
|
8
|
+
true
|
9
|
+
end
|
10
|
+
|
11
|
+
def value_or(_default = UNDEFINED, &block)
|
12
|
+
@value
|
13
|
+
end
|
14
|
+
|
15
|
+
def map(callable = UNDEFINED, &fn)
|
16
|
+
_resolve_map(callable, fn)
|
17
|
+
rescue Kind::Monad::Error => e
|
18
|
+
raise e
|
19
|
+
rescue StandardError => e
|
20
|
+
Result::Failure[:exception, e]
|
21
|
+
end
|
22
|
+
|
23
|
+
alias_method :then, :map
|
24
|
+
alias_method :and_then, :map
|
25
|
+
|
26
|
+
def map!(callable = UNDEFINED, &fn)
|
27
|
+
_resolve_map(callable, fn)
|
28
|
+
end
|
29
|
+
|
30
|
+
alias_method :|, :map!
|
31
|
+
alias_method :>>, :map!
|
32
|
+
alias_method :then!, :map!
|
33
|
+
alias_method :and_then!, :map!
|
34
|
+
|
35
|
+
def inspect
|
36
|
+
'#<%s type=%p value=%p>' % ['Kind::Success', type, value]
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def _resolve_map(callable, fn)
|
42
|
+
callable.respond_to?(:call) ? _map(callable) : _map(fn)
|
43
|
+
end
|
44
|
+
|
45
|
+
def _map(fn)
|
46
|
+
monad = fn.call(@value)
|
47
|
+
|
48
|
+
return monad if Result::Monad === monad
|
49
|
+
|
50
|
+
raise Kind::Monad::Error.new('Kind::Success | Kind::Failure', monad)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kind
|
4
|
+
module STRICT
|
5
|
+
[
|
6
|
+
:object_is_a, :class!, :kind_of,
|
7
|
+
:module_or_class, :module!, :not_nil
|
8
|
+
].each { |method_name| remove_method(method_name) }
|
9
|
+
|
10
|
+
def object_is_a(_kind, value, _label = nil) # :nodoc:
|
11
|
+
value
|
12
|
+
end
|
13
|
+
|
14
|
+
def class!(value) # :nodoc:
|
15
|
+
value
|
16
|
+
end
|
17
|
+
|
18
|
+
def kind_of(_kind, value, _kind_name = nil) # :nodoc:
|
19
|
+
value
|
20
|
+
end
|
21
|
+
|
22
|
+
def module_or_class(value) # :nodoc:
|
23
|
+
value
|
24
|
+
end
|
25
|
+
|
26
|
+
def module!(value) # :nodoc:
|
27
|
+
value
|
28
|
+
end
|
29
|
+
|
30
|
+
def not_nil(value, label) # :nodoc:
|
31
|
+
value
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/kind/try.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'kind/basic'
|
4
|
+
require 'kind/empty'
|
5
|
+
require 'kind/presence'
|
6
|
+
|
7
|
+
module Kind
|
8
|
+
module Try
|
9
|
+
extend self
|
10
|
+
|
11
|
+
def call!(object, method_name, args = Empty::ARRAY) # :nodoc
|
12
|
+
return if KIND.nil_or_undefined?(object)
|
13
|
+
|
14
|
+
resolve(object, method_name, args)
|
15
|
+
end
|
16
|
+
|
17
|
+
def call(object, *input)
|
18
|
+
args = input.size == 1 && input[0].kind_of?(::Array) ? input[0] : input
|
19
|
+
|
20
|
+
result = call!(object, args.shift, args)
|
21
|
+
|
22
|
+
return result unless block_given?
|
23
|
+
|
24
|
+
yield(result) unless KIND.nil_or_undefined?(result)
|
25
|
+
end
|
26
|
+
|
27
|
+
def presence(*args, &block)
|
28
|
+
Presence.(call(*args, &block))
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.[](*args)
|
32
|
+
method_name = args.shift
|
33
|
+
|
34
|
+
->(object) { call!(object, method_name, args) }
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def resolve(object, method_name, args)
|
40
|
+
return unless object.respond_to?(method_name)
|
41
|
+
return object.public_send(method_name) if args.empty?
|
42
|
+
|
43
|
+
object.public_send(method_name, *args)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/kind/validator.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'kind'
|
3
|
+
require 'kind/basic'
|
4
4
|
|
5
5
|
module Kind
|
6
6
|
module Validator
|
@@ -77,11 +77,15 @@ class KindValidator < ActiveModel::EachValidator
|
|
77
77
|
end
|
78
78
|
|
79
79
|
def kind_of(expected, value)
|
80
|
-
|
80
|
+
if ::Array === expected
|
81
|
+
return if expected.any? { |type| type === value }
|
81
82
|
|
82
|
-
|
83
|
+
"must be a kind of #{expected.map { |type| type.name }.join(', ')}"
|
84
|
+
else
|
85
|
+
return if expected === value
|
83
86
|
|
84
|
-
|
87
|
+
expected.respond_to?(:name) ? "must be a kind of #{expected.name}" : 'invalid kind'
|
88
|
+
end
|
85
89
|
end
|
86
90
|
|
87
91
|
CLASS_OR_MODULE = 'Class/Module'.freeze
|
@@ -97,11 +101,11 @@ class KindValidator < ActiveModel::EachValidator
|
|
97
101
|
def kind_is_not(expected, value)
|
98
102
|
case expected
|
99
103
|
when ::Class
|
100
|
-
return if expected == Kind
|
104
|
+
return if expected == Kind.of_class(value) || value < expected
|
101
105
|
|
102
106
|
"must be the class or a subclass of `#{expected.name}`"
|
103
107
|
when ::Module
|
104
|
-
return if value.kind_of?(Class) && value <= expected
|
108
|
+
return if value.kind_of?(::Class) && value <= expected
|
105
109
|
return if expected == Kind.of_module_or_class(value) || value.kind_of?(expected)
|
106
110
|
|
107
111
|
"must include the `#{expected.name}` module"
|
@@ -128,13 +132,13 @@ class KindValidator < ActiveModel::EachValidator
|
|
128
132
|
|
129
133
|
return if types.any? { |type| value.instance_of?(type) }
|
130
134
|
|
131
|
-
"must be an instance of
|
135
|
+
"must be an instance of #{types.map { |klass| klass.name }.join(', ')}"
|
132
136
|
end
|
133
137
|
|
134
138
|
def array_with(expected, value)
|
135
|
-
return if value.kind_of?(::Array) && !value.empty? && (value - Kind::Array
|
139
|
+
return if value.kind_of?(::Array) && !value.empty? && (value - Kind.of!(::Array, expected)).empty?
|
136
140
|
|
137
|
-
"must be an array with
|
141
|
+
"must be an array with #{expected.join(', ')}"
|
138
142
|
end
|
139
143
|
|
140
144
|
def array_of(expected, value)
|
@@ -142,6 +146,6 @@ class KindValidator < ActiveModel::EachValidator
|
|
142
146
|
|
143
147
|
return if value.kind_of?(::Array) && !value.empty? && value.all? { |val| types.any? { |type| type === val } }
|
144
148
|
|
145
|
-
"must be an array of
|
149
|
+
"must be an array of #{types.map { |klass| klass.name }.join(', ')}"
|
146
150
|
end
|
147
151
|
end
|
data/lib/kind/version.rb
CHANGED
metadata
CHANGED
@@ -1,16 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kind
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rodrigo Serradura
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-04-06 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
|
-
description: A
|
13
|
+
description: A development toolkit for Ruby with several small/cohesive abstractions
|
14
|
+
(monads, enums, business logic, data validation...) to empower your development
|
15
|
+
workflow - It's totally free of dependencies.
|
14
16
|
email:
|
15
17
|
- rodrigo.serradura@gmail.com
|
16
18
|
executables: []
|
@@ -31,51 +33,90 @@ files:
|
|
31
33
|
- bin/setup
|
32
34
|
- kind.gemspec
|
33
35
|
- lib/kind.rb
|
36
|
+
- lib/kind/__lib__/action_steps.rb
|
37
|
+
- lib/kind/__lib__/attributes.rb
|
38
|
+
- lib/kind/__lib__/kind.rb
|
39
|
+
- lib/kind/__lib__/of.rb
|
40
|
+
- lib/kind/__lib__/strict.rb
|
41
|
+
- lib/kind/__lib__/undefined.rb
|
42
|
+
- lib/kind/action.rb
|
34
43
|
- lib/kind/active_model/validation.rb
|
35
|
-
- lib/kind/
|
36
|
-
- lib/kind/
|
37
|
-
- lib/kind/
|
38
|
-
- lib/kind/
|
39
|
-
- lib/kind/
|
40
|
-
- lib/kind/
|
41
|
-
- lib/kind/
|
42
|
-
- lib/kind/
|
43
|
-
- lib/kind/
|
44
|
-
- lib/kind/
|
45
|
-
- lib/kind/
|
46
|
-
- lib/kind/
|
47
|
-
- lib/kind/
|
48
|
-
- lib/kind/
|
49
|
-
- lib/kind/
|
50
|
-
- lib/kind/
|
51
|
-
- lib/kind/
|
52
|
-
- lib/kind/
|
53
|
-
- lib/kind/
|
54
|
-
- lib/kind/
|
55
|
-
- lib/kind/
|
56
|
-
- lib/kind/
|
57
|
-
- lib/kind/
|
58
|
-
- lib/kind/
|
59
|
-
- lib/kind/
|
60
|
-
- lib/kind/
|
61
|
-
- lib/kind/
|
62
|
-
- lib/kind/
|
63
|
-
- lib/kind/
|
64
|
-
- lib/kind/
|
65
|
-
- lib/kind/
|
66
|
-
- lib/kind/
|
67
|
-
- lib/kind/
|
68
|
-
- lib/kind/
|
69
|
-
- lib/kind/
|
70
|
-
- lib/kind/
|
71
|
-
- lib/kind/
|
72
|
-
- lib/kind/
|
73
|
-
- lib/kind/
|
74
|
-
- lib/kind/
|
75
|
-
- lib/kind/
|
76
|
-
- lib/kind/core/
|
77
|
-
- lib/kind/core/
|
78
|
-
- lib/kind/core/
|
44
|
+
- lib/kind/basic.rb
|
45
|
+
- lib/kind/basic/error.rb
|
46
|
+
- lib/kind/basic/undefined.rb
|
47
|
+
- lib/kind/dig.rb
|
48
|
+
- lib/kind/either.rb
|
49
|
+
- lib/kind/either/left.rb
|
50
|
+
- lib/kind/either/methods.rb
|
51
|
+
- lib/kind/either/monad.rb
|
52
|
+
- lib/kind/either/monad/wrapper.rb
|
53
|
+
- lib/kind/either/right.rb
|
54
|
+
- lib/kind/empty.rb
|
55
|
+
- lib/kind/empty/constant.rb
|
56
|
+
- lib/kind/enum.rb
|
57
|
+
- lib/kind/enum/item.rb
|
58
|
+
- lib/kind/enum/methods.rb
|
59
|
+
- lib/kind/function.rb
|
60
|
+
- lib/kind/functional.rb
|
61
|
+
- lib/kind/functional/action.rb
|
62
|
+
- lib/kind/functional/steps.rb
|
63
|
+
- lib/kind/immutable_attributes.rb
|
64
|
+
- lib/kind/immutable_attributes/initializer.rb
|
65
|
+
- lib/kind/immutable_attributes/reader.rb
|
66
|
+
- lib/kind/maybe.rb
|
67
|
+
- lib/kind/maybe/methods.rb
|
68
|
+
- lib/kind/maybe/monad.rb
|
69
|
+
- lib/kind/maybe/monad/wrapper.rb
|
70
|
+
- lib/kind/maybe/none.rb
|
71
|
+
- lib/kind/maybe/some.rb
|
72
|
+
- lib/kind/maybe/typed.rb
|
73
|
+
- lib/kind/maybe/wrapper.rb
|
74
|
+
- lib/kind/monad.rb
|
75
|
+
- lib/kind/monads.rb
|
76
|
+
- lib/kind/objects.rb
|
77
|
+
- lib/kind/objects/basic_object.rb
|
78
|
+
- lib/kind/objects/modules.rb
|
79
|
+
- lib/kind/objects/modules/core/array.rb
|
80
|
+
- lib/kind/objects/modules/core/class.rb
|
81
|
+
- lib/kind/objects/modules/core/comparable.rb
|
82
|
+
- lib/kind/objects/modules/core/enumerable.rb
|
83
|
+
- lib/kind/objects/modules/core/enumerator.rb
|
84
|
+
- lib/kind/objects/modules/core/file.rb
|
85
|
+
- lib/kind/objects/modules/core/float.rb
|
86
|
+
- lib/kind/objects/modules/core/hash.rb
|
87
|
+
- lib/kind/objects/modules/core/integer.rb
|
88
|
+
- lib/kind/objects/modules/core/io.rb
|
89
|
+
- lib/kind/objects/modules/core/method.rb
|
90
|
+
- lib/kind/objects/modules/core/module.rb
|
91
|
+
- lib/kind/objects/modules/core/numeric.rb
|
92
|
+
- lib/kind/objects/modules/core/proc.rb
|
93
|
+
- lib/kind/objects/modules/core/queue.rb
|
94
|
+
- lib/kind/objects/modules/core/range.rb
|
95
|
+
- lib/kind/objects/modules/core/regexp.rb
|
96
|
+
- lib/kind/objects/modules/core/string.rb
|
97
|
+
- lib/kind/objects/modules/core/struct.rb
|
98
|
+
- lib/kind/objects/modules/core/symbol.rb
|
99
|
+
- lib/kind/objects/modules/core/time.rb
|
100
|
+
- lib/kind/objects/modules/custom/boolean.rb
|
101
|
+
- lib/kind/objects/modules/custom/callable.rb
|
102
|
+
- lib/kind/objects/modules/custom/lambda.rb
|
103
|
+
- lib/kind/objects/modules/stdlib/open_struct.rb
|
104
|
+
- lib/kind/objects/modules/stdlib/set.rb
|
105
|
+
- lib/kind/objects/nil.rb
|
106
|
+
- lib/kind/objects/not_nil.rb
|
107
|
+
- lib/kind/objects/object.rb
|
108
|
+
- lib/kind/objects/respond_to.rb
|
109
|
+
- lib/kind/objects/union_type.rb
|
110
|
+
- lib/kind/presence.rb
|
111
|
+
- lib/kind/result.rb
|
112
|
+
- lib/kind/result/abstract.rb
|
113
|
+
- lib/kind/result/failure.rb
|
114
|
+
- lib/kind/result/methods.rb
|
115
|
+
- lib/kind/result/monad.rb
|
116
|
+
- lib/kind/result/monad/wrapper.rb
|
117
|
+
- lib/kind/result/success.rb
|
118
|
+
- lib/kind/strict/disabled.rb
|
119
|
+
- lib/kind/try.rb
|
79
120
|
- lib/kind/validator.rb
|
80
121
|
- lib/kind/version.rb
|
81
122
|
- test.sh
|
@@ -100,8 +141,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
100
141
|
- !ruby/object:Gem::Version
|
101
142
|
version: '0'
|
102
143
|
requirements: []
|
103
|
-
rubygems_version: 3.
|
144
|
+
rubygems_version: 3.2.11
|
104
145
|
signing_key:
|
105
146
|
specification_version: 4
|
106
|
-
summary: A
|
147
|
+
summary: A development toolkit for Ruby with several small/cohesive abstractions to
|
148
|
+
empower your development workflow.
|
107
149
|
test_files: []
|