kind 0.4.0 → 0.5.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 +20 -1
- data/lib/kind.rb +22 -12
- 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: 381c55689c9c4b8077f859e76370db5f7c5f17efabdb83fb2902a2e33d602c42
|
4
|
+
data.tar.gz: de00093039551f1b6020a9d3a6cac31890f8fa7edfa1af620d4e9b3af1264749
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc6b4078e770ab68a50b7435f6b9a174dbe555b47ba64e0cf1e523e3b3bd1a1e936aa7368251a7b9be7b9203a48d6ab37d415d908c2cfcca49311a9cf0d425a7
|
7
|
+
data.tar.gz: b3d64254b98c33836bc903132fb4ba7dd75fd501fb6ad9bc14f1d4ab3a92e45d95dc4c81ea7f91559d2e43f110c9c7ad7650394d0bed7a585d04d70b876685df
|
data/README.md
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+

|
1
2
|
[](https://rubygems.org/gems/kind)
|
2
3
|
[](https://travis-ci.com/serradura/kind)
|
3
4
|
|
@@ -12,6 +13,7 @@ As a creator of Ruby gems, I have a common need that I have to handle in many of
|
|
12
13
|
One of the goals of this project is to do simple type checking like `"some string".is_a?(String)`, but using a bunch of basic abstractions. So, after reading this README and realizing that you need something more robust, I recommend to you check out the [dry-types gem](https://dry-rb.org/gems/dry-types).
|
13
14
|
|
14
15
|
## Table of Contents <!-- omit in toc -->
|
16
|
+
- [Required Ruby version](#required-ruby-version)
|
15
17
|
- [Installation](#installation)
|
16
18
|
- [Usage](#usage)
|
17
19
|
- [Verifying the kind of some object](#verifying-the-kind-of-some-object)
|
@@ -26,6 +28,9 @@ One of the goals of this project is to do simple type checking like `"some strin
|
|
26
28
|
- [License](#license)
|
27
29
|
- [Code of Conduct](#code-of-conduct)
|
28
30
|
|
31
|
+
## Required Ruby version
|
32
|
+
> \>= 2.2.0
|
33
|
+
|
29
34
|
## Installation
|
30
35
|
|
31
36
|
Add this line to your application's Gemfile:
|
@@ -48,7 +53,7 @@ Or install it yourself as:
|
|
48
53
|
|
49
54
|
### Verifying the kind of some object
|
50
55
|
|
51
|
-
By default, basic
|
56
|
+
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.
|
52
57
|
|
53
58
|
```ruby
|
54
59
|
Kind.of.Hash('')
|
@@ -66,6 +71,20 @@ Kind.of.Boolean(true) # true
|
|
66
71
|
Kind.of.Boolean(false) # false
|
67
72
|
```
|
68
73
|
|
74
|
+
When the verified value is nil, it is possible to define a default value with the same type to be returned.
|
75
|
+
|
76
|
+
```ruby
|
77
|
+
value = nil
|
78
|
+
|
79
|
+
Kind.of.Hash(value, or: {})
|
80
|
+
# {}
|
81
|
+
|
82
|
+
# ---
|
83
|
+
|
84
|
+
Kind.of.Boolean(nil, or: true)
|
85
|
+
# true
|
86
|
+
```
|
87
|
+
|
69
88
|
As an alternative syntax, you can use the `Kind::Of` instead of the method. e.g: `Kind::Of::Hash('')`
|
70
89
|
|
71
90
|
But if you don't need a strict type verification, use the `.or_nil`method
|
data/lib/kind.rb
CHANGED
@@ -86,10 +86,12 @@ module Kind
|
|
86
86
|
extend self
|
87
87
|
|
88
88
|
KIND_OF = <<-RUBY
|
89
|
-
def self.%{name}(object = nil)
|
90
|
-
|
89
|
+
def self.%{name}(object = nil, options = {})
|
90
|
+
default = options[:or]
|
91
91
|
|
92
|
-
Kind::Of
|
92
|
+
return Kind::Of::%{name} if object.nil? && default.nil?
|
93
|
+
|
94
|
+
Kind::Of.call(::%{name}, object || default)
|
93
95
|
end
|
94
96
|
RUBY
|
95
97
|
|
@@ -143,12 +145,16 @@ module Kind
|
|
143
145
|
module Of
|
144
146
|
# -- Boolean
|
145
147
|
|
146
|
-
def self.Boolean(object = nil)
|
147
|
-
|
148
|
+
def self.Boolean(object = nil, options = {})
|
149
|
+
default = options[:or]
|
150
|
+
|
151
|
+
return Kind::Of::Boolean if object.nil? && default.nil?
|
152
|
+
|
153
|
+
bool = object.nil? ? default : object
|
148
154
|
|
149
|
-
return
|
155
|
+
return bool if bool.is_a?(::TrueClass) || bool.is_a?(::FalseClass)
|
150
156
|
|
151
|
-
raise Kind::Error.new('Boolean'.freeze,
|
157
|
+
raise Kind::Error.new('Boolean'.freeze, bool)
|
152
158
|
end
|
153
159
|
|
154
160
|
const_set(:Boolean, ::Class.new(Checker) do
|
@@ -163,17 +169,21 @@ module Kind
|
|
163
169
|
|
164
170
|
# -- Lambda
|
165
171
|
|
166
|
-
def self.Lambda(object = nil)
|
167
|
-
|
172
|
+
def self.Lambda(object = nil, options = {})
|
173
|
+
default = options[:or]
|
174
|
+
|
175
|
+
return Kind::Of::Lambda if object.nil? && default.nil?
|
176
|
+
|
177
|
+
func = object || default
|
168
178
|
|
169
|
-
return
|
179
|
+
return func if func.is_a?(::Proc) && func.lambda?
|
170
180
|
|
171
|
-
raise Kind::Error.new('Lambda'.freeze,
|
181
|
+
raise Kind::Error.new('Lambda'.freeze, func)
|
172
182
|
end
|
173
183
|
|
174
184
|
const_set(:Lambda, ::Class.new(Checker) do
|
175
185
|
def instance?(value)
|
176
|
-
value.is_a?(
|
186
|
+
value.is_a?(@type) && value.lambda?
|
177
187
|
end
|
178
188
|
end.new(::Proc).freeze)
|
179
189
|
end
|
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.5.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-05 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Basic type system for Ruby (free of dependencies).
|
14
14
|
email:
|