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.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -3
  3. data/lib/kind/version.rb +1 -1
  4. data/lib/kind.rb +30 -0
  5. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0ebe119486837b90cdb9bd3c61a7d429d218608c0a84b19c94dd9d752909b194
4
- data.tar.gz: b881aa36c0c9611eaa755f1cf99a2cff3c320975450a8136eef244de612ba755
3
+ metadata.gz: b922b130910037cd09fff2d0743e29aada4825e1d8acb6c11e1a00339fbafe9b
4
+ data.tar.gz: e7f0322e4690b6a8f72899f5811118731b324d787f37486b433d5b6774e001f8
5
5
  SHA512:
6
- metadata.gz: 27fd2b57f56612086698768b584e5d26641ad2f568d023b0ef78a7ac12ea0333dfeadf05f2af69d496448e04b2c396782a3a95f17a93cf92b995ce3d5677a986
7
- data.tar.gz: 14a9f90efd784f353cab0fd174b6bc6d715fc0905ff79d38c692eeacf41e43fac2404b8c40f8381e4e201f9bba14c529196c192aa3acec411b7e163b1864077d
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.of.Class()`
276
- - `Kind.of.Module()`
277
- - `Kind.of.Boolean()`
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Kind
4
- VERSION = '1.2.0'
4
+ VERSION = '1.3.0'
5
5
  end
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kind
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rodrigo Serradura