kind 1.2.0 → 1.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.
- checksums.yaml +4 -4
- data/README.md +5 -3
- data/lib/kind/version.rb +1 -1
- data/lib/kind.rb +30 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b922b130910037cd09fff2d0743e29aada4825e1d8acb6c11e1a00339fbafe9b
|
4
|
+
data.tar.gz: e7f0322e4690b6a8f72899f5811118731b324d787f37486b433d5b6774e001f8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 35affc63747d867f6564345d4eb2acb2687cfa33919fc4059a54fd0413fda837cf7207e869b3d28d2fccf4145e1846d13340066124cfdd735082b9b56da19b0f
|
7
|
+
data.tar.gz: 04cfd8e97685d1e423d32bff405719144c9b868320528b3eef304b939e9b76520567a32f458933ecb51f9878c0677bd196670b9547cc9dfea358f67b86dc8855
|
data/README.md
CHANGED
@@ -269,12 +269,14 @@ The list of types (classes and modules) available to use with `Kind.of.*` or `Ki
|
|
269
269
|
- `Kind.of.Module()`
|
270
270
|
- `Kind.of.Lambda()`
|
271
271
|
- `Kind.of.Boolean()`
|
272
|
+
- `Kind.of.Callable()`
|
272
273
|
|
273
274
|
#### Kind.is
|
274
275
|
|
275
|
-
- `Kind.
|
276
|
-
- `Kind.
|
277
|
-
- `Kind.
|
276
|
+
- `Kind.is.Class()`
|
277
|
+
- `Kind.is.Module()`
|
278
|
+
- `Kind.is.Boolean()`
|
279
|
+
- `Kind.is.Callable()`: verifies if the given value `respond_to?(:call)` or if it's a class/module, if its `public_instance_methods.include?(:call)`.
|
278
280
|
|
279
281
|
[⬆️ Back to Top](#table-of-contents-)
|
280
282
|
|
data/lib/kind/version.rb
CHANGED
data/lib/kind.rb
CHANGED
@@ -37,6 +37,10 @@ module Kind
|
|
37
37
|
klass = Kind.of.Class(value)
|
38
38
|
klass <= TrueClass || klass <= FalseClass
|
39
39
|
end
|
40
|
+
|
41
|
+
def self.Callable(value)
|
42
|
+
value.respond_to?(:call) || (value.is_a?(Module) && value.public_instance_methods.include?(:call))
|
43
|
+
end
|
40
44
|
end
|
41
45
|
|
42
46
|
module Of
|
@@ -89,5 +93,31 @@ module Kind
|
|
89
93
|
value.is_a?(__kind) && value.lambda?
|
90
94
|
end
|
91
95
|
end)
|
96
|
+
|
97
|
+
# -- Callable
|
98
|
+
|
99
|
+
def self.Callable(object = Undefined, options = {})
|
100
|
+
default = options[:or]
|
101
|
+
|
102
|
+
return Kind::Of::Callable if object == Undefined && default.nil?
|
103
|
+
|
104
|
+
callable = object.nil? ? default : object
|
105
|
+
|
106
|
+
return callable if callable.respond_to?(:call)
|
107
|
+
|
108
|
+
raise Kind::Error.new('Callable'.freeze, callable)
|
109
|
+
end
|
110
|
+
|
111
|
+
const_set(:Callable, ::Module.new do
|
112
|
+
extend Checker
|
113
|
+
|
114
|
+
def self.__kind; Object; end
|
115
|
+
|
116
|
+
def self.class?(value); Kind::Is::Callable(value); end
|
117
|
+
|
118
|
+
def self.instance?(value);
|
119
|
+
value.respond_to?(:call)
|
120
|
+
end
|
121
|
+
end)
|
92
122
|
end
|
93
123
|
end
|