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