kind 4.1.0 → 5.4.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 (113) 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 +524 -29
  6. data/Gemfile +13 -6
  7. data/README.md +57 -43
  8. data/kind.gemspec +3 -3
  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 +87 -0
  36. data/lib/kind/functional/steps.rb +22 -0
  37. data/lib/kind/immutable_attributes.rb +34 -0
  38. data/lib/kind/immutable_attributes/initializer.rb +70 -0
  39. data/lib/kind/immutable_attributes/reader.rb +38 -0
  40. data/lib/kind/maybe.rb +37 -12
  41. data/lib/kind/maybe/methods.rb +21 -0
  42. data/lib/kind/maybe/monad.rb +82 -0
  43. data/lib/kind/maybe/monad/wrapper.rb +19 -0
  44. data/lib/kind/maybe/none.rb +12 -19
  45. data/lib/kind/maybe/some.rb +68 -26
  46. data/lib/kind/maybe/typed.rb +11 -5
  47. data/lib/kind/maybe/{wrappable.rb → wrapper.rb} +8 -4
  48. data/lib/kind/monad.rb +22 -0
  49. data/lib/kind/monads.rb +5 -0
  50. data/lib/kind/objects.rb +17 -0
  51. data/lib/kind/objects/basic_object.rb +43 -0
  52. data/lib/kind/objects/modules.rb +32 -0
  53. data/lib/kind/{type_checkers → objects/modules}/core/array.rb +3 -1
  54. data/lib/kind/{type_checkers → objects/modules}/core/class.rb +1 -1
  55. data/lib/kind/{type_checkers → objects/modules}/core/comparable.rb +1 -1
  56. data/lib/kind/{type_checkers → objects/modules}/core/enumerable.rb +1 -1
  57. data/lib/kind/{type_checkers → objects/modules}/core/enumerator.rb +1 -1
  58. data/lib/kind/{type_checkers → objects/modules}/core/file.rb +1 -1
  59. data/lib/kind/{type_checkers → objects/modules}/core/float.rb +1 -1
  60. data/lib/kind/{type_checkers → objects/modules}/core/hash.rb +3 -1
  61. data/lib/kind/{type_checkers → objects/modules}/core/integer.rb +1 -1
  62. data/lib/kind/{type_checkers → objects/modules}/core/io.rb +1 -1
  63. data/lib/kind/{type_checkers → objects/modules}/core/method.rb +1 -1
  64. data/lib/kind/{type_checkers → objects/modules}/core/module.rb +1 -1
  65. data/lib/kind/{type_checkers → objects/modules}/core/numeric.rb +1 -1
  66. data/lib/kind/{type_checkers → objects/modules}/core/proc.rb +1 -1
  67. data/lib/kind/{type_checkers → objects/modules}/core/queue.rb +1 -1
  68. data/lib/kind/{type_checkers → objects/modules}/core/range.rb +1 -1
  69. data/lib/kind/{type_checkers → objects/modules}/core/regexp.rb +1 -1
  70. data/lib/kind/{type_checkers → objects/modules}/core/string.rb +3 -1
  71. data/lib/kind/{type_checkers → objects/modules}/core/struct.rb +1 -1
  72. data/lib/kind/{type_checkers → objects/modules}/core/symbol.rb +1 -1
  73. data/lib/kind/{type_checkers → objects/modules}/core/time.rb +1 -1
  74. data/lib/kind/{type_checkers → objects/modules}/custom/boolean.rb +2 -2
  75. data/lib/kind/{type_checkers → objects/modules}/custom/callable.rb +1 -1
  76. data/lib/kind/{type_checkers → objects/modules}/custom/lambda.rb +1 -1
  77. data/lib/kind/{type_checkers → objects/modules}/stdlib/open_struct.rb +3 -1
  78. data/lib/kind/{type_checkers → objects/modules}/stdlib/set.rb +3 -1
  79. data/lib/kind/objects/nil.rb +17 -0
  80. data/lib/kind/objects/not_nil.rb +9 -0
  81. data/lib/kind/objects/object.rb +56 -0
  82. data/lib/kind/objects/respond_to.rb +30 -0
  83. data/lib/kind/objects/union_type.rb +44 -0
  84. data/lib/kind/presence.rb +4 -2
  85. data/lib/kind/result.rb +31 -0
  86. data/lib/kind/result/abstract.rb +53 -0
  87. data/lib/kind/result/failure.rb +33 -0
  88. data/lib/kind/result/methods.rb +17 -0
  89. data/lib/kind/result/monad.rb +74 -0
  90. data/lib/kind/result/monad/wrapper.rb +19 -0
  91. data/lib/kind/result/success.rb +53 -0
  92. data/lib/kind/strict/disabled.rb +34 -0
  93. data/lib/kind/try.rb +22 -10
  94. data/lib/kind/validator.rb +111 -0
  95. data/lib/kind/version.rb +1 -1
  96. metadata +84 -51
  97. data/lib/kind/active_model/kind_validator.rb +0 -103
  98. data/lib/kind/core.rb +0 -10
  99. data/lib/kind/core/deprecation.rb +0 -29
  100. data/lib/kind/core/kind.rb +0 -61
  101. data/lib/kind/core/undefined.rb +0 -7
  102. data/lib/kind/core/wrong_number_of_args.rb +0 -9
  103. data/lib/kind/deprecations/built_in_type_checkers.rb +0 -23
  104. data/lib/kind/deprecations/checker.rb +0 -16
  105. data/lib/kind/deprecations/checker/factory.rb +0 -31
  106. data/lib/kind/deprecations/checker/protocol.rb +0 -73
  107. data/lib/kind/deprecations/is.rb +0 -35
  108. data/lib/kind/deprecations/of.rb +0 -258
  109. data/lib/kind/deprecations/types.rb +0 -121
  110. data/lib/kind/error.rb +0 -15
  111. data/lib/kind/maybe/result.rb +0 -51
  112. data/lib/kind/type_checker.rb +0 -87
  113. data/lib/kind/type_checkers.rb +0 -30
@@ -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.1.0'
4
+ VERSION = '5.4.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: 4.1.0
4
+ version: 5.4.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-25 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,60 +33,90 @@ files:
31
33
  - bin/setup
32
34
  - kind.gemspec
33
35
  - lib/kind.rb
34
- - lib/kind/active_model/kind_validator.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
35
43
  - 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/core/wrong_number_of_args.rb
41
- - lib/kind/deprecations/built_in_type_checkers.rb
42
- - lib/kind/deprecations/checker.rb
43
- - lib/kind/deprecations/checker/factory.rb
44
- - lib/kind/deprecations/checker/protocol.rb
45
- - lib/kind/deprecations/is.rb
46
- - lib/kind/deprecations/of.rb
47
- - lib/kind/deprecations/types.rb
44
+ - lib/kind/basic.rb
45
+ - lib/kind/basic/error.rb
46
+ - lib/kind/basic/undefined.rb
48
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
49
54
  - lib/kind/empty.rb
50
- - lib/kind/error.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
51
66
  - lib/kind/maybe.rb
67
+ - lib/kind/maybe/methods.rb
68
+ - lib/kind/maybe/monad.rb
69
+ - lib/kind/maybe/monad/wrapper.rb
52
70
  - lib/kind/maybe/none.rb
53
- - lib/kind/maybe/result.rb
54
71
  - lib/kind/maybe/some.rb
55
72
  - lib/kind/maybe/typed.rb
56
- - lib/kind/maybe/wrappable.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
57
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
58
119
  - lib/kind/try.rb
59
- - lib/kind/type_checker.rb
60
- - lib/kind/type_checkers.rb
61
- - lib/kind/type_checkers/core/array.rb
62
- - lib/kind/type_checkers/core/class.rb
63
- - lib/kind/type_checkers/core/comparable.rb
64
- - lib/kind/type_checkers/core/enumerable.rb
65
- - lib/kind/type_checkers/core/enumerator.rb
66
- - lib/kind/type_checkers/core/file.rb
67
- - lib/kind/type_checkers/core/float.rb
68
- - lib/kind/type_checkers/core/hash.rb
69
- - lib/kind/type_checkers/core/integer.rb
70
- - lib/kind/type_checkers/core/io.rb
71
- - lib/kind/type_checkers/core/method.rb
72
- - lib/kind/type_checkers/core/module.rb
73
- - lib/kind/type_checkers/core/numeric.rb
74
- - lib/kind/type_checkers/core/proc.rb
75
- - lib/kind/type_checkers/core/queue.rb
76
- - lib/kind/type_checkers/core/range.rb
77
- - lib/kind/type_checkers/core/regexp.rb
78
- - lib/kind/type_checkers/core/string.rb
79
- - lib/kind/type_checkers/core/struct.rb
80
- - lib/kind/type_checkers/core/symbol.rb
81
- - lib/kind/type_checkers/core/time.rb
82
- - lib/kind/type_checkers/custom/boolean.rb
83
- - lib/kind/type_checkers/custom/callable.rb
84
- - lib/kind/type_checkers/custom/lambda.rb
85
- - lib/kind/type_checkers/stdlib/open_struct.rb
86
- - lib/kind/type_checkers/stdlib/set.rb
87
- - lib/kind/undefined.rb
88
120
  - lib/kind/validator.rb
89
121
  - lib/kind/version.rb
90
122
  - test.sh
@@ -102,15 +134,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
102
134
  requirements:
103
135
  - - ">="
104
136
  - !ruby/object:Gem::Version
105
- version: 2.2.0
137
+ version: 2.1.0
106
138
  required_rubygems_version: !ruby/object:Gem::Requirement
107
139
  requirements:
108
140
  - - ">="
109
141
  - !ruby/object:Gem::Version
110
142
  version: '0'
111
143
  requirements: []
112
- rubygems_version: 3.1.4
144
+ rubygems_version: 3.2.11
113
145
  signing_key:
114
146
  specification_version: 4
115
- 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.
116
149
  test_files: []
@@ -1,103 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class KindValidator < ActiveModel::EachValidator
4
- def validate_each(record, attribute, value)
5
- return if options[:allow_nil] && value.nil?
6
-
7
- return unless error = call_validation_for(attribute, value)
8
-
9
- raise Kind::Error.new("#{attribute} #{error}") if options[:strict]
10
-
11
- record.errors.add(attribute, error)
12
- end
13
-
14
- private
15
-
16
- def call_validation_for(attribute, value)
17
- expected = options[:with] || options[:in]
18
-
19
- return validate_with_default_strategy(expected, value) if expected
20
-
21
- return kind_of(expected, value) if expected = options[:of]
22
- return kind_is(expected, value) if expected = options[:is]
23
- return respond_to(expected, value) if expected = options[:respond_to]
24
- return instance_of(expected, value) if expected = options[:instance_of]
25
- return array_with(expected, value) if expected = options[:array_with]
26
- return array_of(expected, value) if expected = options[:array_of]
27
-
28
- raise Kind::Validator::InvalidDefinition.new(attribute)
29
- end
30
-
31
- def validate_with_default_strategy(expected, value)
32
- send(Kind::Validator.default_strategy, expected, value)
33
- end
34
-
35
- def kind_of(expected, value)
36
- types = Array(expected)
37
-
38
- return if types.any? { |type| type === value }
39
-
40
- "must be a kind of: #{types.map { |type| type.name }.join(', ')}"
41
- end
42
-
43
- CLASS_OR_MODULE = 'Class/Module'.freeze
44
-
45
- def kind_is(expected, value)
46
- return kind_is_not(expected, value) unless expected.kind_of?(::Array)
47
-
48
- result = expected.map { |kind| kind_is_not(kind, value) }.tap(&:compact!)
49
-
50
- result.empty? || result.size < expected.size ? nil : result.join(', ')
51
- end
52
-
53
- def kind_is_not(expected, value)
54
- case expected
55
- when ::Class
56
- return if expected == Kind::Class[value] || value < expected
57
-
58
- "must be the class or a subclass of `#{expected.name}`"
59
- when ::Module
60
- return if value.kind_of?(Class) && value <= expected
61
- return if expected == Kind.of_module_or_class(value) || value.kind_of?(expected)
62
-
63
- "must include the `#{expected.name}` module"
64
- else
65
- raise Kind::Error.new(CLASS_OR_MODULE, expected)
66
- end
67
- end
68
-
69
- def respond_to(expected, value)
70
- method_names = Array(expected)
71
-
72
- expected_methods = method_names.select { |method_name| !value.respond_to?(method_name) }
73
- expected_methods.map! { |method_name| "`#{method_name}`" }
74
-
75
- return if expected_methods.empty?
76
-
77
- methods = expected_methods.size == 1 ? 'method' : 'methods'
78
-
79
- "must respond to the #{methods}: #{expected_methods.join(', ')}"
80
- end
81
-
82
- def instance_of(expected, value)
83
- types = Array(expected)
84
-
85
- return if types.any? { |type| value.instance_of?(type) }
86
-
87
- "must be an instance of: #{types.map { |klass| klass.name }.join(', ')}"
88
- end
89
-
90
- def array_with(expected, value)
91
- return if value.kind_of?(::Array) && !value.empty? && (value - Kind::Array[expected]).empty?
92
-
93
- "must be an array with: #{expected.join(', ')}"
94
- end
95
-
96
- def array_of(expected, value)
97
- types = Array(expected)
98
-
99
- return if value.kind_of?(::Array) && !value.empty? && value.all? { |value| types.any? { |type| value.kind_of?(type) } }
100
-
101
- "must be an array of: #{types.map { |klass| klass.name }.join(', ')}"
102
- end
103
- end
data/lib/kind/core.rb DELETED
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Kind
4
- module Core
5
- require 'kind/core/wrong_number_of_args'
6
- require 'kind/core/deprecation'
7
- require 'kind/core/kind'
8
- require 'kind/core/undefined'
9
- end
10
- end
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Kind
4
- module DEPRECATION # :nodoc: all
5
- WARN_IS_DISABLED = String(ENV['DISABLE_KIND_DEPRECATION']).strip == 't'
6
-
7
- module DevNull
8
- def self.warn(_)
9
- end
10
- end
11
-
12
- OUTPUT = WARN_IS_DISABLED ? DevNull : ::Kernel
13
-
14
- def self.warn(message)
15
- OUTPUT.warn("[DEPRECATION] #{message}" % { version: 'version 5.0' })
16
- end
17
-
18
- def self.warn_method_replacement(old_method, new_method)
19
- self.warn "`#{old_method}` is deprecated, it will be removed in %{version}. " \
20
- "Please use `#{new_method}` instead."
21
- end
22
-
23
- def self.warn_removal(name)
24
- self.warn "`#{name}` is deprecated, it will be removed in %{version}."
25
- end
26
-
27
- private_constant :DevNull, :OUTPUT
28
- end
29
- end