kind 1.6.0 → 1.7.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.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +20 -23
  3. data/lib/kind/is.rb +5 -1
  4. data/lib/kind/version.rb +1 -1
  5. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7dd5fb43e1dfd7c69d1a7ae3ffbf875769a675bbf7f8682bcfc9c8b3aa45c739
4
- data.tar.gz: db15639b472a6b75d990b83f8b317ba7919f820b36e9a49a9141d387c6623768
3
+ metadata.gz: 273fcdcef40d8b61e552bb440f93a7b83adfd29621e1809201a66117babf9974
4
+ data.tar.gz: 84dac931b67ccc4ee895a8c2a4c3326ccfe0faf0540df09ba9fbcbfbe5034edc
5
5
  SHA512:
6
- metadata.gz: fd548af2d4a1d93d5c4f2ef344318d35f140e1a7e4e82289897286ed6563004d7a8cc4577f94fb38b41e194c093ababf05e9d620b96a4ed420277dc94e154d87
7
- data.tar.gz: 24ef063c68dc91f160b24a6d16992582cef56902b98bbc8fc54931c4e0076166f40c4795481e86e21cf546ae030f4c5aba49259785e8c00e46ab77debe374a27
6
+ metadata.gz: b3d702df70066307c7dac3058c41dab688de46c606d57455194d77570823d051dab5fd43b5c87c870dee58b9cef41a9e93a7d9d4639fe39489cc4b0e2d93d4bf
7
+ data.tar.gz: 4c02cd4e43a0407167f4284c6972feed925380a0d71a8c5dedcb474a24f458954175a929dac9d5b4509520cfea663e45692dba67269712bc6e8d83e53b80a8aa
data/README.md CHANGED
@@ -12,7 +12,7 @@ Basic type system for Ruby.
12
12
 
13
13
  As a creator of Ruby gems, I have a common need that I have to handle in many of my projects: type checking of method arguments.
14
14
 
15
- 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).
15
+ 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 you check out the [dry-types gem](https://dry-rb.org/gems/dry-types).
16
16
 
17
17
  ## Table of Contents <!-- omit in toc -->
18
18
  - [Required Ruby version](#required-ruby-version)
@@ -25,18 +25,17 @@ One of the goals of this project is to do simple type checking like `"some strin
25
25
  - [Registering new (custom) type checkers](#registering-new-custom-type-checkers)
26
26
  - [What happens if a custom type checker has a namespace?](#what-happens-if-a-custom-type-checker-has-a-namespace)
27
27
  - [Type checkers](#type-checkers)
28
- - [Classes' type checker](#classes-type-checker)
29
- - [Module type checkers](#module-type-checkers)
30
- - [Special type checkers](#special-type-checkers)
31
- - [Kind.of](#kindof)
28
+ - [Classes' type checkers](#classes-type-checkers)
29
+ - [Modules' type checkers](#modules-type-checkers)
30
+ - [Specials' type checkers](#specials-type-checkers)
32
31
  - [Kind::Undefined](#kindundefined)
33
- - [Kind.of.<Type>.or_undefined()](#kindoftypeor_undefined)
32
+ - [Kind.of.\<Type\>.or_undefined()](#kindoftypeor_undefined)
34
33
  - [Kind::Maybe](#kindmaybe)
35
34
  - [Kind::Maybe[] and Kind::Maybe#then](#kindmaybe-and-kindmaybethen)
36
35
  - [Kind::Maybe#try](#kindmaybetry)
37
36
  - [Kind.of.Maybe()](#kindofmaybe)
38
37
  - [Kind::Optional](#kindoptional)
39
- - [Kind::Empty](#kindempty)
38
+ - [Kind::Empty](#kindempty)
40
39
  - [Development](#development)
41
40
  - [Contributing](#contributing)
42
41
  - [License](#license)
@@ -82,7 +81,7 @@ sum('1', 1) # Kind::Error ("\"1\" expected to be a kind of Numeric")
82
81
  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.
83
82
 
84
83
  ```ruby
85
- Kind.of.Hash(nil) # raise Kind::Error, "nil expected to be a kind of Hash"
84
+ Kind.of.Hash(nil) # **raise Kind::Error, "nil expected to be a kind of Hash"**
86
85
  Kind.of.Hash('') # raise Kind::Error, "'' expected to be a kind of Hash"
87
86
  Kind.of.Hash({a: 1}) # {a: 1}
88
87
 
@@ -105,9 +104,9 @@ Kind.of.Hash(value, or: {}) # {}
105
104
  Kind.of.Boolean(nil, or: true) # true
106
105
  ```
107
106
 
108
- As an alternative syntax, you can use the `Kind::Of` instead of the method. e.g: `Kind::Of::Hash('')`
107
+ As an alternative syntax, you can use the `Kind::Of` instead of the `Kind.of` method. e.g: `Kind::Of::Hash('')`
109
108
 
110
- But if you don't need a strict type verification, use the `.or_nil`method
109
+ But if you don't need a strict type verification, use the `.or_nil` method.
111
110
 
112
111
  ```ruby
113
112
  Kind.of.Hash.or_nil('') # nil
@@ -206,8 +205,8 @@ kind_of_user.instance?(User) # true
206
205
  kind_of_user.class?(Hash) # false
207
206
  kind_of_user.class?(User) # true
208
207
 
209
- # Create type checkers dynamically is cheap
210
- # because of a singleton object is created to be available for use.
208
+ # Creating type checkers dynamically is cheap
209
+ # because a singleton object is created to be available for use.
211
210
 
212
211
  kind_of_user.object_id == Kind.of(User).object_id # true
213
212
 
@@ -215,10 +214,10 @@ kind_of_user.object_id == Kind.of(User).object_id # true
215
214
  # Kind.is() can be used to check a class/module #
216
215
  # --------------------------------------------- #
217
216
 
218
- class Admin < User
217
+ class AdminUser < User
219
218
  end
220
219
 
221
- Kind.is(Admin, User) # true
220
+ Kind.is(User, AdminUser) # true
222
221
  ```
223
222
 
224
223
  #### Registering new (custom) type checkers
@@ -229,7 +228,7 @@ Use `Kind::Types.add()`. e.g:
229
228
  class User
230
229
  end
231
230
 
232
- # You can define it at the end of the file which has the class/module.
231
+ # You can define it at the end of the file class/module where class/module was declared.
233
232
 
234
233
  Kind::Types.add(User)
235
234
 
@@ -310,7 +309,7 @@ Kind.of.Account::User::Membership.class?(Account::User::Membership) # true
310
309
 
311
310
  The list of types (classes and modules) available to use with `Kind.of.*` or `Kind.is.*` are:
312
311
 
313
- ## Classes' type checker
312
+ ### Classes' type checkers
314
313
 
315
314
  - `Kind.of.String`
316
315
  - `Kind.of.Symbol`
@@ -330,14 +329,12 @@ The list of types (classes and modules) available to use with `Kind.of.*` or `Ki
330
329
  - `Kind.of.IO`
331
330
  - `Kind.of.File`
332
331
 
333
- ### Module type checkers
332
+ ### Modules' type checkers
334
333
 
335
334
  - `Kind.of.Enumerable`
336
335
  - `Kind.of.Comparable`
337
336
 
338
- ### Special type checkers
339
-
340
- #### Kind.of
337
+ ### Specials' type checkers
341
338
 
342
339
  - `Kind.of.Class()`
343
340
  - `Kind.of.Module()`
@@ -356,7 +353,7 @@ The [`Kind::Undefined`](https://github.com/serradura/kind/blob/834f6b8ebdc737de8
356
353
 
357
354
  If you are interested, check out [the tests](https://github.com/serradura/kind/blob/834f6b8ebdc737de8e5628986585f30c1a5aa41b/test/kind/undefined_test.rb) to understand its methods.
358
355
 
359
- ### Kind.of.<Type>.or_undefined()
356
+ ### Kind.of.\<Type\>.or_undefined()
360
357
 
361
358
  If you interested in use `Kind::Undefined` you can use the method `.or_undefined` with any of the [available type checkers](#type-checkers). e.g:
362
359
 
@@ -521,9 +518,9 @@ PS: The `Kind.of.Optional` is available to check if some value is a `Kind::Optio
521
518
 
522
519
  [⬆️ Back to Top](#table-of-contents-)
523
520
 
524
- ### Kind::Empty
521
+ ## Kind::Empty
525
522
 
526
- There is a common need to define default argument values. In case you don't know, depending on the argument data type, when a method is invoked a new object will be created in the program memory to fills some default argument value. e.g:
523
+ When you define a method that has default arguments, for certain data types, you will always create a new object in memory. e.g:
527
524
 
528
525
  ```ruby
529
526
  def something(params = {})
data/lib/kind/is.rb CHANGED
@@ -9,7 +9,11 @@ module Kind
9
9
  def self.__call__(expected_kind, object)
10
10
  kind = Kind::Of.Module(object)
11
11
 
12
- kind <= expected_kind || false
12
+ if kind.is_a?(Class)
13
+ kind <= expected_kind || false
14
+ else
15
+ kind == expected_kind || kind.is_a?(expected_kind)
16
+ end
13
17
  end
14
18
  end
15
19
  end
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.6.0'
4
+ VERSION = '1.7.0'
5
5
  end
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: 1.6.0
4
+ version: 1.7.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-04-17 00:00:00.000000000 Z
11
+ date: 2020-05-03 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Basic type system for Ruby (free of dependencies).
14
14
  email: