kind 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
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