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.
Files changed (106) hide show
  1. checksums.yaml +4 -4
  2. data/.tool-versions +1 -1
  3. data/.travis.sh +37 -10
  4. data/CHANGELOG.md +518 -29
  5. data/README.md +48 -45
  6. data/kind.gemspec +2 -2
  7. data/lib/kind.rb +2 -49
  8. data/lib/kind/__lib__/action_steps.rb +57 -0
  9. data/lib/kind/__lib__/attributes.rb +66 -0
  10. data/lib/kind/__lib__/kind.rb +51 -0
  11. data/lib/kind/__lib__/of.rb +17 -0
  12. data/lib/kind/__lib__/strict.rb +49 -0
  13. data/lib/kind/__lib__/undefined.rb +14 -0
  14. data/lib/kind/action.rb +127 -0
  15. data/lib/kind/active_model/validation.rb +1 -1
  16. data/lib/kind/basic.rb +83 -0
  17. data/lib/kind/basic/error.rb +29 -0
  18. data/lib/kind/{core → basic}/undefined.rb +6 -1
  19. data/lib/kind/{core/dig.rb → dig.rb} +21 -5
  20. data/lib/kind/either.rb +30 -0
  21. data/lib/kind/either/left.rb +29 -0
  22. data/lib/kind/either/methods.rb +17 -0
  23. data/lib/kind/either/monad.rb +65 -0
  24. data/lib/kind/either/monad/wrapper.rb +19 -0
  25. data/lib/kind/either/right.rb +38 -0
  26. data/lib/kind/{core/empty.rb → empty.rb} +2 -0
  27. data/lib/kind/{core/empty → empty}/constant.rb +0 -0
  28. data/lib/kind/enum.rb +63 -0
  29. data/lib/kind/enum/item.rb +40 -0
  30. data/lib/kind/enum/methods.rb +72 -0
  31. data/lib/kind/function.rb +45 -0
  32. data/lib/kind/functional.rb +89 -0
  33. data/lib/kind/functional/action.rb +87 -0
  34. data/lib/kind/functional/steps.rb +22 -0
  35. data/lib/kind/immutable_attributes.rb +34 -0
  36. data/lib/kind/immutable_attributes/initializer.rb +70 -0
  37. data/lib/kind/immutable_attributes/reader.rb +38 -0
  38. data/lib/kind/maybe.rb +69 -0
  39. data/lib/kind/maybe/methods.rb +21 -0
  40. data/lib/kind/maybe/monad.rb +82 -0
  41. data/lib/kind/maybe/monad/wrapper.rb +19 -0
  42. data/lib/kind/maybe/none.rb +50 -0
  43. data/lib/kind/maybe/some.rb +132 -0
  44. data/lib/kind/maybe/typed.rb +35 -0
  45. data/lib/kind/{core/maybe/wrappable.rb → maybe/wrapper.rb} +8 -4
  46. data/lib/kind/monad.rb +22 -0
  47. data/lib/kind/monads.rb +5 -0
  48. data/lib/kind/objects.rb +17 -0
  49. data/lib/kind/objects/basic_object.rb +43 -0
  50. data/lib/kind/objects/modules.rb +32 -0
  51. data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/array.rb +3 -1
  52. data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/class.rb +1 -1
  53. data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/comparable.rb +1 -1
  54. data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/enumerable.rb +1 -1
  55. data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/enumerator.rb +1 -1
  56. data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/file.rb +1 -1
  57. data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/float.rb +1 -1
  58. data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/hash.rb +3 -1
  59. data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/integer.rb +1 -1
  60. data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/io.rb +1 -1
  61. data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/method.rb +1 -1
  62. data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/module.rb +1 -1
  63. data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/numeric.rb +1 -1
  64. data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/proc.rb +1 -1
  65. data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/queue.rb +1 -1
  66. data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/range.rb +1 -1
  67. data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/regexp.rb +1 -1
  68. data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/string.rb +3 -1
  69. data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/struct.rb +1 -1
  70. data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/symbol.rb +1 -1
  71. data/lib/kind/{core/type_checkers/ruby → objects/modules/core}/time.rb +1 -1
  72. data/lib/kind/{core/type_checkers → objects/modules}/custom/boolean.rb +2 -2
  73. data/lib/kind/{core/type_checkers → objects/modules}/custom/callable.rb +1 -1
  74. data/lib/kind/{core/type_checkers → objects/modules}/custom/lambda.rb +1 -1
  75. data/lib/kind/{core/type_checkers → objects/modules}/stdlib/open_struct.rb +3 -1
  76. data/lib/kind/{core/type_checkers → objects/modules}/stdlib/set.rb +3 -1
  77. data/lib/kind/objects/nil.rb +17 -0
  78. data/lib/kind/objects/not_nil.rb +9 -0
  79. data/lib/kind/objects/object.rb +56 -0
  80. data/lib/kind/objects/respond_to.rb +30 -0
  81. data/lib/kind/objects/union_type.rb +44 -0
  82. data/lib/kind/{core/presence.rb → presence.rb} +4 -2
  83. data/lib/kind/result.rb +31 -0
  84. data/lib/kind/result/abstract.rb +53 -0
  85. data/lib/kind/result/failure.rb +33 -0
  86. data/lib/kind/result/methods.rb +17 -0
  87. data/lib/kind/result/monad.rb +74 -0
  88. data/lib/kind/result/monad/wrapper.rb +19 -0
  89. data/lib/kind/result/success.rb +53 -0
  90. data/lib/kind/strict/disabled.rb +34 -0
  91. data/lib/kind/try.rb +46 -0
  92. data/lib/kind/validator.rb +14 -10
  93. data/lib/kind/version.rb +1 -1
  94. metadata +91 -49
  95. data/lib/kind/core.rb +0 -15
  96. data/lib/kind/core/error.rb +0 -15
  97. data/lib/kind/core/maybe.rb +0 -42
  98. data/lib/kind/core/maybe/none.rb +0 -57
  99. data/lib/kind/core/maybe/result.rb +0 -51
  100. data/lib/kind/core/maybe/some.rb +0 -90
  101. data/lib/kind/core/maybe/typed.rb +0 -29
  102. data/lib/kind/core/try.rb +0 -34
  103. data/lib/kind/core/type_checker.rb +0 -87
  104. data/lib/kind/core/type_checkers.rb +0 -30
  105. data/lib/kind/core/utils/kind.rb +0 -61
  106. 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
@@ -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
- types = Array(expected)
80
+ if ::Array === expected
81
+ return if expected.any? { |type| type === value }
81
82
 
82
- return if types.any? { |type| type === value }
83
+ "must be a kind of #{expected.map { |type| type.name }.join(', ')}"
84
+ else
85
+ return if expected === value
83
86
 
84
- "must be a kind of: #{types.map { |type| type.name }.join(', ')}"
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::Class[value] || value < expected
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: #{types.map { |klass| klass.name }.join(', ')}"
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[expected]).empty?
139
+ return if value.kind_of?(::Array) && !value.empty? && (value - Kind.of!(::Array, expected)).empty?
136
140
 
137
- "must be an array with: #{expected.join(', ')}"
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: #{types.map { |klass| klass.name }.join(', ')}"
149
+ "must be an array of #{types.map { |klass| klass.name }.join(', ')}"
146
150
  end
147
151
  end
data/lib/kind/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Kind
4
- VERSION = '5.1.0'
4
+ VERSION = '5.5.0'
5
5
  end
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.1.0
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-02-24 00:00:00.000000000 Z
11
+ date: 2021-04-06 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: A simple type system (at runtime) for Ruby - free of dependencies.
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/core.rb
36
- - lib/kind/core/dig.rb
37
- - lib/kind/core/empty.rb
38
- - lib/kind/core/empty/constant.rb
39
- - lib/kind/core/error.rb
40
- - lib/kind/core/maybe.rb
41
- - lib/kind/core/maybe/none.rb
42
- - lib/kind/core/maybe/result.rb
43
- - lib/kind/core/maybe/some.rb
44
- - lib/kind/core/maybe/typed.rb
45
- - lib/kind/core/maybe/wrappable.rb
46
- - lib/kind/core/presence.rb
47
- - lib/kind/core/try.rb
48
- - lib/kind/core/type_checker.rb
49
- - lib/kind/core/type_checkers.rb
50
- - lib/kind/core/type_checkers/custom/boolean.rb
51
- - lib/kind/core/type_checkers/custom/callable.rb
52
- - lib/kind/core/type_checkers/custom/lambda.rb
53
- - lib/kind/core/type_checkers/ruby/array.rb
54
- - lib/kind/core/type_checkers/ruby/class.rb
55
- - lib/kind/core/type_checkers/ruby/comparable.rb
56
- - lib/kind/core/type_checkers/ruby/enumerable.rb
57
- - lib/kind/core/type_checkers/ruby/enumerator.rb
58
- - lib/kind/core/type_checkers/ruby/file.rb
59
- - lib/kind/core/type_checkers/ruby/float.rb
60
- - lib/kind/core/type_checkers/ruby/hash.rb
61
- - lib/kind/core/type_checkers/ruby/integer.rb
62
- - lib/kind/core/type_checkers/ruby/io.rb
63
- - lib/kind/core/type_checkers/ruby/method.rb
64
- - lib/kind/core/type_checkers/ruby/module.rb
65
- - lib/kind/core/type_checkers/ruby/numeric.rb
66
- - lib/kind/core/type_checkers/ruby/proc.rb
67
- - lib/kind/core/type_checkers/ruby/queue.rb
68
- - lib/kind/core/type_checkers/ruby/range.rb
69
- - lib/kind/core/type_checkers/ruby/regexp.rb
70
- - lib/kind/core/type_checkers/ruby/string.rb
71
- - lib/kind/core/type_checkers/ruby/struct.rb
72
- - lib/kind/core/type_checkers/ruby/symbol.rb
73
- - lib/kind/core/type_checkers/ruby/time.rb
74
- - lib/kind/core/type_checkers/stdlib/open_struct.rb
75
- - lib/kind/core/type_checkers/stdlib/set.rb
76
- - lib/kind/core/undefined.rb
77
- - lib/kind/core/utils/kind.rb
78
- - lib/kind/core/utils/undefined.rb
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.1.4
144
+ rubygems_version: 3.2.11
104
145
  signing_key:
105
146
  specification_version: 4
106
- summary: A simple type system (at runtime) for Ruby.
147
+ summary: A development toolkit for Ruby with several small/cohesive abstractions to
148
+ empower your development workflow.
107
149
  test_files: []