kind 5.8.1 → 5.9.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/CHANGELOG.md +108 -32
- data/README.md +10 -13
- data/lib/kind/objects/object.rb +5 -0
- data/lib/kind/version.rb +1 -1
- 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: 195bae736a96e62b9320b209bc7845d6e8c39714342ccb34dfe5bf1ea7c169d8
|
|
4
|
+
data.tar.gz: 2cbf9ba591a62456ff1faf3f8e8e8b1052b9f2c61d96a9a8df62b7ba595a5ac4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 37e37d949dda2c0bbe11642742473200ff42d4300d63642819532fd32beec8485c953588ad100b2c771ec0e8528281d5535180aa21ceb1e53dfe45f992ad7141
|
|
7
|
+
data.tar.gz: 93e92d5db75442cb9c637924d731eec70f7324d50f9c2da91100b1bc916ef8a8ab8c7ea1bbf7590107141a1fc9e81181f51bc5c2848500f0ed7bc940adbaa36f
|
data/CHANGELOG.md
CHANGED
|
@@ -3,89 +3,91 @@
|
|
|
3
3
|
This project follows [semver 2.0.0](http://semver.org/spec/v2.0.0.html) and the recommendations of [keepachangelog.com](http://keepachangelog.com/).
|
|
4
4
|
|
|
5
5
|
- [Unreleased](#unreleased)
|
|
6
|
+
- [5.9.0 (2021-09-22)](#590-2021-09-22)
|
|
7
|
+
- [Added](#added)
|
|
6
8
|
- [5.8.1 (2021-09-22)](#581-2021-09-22)
|
|
7
9
|
- [Fixed](#fixed)
|
|
8
10
|
- [5.8.0 (2021-09-22)](#580-2021-09-22)
|
|
9
|
-
- [Added](#added)
|
|
10
|
-
- [5.7.0 (2021-06-22)](#570-2021-06-22)
|
|
11
11
|
- [Added](#added-1)
|
|
12
|
-
- [5.
|
|
12
|
+
- [5.7.0 (2021-06-22)](#570-2021-06-22)
|
|
13
13
|
- [Added](#added-2)
|
|
14
|
-
- [5.
|
|
14
|
+
- [5.6.0 (2021-05-14)](#560-2021-05-14)
|
|
15
15
|
- [Added](#added-3)
|
|
16
|
+
- [5.5.0 (2021-04-05)](#550-2021-04-05)
|
|
17
|
+
- [Added](#added-4)
|
|
16
18
|
- [5.4.1 (2021-03-26)](#541-2021-03-26)
|
|
17
19
|
- [Fixed](#fixed-1)
|
|
18
20
|
- [5.4.0 (2021-03-25)](#540-2021-03-25)
|
|
19
|
-
- [Added](#added-4)
|
|
20
|
-
- [5.3.0 (2021-03-23)](#530-2021-03-23)
|
|
21
21
|
- [Added](#added-5)
|
|
22
|
-
- [5.
|
|
22
|
+
- [5.3.0 (2021-03-23)](#530-2021-03-23)
|
|
23
23
|
- [Added](#added-6)
|
|
24
|
+
- [5.2.0 (2021-03-17)](#520-2021-03-17)
|
|
25
|
+
- [Added](#added-7)
|
|
24
26
|
- [Deprecated](#deprecated)
|
|
25
27
|
- [Changes](#changes)
|
|
26
28
|
- [5.1.0 (2021-02-23)](#510-2021-02-23)
|
|
27
|
-
- [Added](#added-
|
|
29
|
+
- [Added](#added-8)
|
|
28
30
|
- [Deprecated](#deprecated-1)
|
|
29
31
|
- [5.0.0 (2021-02-22)](#500-2021-02-22)
|
|
30
32
|
- [Breaking Changes](#breaking-changes)
|
|
31
33
|
- [Removed](#removed)
|
|
32
34
|
- [4.1.0 (2021-02-22)](#410-2021-02-22)
|
|
33
|
-
- [Added](#added-8)
|
|
34
|
-
- [4.0.0 (2021-02-22)](#400-2021-02-22)
|
|
35
35
|
- [Added](#added-9)
|
|
36
|
+
- [4.0.0 (2021-02-22)](#400-2021-02-22)
|
|
37
|
+
- [Added](#added-10)
|
|
36
38
|
- [Deprecated](#deprecated-2)
|
|
37
39
|
- [Fixed](#fixed-2)
|
|
38
40
|
- [3.1.0 (2020-07-08)](#310-2020-07-08)
|
|
39
|
-
- [Added](#added-
|
|
41
|
+
- [Added](#added-11)
|
|
40
42
|
- [3.0.0 (2020-06-25)](#300-2020-06-25)
|
|
41
43
|
- [Breaking Changes](#breaking-changes-1)
|
|
42
|
-
- [Added](#added-11)
|
|
43
|
-
- [2.3.0 (2020-06-24)](#230-2020-06-24)
|
|
44
44
|
- [Added](#added-12)
|
|
45
|
-
- [2.
|
|
45
|
+
- [2.3.0 (2020-06-24)](#230-2020-06-24)
|
|
46
46
|
- [Added](#added-13)
|
|
47
|
-
- [2.
|
|
47
|
+
- [2.2.0 (2020-06-23)](#220-2020-06-23)
|
|
48
48
|
- [Added](#added-14)
|
|
49
|
+
- [2.1.0 (2020-05-12)](#210-2020-05-12)
|
|
50
|
+
- [Added](#added-15)
|
|
49
51
|
- [Breaking Changes](#breaking-changes-2)
|
|
50
52
|
- [2.0.0 (2020-05-07)](#200-2020-05-07)
|
|
51
|
-
- [Added](#added-
|
|
53
|
+
- [Added](#added-16)
|
|
52
54
|
- [Breaking Changes](#breaking-changes-3)
|
|
53
55
|
- [Removed](#removed-1)
|
|
54
56
|
- [1.9.0 (2020-05-06)](#190-2020-05-06)
|
|
55
|
-
- [Added](#added-16)
|
|
56
|
-
- [1.8.0 (2020-05-03)](#180-2020-05-03)
|
|
57
57
|
- [Added](#added-17)
|
|
58
|
+
- [1.8.0 (2020-05-03)](#180-2020-05-03)
|
|
59
|
+
- [Added](#added-18)
|
|
58
60
|
- [1.7.0 (2020-05-03)](#170-2020-05-03)
|
|
59
61
|
- [Fixed](#fixed-3)
|
|
60
62
|
- [1.6.0 (2020-04-17)](#160-2020-04-17)
|
|
61
|
-
- [Added](#added-
|
|
63
|
+
- [Added](#added-19)
|
|
62
64
|
- [Changes](#changes-1)
|
|
63
65
|
- [1.5.0 (2020-04-12)](#150-2020-04-12)
|
|
64
|
-
- [Added](#added-19)
|
|
65
|
-
- [1.4.0 (2020-04-12)](#140-2020-04-12)
|
|
66
66
|
- [Added](#added-20)
|
|
67
|
-
- [1.
|
|
67
|
+
- [1.4.0 (2020-04-12)](#140-2020-04-12)
|
|
68
68
|
- [Added](#added-21)
|
|
69
|
-
- [1.
|
|
69
|
+
- [1.3.0 (2020-04-12)](#130-2020-04-12)
|
|
70
70
|
- [Added](#added-22)
|
|
71
|
-
- [1.
|
|
71
|
+
- [1.2.0 (2020-04-12)](#120-2020-04-12)
|
|
72
72
|
- [Added](#added-23)
|
|
73
|
+
- [1.1.0 (2020-04-09)](#110-2020-04-09)
|
|
74
|
+
- [Added](#added-24)
|
|
73
75
|
- [Fixed](#fixed-4)
|
|
74
76
|
- [1.0.0 (2020-03-16)](#100-2020-03-16)
|
|
75
|
-
- [Added](#added-24)
|
|
76
|
-
- [0.6.0 (2020-01-06)](#060-2020-01-06)
|
|
77
77
|
- [Added](#added-25)
|
|
78
|
-
- [0.
|
|
78
|
+
- [0.6.0 (2020-01-06)](#060-2020-01-06)
|
|
79
79
|
- [Added](#added-26)
|
|
80
|
-
- [0.
|
|
80
|
+
- [0.5.0 (2020-01-04)](#050-2020-01-04)
|
|
81
81
|
- [Added](#added-27)
|
|
82
|
-
- [0.
|
|
82
|
+
- [0.4.0 (2020-01-03)](#040-2020-01-03)
|
|
83
83
|
- [Added](#added-28)
|
|
84
|
+
- [0.3.0 (2020-01-03)](#030-2020-01-03)
|
|
85
|
+
- [Added](#added-29)
|
|
84
86
|
- [Breaking Changes](#breaking-changes-4)
|
|
85
87
|
- [0.2.0 (2020-01-02)](#020-2020-01-02)
|
|
86
|
-
- [Added](#added-29)
|
|
87
|
-
- [0.1.0 (2019-12-26)](#010-2019-12-26)
|
|
88
88
|
- [Added](#added-30)
|
|
89
|
+
- [0.1.0 (2019-12-26)](#010-2019-12-26)
|
|
90
|
+
- [Added](#added-31)
|
|
89
91
|
|
|
90
92
|
## Unreleased
|
|
91
93
|
|
|
@@ -97,6 +99,80 @@ This project follows [semver 2.0.0](http://semver.org/spec/v2.0.0.html) and the
|
|
|
97
99
|
### Fixed
|
|
98
100
|
-->
|
|
99
101
|
|
|
102
|
+
5.9.0 (2021-09-22)
|
|
103
|
+
------------------
|
|
104
|
+
|
|
105
|
+
### Added
|
|
106
|
+
|
|
107
|
+
* [#68](https://github.com/serradura/kind/pull/68) - Add `Kind.object(name:, &block)` to create `Kind::Objects`.
|
|
108
|
+
```ruby
|
|
109
|
+
PositiveInteger = Kind.object(name: 'PositiveInteger') do |value|
|
|
110
|
+
value.kind_of?(Integer) && value > 0
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# PositiveInteger.name
|
|
114
|
+
# PositiveInteger.kind
|
|
115
|
+
# The type handler can return its kind and its name
|
|
116
|
+
PositiveInteger.name # "PositiveInteger"
|
|
117
|
+
PositiveInteger.kind # #<Proc:0x0000.... >
|
|
118
|
+
|
|
119
|
+
# PositiveInteger.===
|
|
120
|
+
# Can check if a given value is an instance of its kind.
|
|
121
|
+
PositiveInteger === 1 # true
|
|
122
|
+
PositiveInteger === 0 # false
|
|
123
|
+
|
|
124
|
+
# PositiveInteger.value?(value)
|
|
125
|
+
# Can check if a given value is an instance of its kind.
|
|
126
|
+
PositiveInteger.value?(1) # true
|
|
127
|
+
PositiveInteger.value?(-1) # false
|
|
128
|
+
|
|
129
|
+
# If it doesn't receive an argument, a lambda will be returned and it will know how to do the type verification.
|
|
130
|
+
[1, 2, 0, 3, -1].select(&PositiveInteger.value?) # [1, 2, 3]
|
|
131
|
+
|
|
132
|
+
# PositiveInteger.or_nil(value)
|
|
133
|
+
# Can return nil if the given value isn't an instance of its kind
|
|
134
|
+
PositiveInteger.or_nil(1) # 1
|
|
135
|
+
PositiveInteger.or_nil(0) # nil
|
|
136
|
+
|
|
137
|
+
# PositiveInteger.or_undefined(value)
|
|
138
|
+
# Can return Kind::Undefined if the given value isn't an instance of its kind
|
|
139
|
+
PositiveInteger.or_undefined(2) # 2
|
|
140
|
+
PositiveInteger.or_undefined(-1) # Kind::Undefined
|
|
141
|
+
|
|
142
|
+
# PositiveInteger.or(fallback, value)
|
|
143
|
+
# Can return a fallback if the given value isn't an instance of its kind
|
|
144
|
+
PositiveInteger.or(nil, 1) # 1
|
|
145
|
+
PositiveInteger.or(nil, 0) # nil
|
|
146
|
+
|
|
147
|
+
# If it doesn't receive a second argument (the value), it will return a callable that knows how to expose an instance of the expected type or a fallback if the given value was wrong.
|
|
148
|
+
[1, 2, 0, 3, -1].map(&PositiveInteger.or(1)) # [1, 2, 1, 3, 1]
|
|
149
|
+
[1, 2, 0, 3, -1].map(&PositiveInteger.or(nil)) # [1, 2, nil, 3, nil]
|
|
150
|
+
|
|
151
|
+
# An error will be raised if the fallback didn't have the expected kind or if not nil / Kind::Undefined.
|
|
152
|
+
[1, 2, 0, 3, -1].map(&PositiveInteger.or(:foo)) # Kind::Error (:foo expected to be a kind of PositiveInteger)
|
|
153
|
+
|
|
154
|
+
# PositiveInteger[value]
|
|
155
|
+
# Will raise Kind::Error if the given value isn't an instance of the expected kind
|
|
156
|
+
PositiveInteger[1] # 1
|
|
157
|
+
PositiveInteger[:foo] # Kind::Error (:foo expected to be a kind of PositiveInteger)
|
|
158
|
+
|
|
159
|
+
# PositiveInteger.value(arg, default:)
|
|
160
|
+
# This method ensures that you will have a value of the expected kind. But, in the case of the given value be invalid, this method will require a default value (with the expected kind) to be returned.
|
|
161
|
+
PositiveInteger.value(2, default: 1) # 2
|
|
162
|
+
|
|
163
|
+
PositiveInteger.value('1', default: 1) # 1
|
|
164
|
+
|
|
165
|
+
PositiveInteger.value('1', default: 0) # Kind::Error (0 expected to be a kind of PositiveInteger)
|
|
166
|
+
|
|
167
|
+
# PositiveInteger.maybe
|
|
168
|
+
# This method returns a typed Kind::Maybe.
|
|
169
|
+
PositiveInteger.maybe(0).value_or(1) # 1
|
|
170
|
+
|
|
171
|
+
PositiveInteger.maybe(2).value_or(1) # 2
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
[⬆️ Back to Top](#changelog-)
|
|
175
|
+
|
|
100
176
|
5.8.1 (2021-09-22)
|
|
101
177
|
------------------
|
|
102
178
|
|
|
@@ -169,7 +245,7 @@ Kind.assert_hash!({level: :medium}, schema: {level: Level})
|
|
|
169
245
|
FilledString = begin
|
|
170
246
|
filled_string = ->(value) {value.is_a?(String) && value.present?}
|
|
171
247
|
|
|
172
|
-
Kind
|
|
248
|
+
Kind[filled_string, name: 'FilledString']
|
|
173
249
|
end
|
|
174
250
|
|
|
175
251
|
Kind.assert_hash!(some_hash, schema: {
|
data/README.md
CHANGED
|
@@ -42,7 +42,7 @@ So, I invite you to check out these features to see how they could be useful for
|
|
|
42
42
|
Version | Documentation
|
|
43
43
|
---------- | -------------
|
|
44
44
|
unreleased | https://github.com/serradura/kind/blob/main/README.md
|
|
45
|
-
5.
|
|
45
|
+
5.9.0 | https://github.com/serradura/kind/blob/v5.x/README.md
|
|
46
46
|
4.1.0 | https://github.com/serradura/kind/blob/v4.x/README.md
|
|
47
47
|
3.1.0 | https://github.com/serradura/kind/blob/v3.x/README.md
|
|
48
48
|
2.3.0 | https://github.com/serradura/kind/blob/v2.x/README.md
|
|
@@ -69,7 +69,7 @@ unreleased | https://github.com/serradura/kind/blob/main/README.md
|
|
|
69
69
|
- [Creating type handlers](#creating-type-handlers)
|
|
70
70
|
- [Dynamic creation](#dynamic-creation)
|
|
71
71
|
- [Using a class or a module](#using-a-class-or-a-module)
|
|
72
|
-
- [Using
|
|
72
|
+
- [Using Kind.object(name:, &block) ===](#using-kindobjectname-block-)
|
|
73
73
|
- [Kind::<Type> object](#kindtype-object)
|
|
74
74
|
- [Utility methods](#utility-methods)
|
|
75
75
|
- [Kind.of_class?()](#kindof_class)
|
|
@@ -125,7 +125,7 @@ unreleased | https://github.com/serradura/kind/blob/main/README.md
|
|
|
125
125
|
| kind | branch | ruby | activemodel |
|
|
126
126
|
| -------------- | ------- | ------------------ | -------------- |
|
|
127
127
|
| unreleased | main | >= 2.1.0, <= 3.0.0 | >= 3.2, < 7.0 |
|
|
128
|
-
| 5.
|
|
128
|
+
| 5.9.0 | v5.x | >= 2.1.0, <= 3.0.0 | >= 3.2, < 7.0 |
|
|
129
129
|
| 4.1.0 | v4.x | >= 2.2.0, <= 3.0.0 | >= 3.2, < 7.0 |
|
|
130
130
|
| 3.1.0 | v3.x | >= 2.2.0, <= 2.7 | >= 3.2, < 7.0 |
|
|
131
131
|
| 2.3.0 | v2.x | >= 2.2.0, <= 2.7 | >= 3.2, <= 6.0 |
|
|
@@ -393,7 +393,7 @@ end
|
|
|
393
393
|
|
|
394
394
|
user = User.new
|
|
395
395
|
|
|
396
|
-
kind_of_user = Kind
|
|
396
|
+
kind_of_user = Kind[User]
|
|
397
397
|
|
|
398
398
|
# kind_of_user.name
|
|
399
399
|
# kind_of_user.kind
|
|
@@ -412,7 +412,7 @@ kind_of_user.value?('') # false
|
|
|
412
412
|
kind_of_user.value?(User.new) # true
|
|
413
413
|
|
|
414
414
|
# If it doesn't receive an argument, a lambda will be returned and it will know how to do the type verification.
|
|
415
|
-
[0, User.new].select
|
|
415
|
+
[0, User.new].select(&kind_of_user.value?) # [#<User:0x0000.... >]
|
|
416
416
|
|
|
417
417
|
# kind_of_user.or_nil(value)
|
|
418
418
|
# Can return nil if the given value isn't an instance of its kind
|
|
@@ -455,15 +455,12 @@ kind_of_user.maybe('1').value_or(User.new) # #<User:0x0000...>
|
|
|
455
455
|
|
|
456
456
|
[⬆️ Back to Top](#table-of-contents-)
|
|
457
457
|
|
|
458
|
-
##### Using
|
|
459
|
-
|
|
460
|
-
Example using a lambda (an object which responds to .===) and a hash with the kind name.
|
|
458
|
+
##### Using Kind.object(name:, &block) ===
|
|
461
459
|
|
|
462
460
|
```ruby
|
|
463
|
-
PositiveInteger = Kind
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
)
|
|
461
|
+
PositiveInteger = Kind.object(name: 'PositiveInteger') do |value|
|
|
462
|
+
value.kind_of?(Integer) && value > 0
|
|
463
|
+
end
|
|
467
464
|
|
|
468
465
|
# PositiveInteger.name
|
|
469
466
|
# PositiveInteger.kind
|
|
@@ -482,7 +479,7 @@ PositiveInteger.value?(1) # true
|
|
|
482
479
|
PositiveInteger.value?(-1) # false
|
|
483
480
|
|
|
484
481
|
# If it doesn't receive an argument, a lambda will be returned and it will know how to do the type verification.
|
|
485
|
-
[1, 2, 0, 3, -1].select
|
|
482
|
+
[1, 2, 0, 3, -1].select(&PositiveInteger.value?) # [1, 2, 3]
|
|
486
483
|
|
|
487
484
|
# PositiveInteger.or_nil(value)
|
|
488
485
|
# Can return nil if the given value isn't an instance of its kind
|
data/lib/kind/objects/object.rb
CHANGED
|
@@ -46,6 +46,11 @@ module Kind
|
|
|
46
46
|
Object::Instance.new(kind, opt)
|
|
47
47
|
end
|
|
48
48
|
|
|
49
|
+
# Kind.object(name:,&block)
|
|
50
|
+
def self.object(name:, &block)
|
|
51
|
+
self[block, name: name]
|
|
52
|
+
end
|
|
53
|
+
|
|
49
54
|
# Kind::Of()
|
|
50
55
|
def self.Of(*args)
|
|
51
56
|
warn '[DEPRECATION] Kind::Of() is deprecated; use Kind[] instead. ' \
|
data/lib/kind/version.rb
CHANGED