kind 0.5.0 → 0.6.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 +14 -0
- data/lib/kind.rb +16 -11
- data/lib/kind/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 33889c9e4fc1ad94b529e15711ae7d8a36271710367769d3d675301977e1e83c
|
4
|
+
data.tar.gz: 39ed9dfb4b99ca346ebc82561592f4d867479576c6d749aa41f8d86b4e2bf2df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1b4093ba9909ea58cd319e0cafda608dc78f259da971685c1a9d778a012d17c5f5ab027739aed74c0eb354b7f7572e01749d3ce7822b9be4a15d7cb26be5f254
|
7
|
+
data.tar.gz: 881b88913a5172e3cb3bcfd73b466bd26422d0213e9088600c3c611bb20b3c326dfb8f6bdfcac0556b2aa5f2462a197522e59f94f147eaa9beb85102ee4dc0f5
|
data/README.md
CHANGED
@@ -51,6 +51,20 @@ Or install it yourself as:
|
|
51
51
|
|
52
52
|
## Usage
|
53
53
|
|
54
|
+
With this gem you can add some kind of type checking at runtime. e.g:
|
55
|
+
|
56
|
+
```ruby
|
57
|
+
def sum(a, b)
|
58
|
+
Kind.of.Numeric(a) + Kind.of.Numeric(b)
|
59
|
+
end
|
60
|
+
|
61
|
+
sum(1, 1)
|
62
|
+
# 2
|
63
|
+
|
64
|
+
sum('1', 1)
|
65
|
+
# Kind::Error ("\"1\" expected to be a kind of Numeric")
|
66
|
+
```
|
67
|
+
|
54
68
|
### Verifying the kind of some object
|
55
69
|
|
56
70
|
By default, basic verifications are strict. So, when you perform `Kind.of.Hash(value)`, if the given value was a Hash, the value itself will be returned, but if it isn't the right type, an error will be raised.
|
data/lib/kind.rb
CHANGED
@@ -47,10 +47,10 @@ module Kind
|
|
47
47
|
end
|
48
48
|
|
49
49
|
module Of
|
50
|
-
def self.call(klass, object)
|
50
|
+
def self.call(klass, object, name: nil)
|
51
51
|
return object if object.is_a?(klass)
|
52
52
|
|
53
|
-
raise Kind::Error.new(klass, object)
|
53
|
+
raise Kind::Error.new((name || klass.name), object)
|
54
54
|
end
|
55
55
|
|
56
56
|
def self.Class(object = nil)
|
@@ -91,7 +91,7 @@ module Kind
|
|
91
91
|
|
92
92
|
return Kind::Of::%{name} if object.nil? && default.nil?
|
93
93
|
|
94
|
-
Kind::Of.call(::%{name}, object || default)
|
94
|
+
Kind::Of.call(::%{name}, (object || default), name: "%{name}".freeze)
|
95
95
|
end
|
96
96
|
RUBY
|
97
97
|
|
@@ -103,22 +103,25 @@ module Kind
|
|
103
103
|
|
104
104
|
private_constant :KIND_OF, :KIND_IS
|
105
105
|
|
106
|
-
def add(mod)
|
107
|
-
|
106
|
+
def add(mod, name: nil)
|
107
|
+
mod_name = Kind.of.Module(mod).name
|
108
|
+
chk_name = name ? Kind::Of.(String, name) : mod_name
|
108
109
|
|
109
|
-
unless Of.respond_to?(
|
110
|
-
Of.instance_eval(KIND_OF % { name:
|
111
|
-
Of.const_set(
|
110
|
+
unless Of.respond_to?(chk_name)
|
111
|
+
Of.instance_eval(KIND_OF % { name: chk_name })
|
112
|
+
Of.const_set(chk_name, Checker.new(mod).freeze)
|
112
113
|
end
|
113
114
|
|
114
|
-
|
115
|
+
unless Is.respond_to?(chk_name)
|
116
|
+
Is.instance_eval(KIND_IS % { name: chk_name })
|
117
|
+
end
|
115
118
|
end
|
116
119
|
end
|
117
120
|
|
118
121
|
def self.is; Is; end
|
119
122
|
def self.of; Of; end
|
120
123
|
|
121
|
-
# Classes
|
124
|
+
# -- Classes
|
122
125
|
[
|
123
126
|
String, Symbol, Numeric, Integer, Float, Regexp, Time,
|
124
127
|
Array, Range, Hash, Struct, Enumerator,
|
@@ -126,7 +129,9 @@ module Kind
|
|
126
129
|
IO, File
|
127
130
|
].each { |klass| Types.add(klass) }
|
128
131
|
|
129
|
-
|
132
|
+
Types.add(Queue, name: 'Queue'.freeze)
|
133
|
+
|
134
|
+
# -- Modules
|
130
135
|
[
|
131
136
|
Enumerable, Comparable
|
132
137
|
].each { |klass| Types.add(klass) }
|
data/lib/kind/version.rb
CHANGED
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: 0.
|
4
|
+
version: 0.6.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: 2020-01-
|
11
|
+
date: 2020-01-07 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Basic type system for Ruby (free of dependencies).
|
14
14
|
email:
|