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.
Files changed (111) hide show
  1. checksums.yaml +4 -4
  2. data/.tool-versions +1 -1
  3. data/.travis.sh +39 -7
  4. data/.travis.yml +1 -2
  5. data/CHANGELOG.md +486 -28
  6. data/Gemfile +13 -6
  7. data/README.md +153 -49
  8. data/kind.gemspec +1 -1
  9. data/lib/kind.rb +2 -84
  10. data/lib/kind/__lib__/action_steps.rb +57 -0
  11. data/lib/kind/__lib__/attributes.rb +66 -0
  12. data/lib/kind/__lib__/kind.rb +51 -0
  13. data/lib/kind/__lib__/of.rb +17 -0
  14. data/lib/kind/__lib__/strict.rb +49 -0
  15. data/lib/kind/__lib__/undefined.rb +14 -0
  16. data/lib/kind/action.rb +127 -0
  17. data/lib/kind/active_model/validation.rb +3 -4
  18. data/lib/kind/basic.rb +79 -0
  19. data/lib/kind/basic/error.rb +29 -0
  20. data/lib/kind/{undefined.rb → basic/undefined.rb} +6 -1
  21. data/lib/kind/dig.rb +21 -5
  22. data/lib/kind/either.rb +30 -0
  23. data/lib/kind/either/left.rb +29 -0
  24. data/lib/kind/either/methods.rb +17 -0
  25. data/lib/kind/either/monad.rb +65 -0
  26. data/lib/kind/either/monad/wrapper.rb +19 -0
  27. data/lib/kind/either/right.rb +38 -0
  28. data/lib/kind/empty.rb +2 -2
  29. data/lib/kind/empty/constant.rb +7 -0
  30. data/lib/kind/enum.rb +63 -0
  31. data/lib/kind/enum/item.rb +40 -0
  32. data/lib/kind/enum/methods.rb +72 -0
  33. data/lib/kind/function.rb +45 -0
  34. data/lib/kind/functional.rb +89 -0
  35. data/lib/kind/functional/action.rb +90 -0
  36. data/lib/kind/immutable_attributes.rb +34 -0
  37. data/lib/kind/immutable_attributes/initializer.rb +70 -0
  38. data/lib/kind/immutable_attributes/reader.rb +38 -0
  39. data/lib/kind/maybe.rb +37 -12
  40. data/lib/kind/maybe/methods.rb +21 -0
  41. data/lib/kind/maybe/monad.rb +82 -0
  42. data/lib/kind/maybe/monad/wrapper.rb +19 -0
  43. data/lib/kind/maybe/none.rb +12 -19
  44. data/lib/kind/maybe/some.rb +68 -26
  45. data/lib/kind/maybe/typed.rb +11 -5
  46. data/lib/kind/maybe/{wrappable.rb → wrapper.rb} +9 -7
  47. data/lib/kind/monad.rb +22 -0
  48. data/lib/kind/monads.rb +5 -0
  49. data/lib/kind/objects.rb +17 -0
  50. data/lib/kind/objects/basic_object.rb +43 -0
  51. data/lib/kind/objects/modules.rb +32 -0
  52. data/lib/kind/{type_checkers → objects/modules}/core/array.rb +3 -1
  53. data/lib/kind/{type_checkers → objects/modules}/core/class.rb +1 -1
  54. data/lib/kind/{type_checkers → objects/modules}/core/comparable.rb +1 -1
  55. data/lib/kind/{type_checkers → objects/modules}/core/enumerable.rb +1 -1
  56. data/lib/kind/{type_checkers → objects/modules}/core/enumerator.rb +1 -1
  57. data/lib/kind/{type_checkers → objects/modules}/core/file.rb +1 -1
  58. data/lib/kind/{type_checkers → objects/modules}/core/float.rb +1 -1
  59. data/lib/kind/{type_checkers → objects/modules}/core/hash.rb +3 -1
  60. data/lib/kind/{type_checkers → objects/modules}/core/integer.rb +1 -1
  61. data/lib/kind/{type_checkers → objects/modules}/core/io.rb +1 -1
  62. data/lib/kind/{type_checkers → objects/modules}/core/method.rb +1 -1
  63. data/lib/kind/{type_checkers → objects/modules}/core/module.rb +1 -1
  64. data/lib/kind/{type_checkers → objects/modules}/core/numeric.rb +1 -1
  65. data/lib/kind/{type_checkers → objects/modules}/core/proc.rb +1 -1
  66. data/lib/kind/{type_checkers → objects/modules}/core/queue.rb +1 -1
  67. data/lib/kind/{type_checkers → objects/modules}/core/range.rb +1 -1
  68. data/lib/kind/{type_checkers → objects/modules}/core/regexp.rb +1 -1
  69. data/lib/kind/{type_checkers → objects/modules}/core/string.rb +3 -1
  70. data/lib/kind/{type_checkers → objects/modules}/core/struct.rb +1 -1
  71. data/lib/kind/{type_checkers → objects/modules}/core/symbol.rb +1 -1
  72. data/lib/kind/{type_checkers → objects/modules}/core/time.rb +1 -1
  73. data/lib/kind/{type_checkers → objects/modules}/custom/boolean.rb +2 -2
  74. data/lib/kind/{type_checkers → objects/modules}/custom/callable.rb +1 -1
  75. data/lib/kind/{type_checkers → objects/modules}/custom/lambda.rb +1 -1
  76. data/lib/kind/{type_checkers → objects/modules}/stdlib/open_struct.rb +3 -1
  77. data/lib/kind/{type_checkers → objects/modules}/stdlib/set.rb +3 -1
  78. data/lib/kind/objects/nil.rb +17 -0
  79. data/lib/kind/objects/not_nil.rb +9 -0
  80. data/lib/kind/objects/object.rb +56 -0
  81. data/lib/kind/objects/respond_to.rb +30 -0
  82. data/lib/kind/objects/union_type.rb +44 -0
  83. data/lib/kind/presence.rb +4 -2
  84. data/lib/kind/result.rb +31 -0
  85. data/lib/kind/result/abstract.rb +53 -0
  86. data/lib/kind/result/failure.rb +33 -0
  87. data/lib/kind/result/methods.rb +17 -0
  88. data/lib/kind/result/monad.rb +74 -0
  89. data/lib/kind/result/monad/wrapper.rb +19 -0
  90. data/lib/kind/result/success.rb +53 -0
  91. data/lib/kind/strict/disabled.rb +34 -0
  92. data/lib/kind/try.rb +21 -11
  93. data/lib/kind/validator.rb +111 -0
  94. data/lib/kind/version.rb +1 -1
  95. metadata +78 -48
  96. data/lib/kind/active_model/kind_validator.rb +0 -96
  97. data/lib/kind/core.rb +0 -9
  98. data/lib/kind/core/deprecation.rb +0 -29
  99. data/lib/kind/core/kind.rb +0 -61
  100. data/lib/kind/core/undefined.rb +0 -7
  101. data/lib/kind/deprecations/built_in_type_checkers.rb +0 -23
  102. data/lib/kind/deprecations/checker.rb +0 -16
  103. data/lib/kind/deprecations/checker/factory.rb +0 -31
  104. data/lib/kind/deprecations/checker/protocol.rb +0 -73
  105. data/lib/kind/deprecations/is.rb +0 -35
  106. data/lib/kind/deprecations/of.rb +0 -258
  107. data/lib/kind/deprecations/types.rb +0 -121
  108. data/lib/kind/error.rb +0 -15
  109. data/lib/kind/maybe/result.rb +0 -51
  110. data/lib/kind/type_checker.rb +0 -73
  111. data/lib/kind/type_checkers.rb +0 -30
@@ -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 CHANGED
@@ -1,32 +1,42 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'kind/basic'
4
+ require 'kind/empty'
5
+ require 'kind/presence'
6
+
3
7
  module Kind
4
8
  module Try
5
9
  extend self
6
10
 
7
- def call(*args)
8
- object = args.shift
11
+ def call!(object, method_name, args = Empty::ARRAY) # :nodoc
12
+ return if KIND.nil_or_undefined?(object)
9
13
 
10
- call!(object, args.shift, args)
14
+ resolve(object, method_name, args)
11
15
  end
12
16
 
13
- def self.[](*args)
14
- Array[args]
17
+ def call(object, *input)
18
+ args = input.size == 1 && input[0].kind_of?(::Array) ? input[0] : input
15
19
 
16
- method_name = args.shift
20
+ result = call!(object, args.shift, args)
17
21
 
18
- ->(object) { call!(object, method_name, args) }
22
+ return result unless block_given?
23
+
24
+ yield(result) unless KIND.nil_or_undefined?(result)
19
25
  end
20
26
 
21
- def call!(object, method_name, args) # :nodoc
22
- return if KIND.null?(object)
27
+ def presence(*args, &block)
28
+ Presence.(call(*args, &block))
29
+ end
23
30
 
24
- resolve(object, method_name, args)
31
+ def self.[](*args)
32
+ method_name = args.shift
33
+
34
+ ->(object) { call!(object, method_name, args) }
25
35
  end
26
36
 
27
37
  private
28
38
 
29
- def resolve(object, method_name, args = Empty::ARRAY)
39
+ def resolve(object, method_name, args)
30
40
  return unless object.respond_to?(method_name)
31
41
  return object.public_send(method_name) if args.empty?
32
42
 
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'kind/basic'
4
+
3
5
  module Kind
4
6
  module Validator
5
7
  DEFAULT_STRATEGIES = ::Set.new(%w[instance_of kind_of]).freeze
@@ -38,3 +40,112 @@ module Kind
38
40
  end
39
41
  end
40
42
  end
43
+
44
+ require 'active_model'
45
+ require 'active_model/validations'
46
+
47
+ class KindValidator < ActiveModel::EachValidator
48
+ def validate_each(record, attribute, value)
49
+ return if options[:allow_nil] && value.nil?
50
+
51
+ return unless error = call_validation_for(attribute, value)
52
+
53
+ raise Kind::Error.new("#{attribute} #{error}") if options[:strict]
54
+
55
+ record.errors.add(attribute, error)
56
+ end
57
+
58
+ private
59
+
60
+ def call_validation_for(attribute, value)
61
+ expected = options[:with] || options[:in]
62
+
63
+ return validate_with_default_strategy(expected, value) if expected
64
+
65
+ return kind_of(expected, value) if expected = options[:of]
66
+ return kind_is(expected, value) if expected = options[:is]
67
+ return respond_to(expected, value) if expected = options[:respond_to]
68
+ return instance_of(expected, value) if expected = options[:instance_of]
69
+ return array_with(expected, value) if expected = options[:array_with]
70
+ return array_of(expected, value) if expected = options[:array_of]
71
+
72
+ raise Kind::Validator::InvalidDefinition.new(attribute)
73
+ end
74
+
75
+ def validate_with_default_strategy(expected, value)
76
+ send(Kind::Validator.default_strategy, expected, value)
77
+ end
78
+
79
+ def kind_of(expected, value)
80
+ if ::Array === expected
81
+ return if expected.any? { |type| type === value }
82
+
83
+ "must be a kind of #{expected.map { |type| type.name }.join(', ')}"
84
+ else
85
+ return if expected === value
86
+
87
+ expected.respond_to?(:name) ? "must be a kind of #{expected.name}" : 'invalid kind'
88
+ end
89
+ end
90
+
91
+ CLASS_OR_MODULE = 'Class/Module'.freeze
92
+
93
+ def kind_is(expected, value)
94
+ return kind_is_not(expected, value) unless expected.kind_of?(::Array)
95
+
96
+ result = expected.map { |kind| kind_is_not(kind, value) }.tap(&:compact!)
97
+
98
+ result.empty? || result.size < expected.size ? nil : result.join(', ')
99
+ end
100
+
101
+ def kind_is_not(expected, value)
102
+ case expected
103
+ when ::Class
104
+ return if expected == Kind.of_class(value) || value < expected
105
+
106
+ "must be the class or a subclass of `#{expected.name}`"
107
+ when ::Module
108
+ return if value.kind_of?(::Class) && value <= expected
109
+ return if expected == Kind.of_module_or_class(value) || value.kind_of?(expected)
110
+
111
+ "must include the `#{expected.name}` module"
112
+ else
113
+ raise Kind::Error.new(CLASS_OR_MODULE, expected)
114
+ end
115
+ end
116
+
117
+ def respond_to(expected, value)
118
+ method_names = Array(expected)
119
+
120
+ expected_methods = method_names.select { |method_name| !value.respond_to?(method_name) }
121
+ expected_methods.map! { |method_name| "`#{method_name}`" }
122
+
123
+ return if expected_methods.empty?
124
+
125
+ methods = expected_methods.size == 1 ? 'method' : 'methods'
126
+
127
+ "must respond to the #{methods}: #{expected_methods.join(', ')}"
128
+ end
129
+
130
+ def instance_of(expected, value)
131
+ types = Array(expected)
132
+
133
+ return if types.any? { |type| value.instance_of?(type) }
134
+
135
+ "must be an instance of #{types.map { |klass| klass.name }.join(', ')}"
136
+ end
137
+
138
+ def array_with(expected, value)
139
+ return if value.kind_of?(::Array) && !value.empty? && (value - Kind.of!(::Array, expected)).empty?
140
+
141
+ "must be an array with #{expected.join(', ')}"
142
+ end
143
+
144
+ def array_of(expected, value)
145
+ types = Array(expected)
146
+
147
+ return if value.kind_of?(::Array) && !value.empty? && value.all? { |val| types.any? { |type| type === val } }
148
+
149
+ "must be an array of #{types.map { |klass| klass.name }.join(', ')}"
150
+ end
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 = '4.0.0'
4
+ VERSION = '5.3.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kind
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 5.3.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-22 00:00:00.000000000 Z
11
+ date: 2021-03-23 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A simple type system (at runtime) for Ruby - free of dependencies.
14
14
  email:
@@ -31,59 +31,89 @@ files:
31
31
  - bin/setup
32
32
  - kind.gemspec
33
33
  - lib/kind.rb
34
- - lib/kind/active_model/kind_validator.rb
34
+ - lib/kind/__lib__/action_steps.rb
35
+ - lib/kind/__lib__/attributes.rb
36
+ - lib/kind/__lib__/kind.rb
37
+ - lib/kind/__lib__/of.rb
38
+ - lib/kind/__lib__/strict.rb
39
+ - lib/kind/__lib__/undefined.rb
40
+ - lib/kind/action.rb
35
41
  - lib/kind/active_model/validation.rb
36
- - lib/kind/core.rb
37
- - lib/kind/core/deprecation.rb
38
- - lib/kind/core/kind.rb
39
- - lib/kind/core/undefined.rb
40
- - lib/kind/deprecations/built_in_type_checkers.rb
41
- - lib/kind/deprecations/checker.rb
42
- - lib/kind/deprecations/checker/factory.rb
43
- - lib/kind/deprecations/checker/protocol.rb
44
- - lib/kind/deprecations/is.rb
45
- - lib/kind/deprecations/of.rb
46
- - lib/kind/deprecations/types.rb
42
+ - lib/kind/basic.rb
43
+ - lib/kind/basic/error.rb
44
+ - lib/kind/basic/undefined.rb
47
45
  - lib/kind/dig.rb
46
+ - lib/kind/either.rb
47
+ - lib/kind/either/left.rb
48
+ - lib/kind/either/methods.rb
49
+ - lib/kind/either/monad.rb
50
+ - lib/kind/either/monad/wrapper.rb
51
+ - lib/kind/either/right.rb
48
52
  - lib/kind/empty.rb
49
- - lib/kind/error.rb
53
+ - lib/kind/empty/constant.rb
54
+ - lib/kind/enum.rb
55
+ - lib/kind/enum/item.rb
56
+ - lib/kind/enum/methods.rb
57
+ - lib/kind/function.rb
58
+ - lib/kind/functional.rb
59
+ - lib/kind/functional/action.rb
60
+ - lib/kind/immutable_attributes.rb
61
+ - lib/kind/immutable_attributes/initializer.rb
62
+ - lib/kind/immutable_attributes/reader.rb
50
63
  - lib/kind/maybe.rb
64
+ - lib/kind/maybe/methods.rb
65
+ - lib/kind/maybe/monad.rb
66
+ - lib/kind/maybe/monad/wrapper.rb
51
67
  - lib/kind/maybe/none.rb
52
- - lib/kind/maybe/result.rb
53
68
  - lib/kind/maybe/some.rb
54
69
  - lib/kind/maybe/typed.rb
55
- - lib/kind/maybe/wrappable.rb
70
+ - lib/kind/maybe/wrapper.rb
71
+ - lib/kind/monad.rb
72
+ - lib/kind/monads.rb
73
+ - lib/kind/objects.rb
74
+ - lib/kind/objects/basic_object.rb
75
+ - lib/kind/objects/modules.rb
76
+ - lib/kind/objects/modules/core/array.rb
77
+ - lib/kind/objects/modules/core/class.rb
78
+ - lib/kind/objects/modules/core/comparable.rb
79
+ - lib/kind/objects/modules/core/enumerable.rb
80
+ - lib/kind/objects/modules/core/enumerator.rb
81
+ - lib/kind/objects/modules/core/file.rb
82
+ - lib/kind/objects/modules/core/float.rb
83
+ - lib/kind/objects/modules/core/hash.rb
84
+ - lib/kind/objects/modules/core/integer.rb
85
+ - lib/kind/objects/modules/core/io.rb
86
+ - lib/kind/objects/modules/core/method.rb
87
+ - lib/kind/objects/modules/core/module.rb
88
+ - lib/kind/objects/modules/core/numeric.rb
89
+ - lib/kind/objects/modules/core/proc.rb
90
+ - lib/kind/objects/modules/core/queue.rb
91
+ - lib/kind/objects/modules/core/range.rb
92
+ - lib/kind/objects/modules/core/regexp.rb
93
+ - lib/kind/objects/modules/core/string.rb
94
+ - lib/kind/objects/modules/core/struct.rb
95
+ - lib/kind/objects/modules/core/symbol.rb
96
+ - lib/kind/objects/modules/core/time.rb
97
+ - lib/kind/objects/modules/custom/boolean.rb
98
+ - lib/kind/objects/modules/custom/callable.rb
99
+ - lib/kind/objects/modules/custom/lambda.rb
100
+ - lib/kind/objects/modules/stdlib/open_struct.rb
101
+ - lib/kind/objects/modules/stdlib/set.rb
102
+ - lib/kind/objects/nil.rb
103
+ - lib/kind/objects/not_nil.rb
104
+ - lib/kind/objects/object.rb
105
+ - lib/kind/objects/respond_to.rb
106
+ - lib/kind/objects/union_type.rb
56
107
  - lib/kind/presence.rb
108
+ - lib/kind/result.rb
109
+ - lib/kind/result/abstract.rb
110
+ - lib/kind/result/failure.rb
111
+ - lib/kind/result/methods.rb
112
+ - lib/kind/result/monad.rb
113
+ - lib/kind/result/monad/wrapper.rb
114
+ - lib/kind/result/success.rb
115
+ - lib/kind/strict/disabled.rb
57
116
  - lib/kind/try.rb
58
- - lib/kind/type_checker.rb
59
- - lib/kind/type_checkers.rb
60
- - lib/kind/type_checkers/core/array.rb
61
- - lib/kind/type_checkers/core/class.rb
62
- - lib/kind/type_checkers/core/comparable.rb
63
- - lib/kind/type_checkers/core/enumerable.rb
64
- - lib/kind/type_checkers/core/enumerator.rb
65
- - lib/kind/type_checkers/core/file.rb
66
- - lib/kind/type_checkers/core/float.rb
67
- - lib/kind/type_checkers/core/hash.rb
68
- - lib/kind/type_checkers/core/integer.rb
69
- - lib/kind/type_checkers/core/io.rb
70
- - lib/kind/type_checkers/core/method.rb
71
- - lib/kind/type_checkers/core/module.rb
72
- - lib/kind/type_checkers/core/numeric.rb
73
- - lib/kind/type_checkers/core/proc.rb
74
- - lib/kind/type_checkers/core/queue.rb
75
- - lib/kind/type_checkers/core/range.rb
76
- - lib/kind/type_checkers/core/regexp.rb
77
- - lib/kind/type_checkers/core/string.rb
78
- - lib/kind/type_checkers/core/struct.rb
79
- - lib/kind/type_checkers/core/symbol.rb
80
- - lib/kind/type_checkers/core/time.rb
81
- - lib/kind/type_checkers/custom/boolean.rb
82
- - lib/kind/type_checkers/custom/callable.rb
83
- - lib/kind/type_checkers/custom/lambda.rb
84
- - lib/kind/type_checkers/stdlib/open_struct.rb
85
- - lib/kind/type_checkers/stdlib/set.rb
86
- - lib/kind/undefined.rb
87
117
  - lib/kind/validator.rb
88
118
  - lib/kind/version.rb
89
119
  - test.sh
@@ -101,14 +131,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
101
131
  requirements:
102
132
  - - ">="
103
133
  - !ruby/object:Gem::Version
104
- version: 2.2.0
134
+ version: 2.1.0
105
135
  required_rubygems_version: !ruby/object:Gem::Requirement
106
136
  requirements:
107
137
  - - ">="
108
138
  - !ruby/object:Gem::Version
109
139
  version: '0'
110
140
  requirements: []
111
- rubygems_version: 3.1.4
141
+ rubygems_version: 3.2.11
112
142
  signing_key:
113
143
  specification_version: 4
114
144
  summary: A simple type system (at runtime) for Ruby.