kind 2.1.0 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a83d36b4c1fe131567251f418b775a8366ecf2a7c0d31682f801866cb9d83a27
4
- data.tar.gz: b9b613500675aa1ea9e10c4b5ff83a451f289aec39896aaed025c196f0212ece
3
+ metadata.gz: 3bb8430c79ca97835ebdf6604e0c5afc4301f912db778e5f930fb9e699ae08c1
4
+ data.tar.gz: 0557c3df900513e5ec7d45fec79fdf7502f0cb06a8e1538ff935e0228ef11136
5
5
  SHA512:
6
- metadata.gz: 252e2e4f3bd9bbd09ff182579d450de170688ada607dfaa30cd70748c1ac4473381c856ba1be37f74ccd1eb05d077763cbf853ea1f356c58226408108e69f4e8
7
- data.tar.gz: f35a606761e6de74f81427a4431c711252303f78e4b0b5d11dd5e1878180112c1733fa4fef85949f3414196e387b54c672e768384f92aff9ac1c434662529834
6
+ metadata.gz: 0ad03f0d27484914f45607d9e1fd7cfdaf8000d700e31f069b274b5f977f42a8736a3d03d0cba1f3d06679f0f5a05b56d7c3b4acfd2a90cce20e524de6f9154a
7
+ data.tar.gz: 6f8e54590261939a43a52895921d80fb693a0e16361d011f53a80f1d7269aaade1e8871ae44374586ec488c026a02fced9057fdfcb300c532bd3a018498e954a
data/README.md CHANGED
@@ -31,6 +31,10 @@ One of the goals of this project is to do simple type checking like `"some strin
31
31
  - [Classes' type checkers](#classes-type-checkers)
32
32
  - [Modules' type checkers](#modules-type-checkers)
33
33
  - [Specials' type checkers](#specials-type-checkers)
34
+ - [Kind::Validator (ActiveModel::Validations)](#kindvalidator-activemodelvalidations)
35
+ - [Usage](#usage-1)
36
+ - [Defining the default validation strategy](#defining-the-default-validation-strategy)
37
+ - [Using the `allow_nil` and `strict` options](#using-the-allow_nil-and-strict-options)
34
38
  - [Kind::Undefined](#kindundefined)
35
39
  - [Kind.of.\<Type\>.or_undefined()](#kindoftypeor_undefined)
36
40
  - [Kind::Maybe](#kindmaybe)
@@ -43,10 +47,6 @@ One of the goals of this project is to do simple type checking like `"some strin
43
47
  - [Replacing blocks by lambdas](#replacing-blocks-by-lambdas-2)
44
48
  - [Kind.of.\<Type\>.as_optional](#kindoftypeas_optional)
45
49
  - [Kind::Maybe#try](#kindmaybetry)
46
- - [Kind::Validator (ActiveModel::Validations)](#kindvalidator-activemodelvalidations)
47
- - [Usage](#usage-1)
48
- - [Defining the default validation strategy](#defining-the-default-validation-strategy)
49
- - [Using the `allow_nil` and `strict` options](#using-the-allow_nil-and-strict-options)
50
50
  - [Kind::Empty](#kindempty)
51
51
  - [Similar Projects](#similar-projects)
52
52
  - [Development](#development)
@@ -163,13 +163,19 @@ Kind.of.Boolean.or_nil(true) # true
163
163
  Use the method `.instance?` to verify if the given object has the expected type.
164
164
 
165
165
  ```ruby
166
- Kind.of.Hash.instance?('') # false
166
+ Kind.of.Hash.instance?({}) # true
167
+ Kind.of.Hash.instance?({}, HashWithIndifferentAccess.new) # true
168
+
169
+ Kind.of.Hash.instance?('') # false
170
+ Kind.of.Hash.instance?({}, '') # false
167
171
 
168
172
  # ---
169
173
 
170
- Kind.of.Boolean.instance?('') # false
171
- Kind.of.Boolean.instance?(true) # true
172
- Kind.of.Boolean.instance?(false) # true
174
+ Kind.of.Boolean.instance?(true) # true
175
+ Kind.of.Boolean.instance?(true, false) # true
176
+
177
+ Kind.of.Boolean.instance?(nil) # false
178
+ Kind.of.Boolean.instance?(false, true, nil) # false
173
179
  ```
174
180
 
175
181
  > **Note:** When `.instance?` is called without an argument,
@@ -186,6 +192,22 @@ collection
186
192
  > To do this, use Kind.of.\<Type\>?()
187
193
 
188
194
  ```ruby
195
+ Kind.of.Hash?({}) # true
196
+ Kind.of.Hash?({}, HashWithIndifferentAccess.new) # true
197
+
198
+ Kind.of.Hash?('') # false
199
+ Kind.of.Hash?({}, '') # false
200
+
201
+ # ---
202
+
203
+ Kind.of.Boolean?(true) # true
204
+ Kind.of.Boolean?(false, true) # true
205
+
206
+ Kind.of.Boolean?(nil) # false
207
+ Kind.of.Boolean?(false, true, nil) # false
208
+
209
+ # ---
210
+
189
211
  collection = [ {number: 1}, 'number 2', {number: 3}, :number_4 ]
190
212
 
191
213
  collection.select(&Kind.of.Hash?) # [{:number=>1}, {:number=>3}]
@@ -459,6 +481,158 @@ The list of types (classes and modules) available to use with `Kind.of.*` or `Ki
459
481
 
460
482
  [⬆️ Back to Top](#table-of-contents-)
461
483
 
484
+ ## Kind::Validator (ActiveModel::Validations)
485
+
486
+ This module enables the capability to validate types via [`ActiveModel::Validations >= 3.2, < 6.1.0`](https://api.rubyonrails.org/classes/ActiveModel/Validations.html). e.g
487
+
488
+ ```ruby
489
+ class Person
490
+ include ActiveModel::Validations
491
+
492
+ attr_accessor :first_name, :last_name
493
+
494
+ validates :first_name, :last_name, kind: String
495
+ end
496
+ ```
497
+
498
+ And to make use of it, you will need to do an explicitly require. e.g:
499
+
500
+ ```ruby
501
+ # In some Gemfile
502
+ gem 'kind', require: 'kind/active_model/validation'
503
+
504
+ # In some .rb file
505
+ require 'kind/active_model/validation'
506
+ ```
507
+
508
+ ### Usage
509
+
510
+ **[Object#kind_of?](https://ruby-doc.org/core-2.6.4/Object.html#method-i-kind_of-3F)**
511
+
512
+ ```ruby
513
+ validates :name, kind: { of: String }
514
+
515
+ # Use an array to verify if the attribute
516
+ # is an instance of one of the classes/modules.
517
+
518
+ validates :status, kind: { of: [String, Symbol]}
519
+ ```
520
+
521
+ **[Kind.is](#verifying-the-kind-of-some-classmodule)**
522
+
523
+ ```ruby
524
+ #
525
+ # Verifying if the attribute value is the class or a subclass.
526
+ #
527
+ class Human; end
528
+ class Person < Human; end
529
+ class User < Human; end
530
+
531
+ validates :human_kind, kind: { is: Human }
532
+
533
+ #
534
+ # Verifying if the attribute value is the module or if it is a class that includes the module
535
+ #
536
+ module Human; end
537
+ class Person; include Human; end
538
+ class User; include Human; end
539
+
540
+ validates :human_kind, kind: { is: Human }
541
+
542
+ #
543
+ # Verifying if the attribute value is the module or if it is a module that extends the module
544
+ #
545
+ module Human; end
546
+ module Person; extend Human; end
547
+ module User; extend Human; end
548
+
549
+ validates :human_kind, kind: { is: Human }
550
+
551
+ # or use an array to verify if the attribute
552
+ # is a kind of one those classes/modules.
553
+
554
+ validates :human_kind, kind: { is: [Person, User] }
555
+ ```
556
+
557
+ **[Object#instance_of?](https://ruby-doc.org/core-2.6.4/Object.html#method-i-instance_of-3F)**
558
+
559
+ ```ruby
560
+ validates :name, kind: { instance_of: String }
561
+
562
+ # or use an array to verify if the attribute
563
+ # is an instance of one of the classes/modules.
564
+
565
+ validates :name, kind: { instance_of: [String, Symbol] }
566
+ ```
567
+
568
+
569
+ **[Object#respond_to?](https://ruby-doc.org/core-2.6.4/Object.html#method-i-respond_to-3F)**
570
+
571
+ ```ruby
572
+ validates :handler, kind: { respond_to: :call }
573
+ ```
574
+
575
+ **Array.new.all? { |item| item.kind_of?(Class) }**
576
+
577
+ ```ruby
578
+ validates :account_types, kind: { array_of: String }
579
+
580
+ # or use an array to verify if the attribute
581
+ # is an instance of one of the classes
582
+
583
+ validates :account_types, kind: { array_of: [String, Symbol] }
584
+ ```
585
+
586
+ **Array.new.all? { |item| expected_values.include?(item) }**
587
+
588
+ ```ruby
589
+ # Verifies if the attribute value
590
+ # is an array with some or all the expected values.
591
+
592
+ validates :account_types, kind: { array_with: ['foo', 'bar'] }
593
+ ```
594
+
595
+ #### Defining the default validation strategy
596
+
597
+ By default, you can define the attribute type directly (without a hash). e.g.
598
+
599
+ ```ruby
600
+ validates :name, kind: String
601
+ # or
602
+ validates :name, kind: [String, Symbol]
603
+ ```
604
+
605
+ To changes this behavior you can set another strategy to validates the attributes types:
606
+
607
+ ```ruby
608
+ Kind::Validator.default_strategy = :instance_of
609
+
610
+ # Tip: Create an initializer if you are in a Rails application.
611
+ ```
612
+
613
+ And these are the available options to define the default strategy:
614
+ - `kind_of` *(default)*
615
+ - `instance_of`
616
+
617
+ #### Using the `allow_nil` and `strict` options
618
+
619
+ You can use the `allow_nil` option with any of the kind validations. e.g.
620
+
621
+ ```ruby
622
+ validates :name, kind: String, allow_nil: true
623
+ ```
624
+
625
+ And as any active model validation, kind validations works with the `strict: true`
626
+ option and with the `validates!` method. e.g.
627
+
628
+ ```ruby
629
+ validates :first_name, kind: String, strict: true
630
+ # or
631
+ validates! :last_name, kind: String
632
+ ```
633
+
634
+ [⬆️ Back to Top](#table-of-contents-)
635
+
462
636
  ## Kind::Undefined
463
637
 
464
638
  The [`Kind::Undefined`](https://github.com/serradura/kind/blob/834f6b8ebdc737de8e5628986585f30c1a5aa41b/lib/kind/undefined.rb) constant is used as the default argument of type checkers. This is necessary [to know if no arguments were passed to the type check methods](https://github.com/serradura/kind/blob/834f6b8ebdc737de8e5628986585f30c1a5aa41b/lib/kind.rb#L45-L48). But, you can use it in your codebase too, especially if you need to distinguish the usage of `nil` as a method argument.
@@ -586,7 +760,7 @@ you could use the methods `Kind::None` and `Kind::Some` to do this. e.g:
586
760
  Add = -> params do
587
761
  a, b = Kind.of.Hash(params, or: Empty::HASH).values_at(:a, :b)
588
762
 
589
- return Kind::None unless Kind.of.Numeric.instance?(a, b)
763
+ return Kind::None unless Kind.of.Numeric?(a, b)
590
764
 
591
765
  Kind::Some(a + b)
592
766
  end
@@ -721,7 +895,7 @@ def person_name(params)
721
895
  end
722
896
  ```
723
897
 
724
- > Note: You could use the `.as_optional` method (or it alias `as_maybe`) with any [type checker](https://github.com/serradura/kind/blob/b177fed9cc2b3347d63963a2a2fd99f989c51a9a/README.md#type-checkers).
898
+ > Note: You could use the `.as_optional` method (or it alias `.as_maybe`) with any [type checker](https://github.com/serradura/kind/blob/b177fed9cc2b3347d63963a2a2fd99f989c51a9a/README.md#type-checkers).
725
899
 
726
900
  Let's see another example using a collection and how the method `.as_optional` works when it receives no argument.
727
901
 
@@ -802,13 +976,13 @@ If you don't want to use a map to access the value, you could use the `#try` met
802
976
  ```ruby
803
977
  object = 'foo'
804
978
 
805
- p Kind::Maybe[object].try(:upcase) # "FOO"
979
+ Kind::Maybe[object].try(:upcase) # "FOO"
806
980
 
807
- p Kind::Maybe[{}].try(:fetch, :number, 0) # 0
981
+ Kind::Maybe[{}].try(:fetch, :number, 0) # 0
808
982
 
809
- p Kind::Maybe[{number: 1}].try(:fetch, :number) # 1
983
+ Kind::Maybe[{number: 1}].try(:fetch, :number) # 1
810
984
 
811
- p Kind::Maybe[object].try { |value| value.upcase } # "FOO"
985
+ Kind::Maybe[object].try { |value| value.upcase } # "FOO"
812
986
 
813
987
  #############
814
988
  # Nil value #
@@ -816,9 +990,9 @@ p Kind::Maybe[object].try { |value| value.upcase } # "FOO"
816
990
 
817
991
  object = nil
818
992
 
819
- p Kind::Maybe[object].try(:upcase) # nil
993
+ Kind::Maybe[object].try(:upcase) # nil
820
994
 
821
- p Kind::Maybe[object].try { |value| value.upcase } # nil
995
+ Kind::Maybe[object].try { |value| value.upcase } # nil
822
996
 
823
997
  #########################
824
998
  # Kind::Undefined value #
@@ -826,162 +1000,12 @@ p Kind::Maybe[object].try { |value| value.upcase } # nil
826
1000
 
827
1001
  object = Kind::Undefined
828
1002
 
829
- p Kind::Maybe[object].try(:upcase) # nil
830
-
831
- p Kind::Maybe[object].try { |value| value.upcase } # nil
832
- ```
833
-
834
- [⬆️ Back to Top](#table-of-contents-)
835
-
836
- ## Kind::Validator (ActiveModel::Validations)
837
-
838
- This module enables the capability to validate types via [`ActiveModel::Validations >= 3.2, < 6.1.0`](https://api.rubyonrails.org/classes/ActiveModel/Validations.html). e.g
839
-
840
- ```ruby
841
- class Person
842
- include ActiveModel::Validations
843
-
844
- attr_accessor :first_name, :last_name
845
-
846
- validates :first_name, :last_name, kind: String
847
- end
848
- ```
849
-
850
- And to make use of it, you will need to do an explicitly require. e.g:
851
-
852
- ```ruby
853
- # In some Gemfile
854
- gem 'kind', require: 'kind/active_model/validation'
855
-
856
- # In some .rb file
857
- require 'kind/active_model/validation'
858
- ```
859
-
860
- ### Usage
861
-
862
- **[Object#kind_of?](https://ruby-doc.org/core-2.6.4/Object.html#method-i-kind_of-3F)**
863
-
864
- ```ruby
865
- validates :name, kind: { of: String }
866
-
867
- # Use an array to verify if the attribute
868
- # is an instance of one of the classes/modules.
869
-
870
- validates :status, kind: { of: [String, Symbol]}
871
- ```
872
-
873
- **[Kind.is](#verifying-the-kind-of-some-classmodule)**
874
-
875
- ```ruby
876
- #
877
- # Verifying if the attribute value is the class or a subclass.
878
- #
879
- class Human; end
880
- class Person < Human; end
881
- class User < Human; end
882
-
883
- validates :human_kind, kind: { is: Human }
884
-
885
- #
886
- # Verifying if the attribute value is the module or if it is a class that includes the module
887
- #
888
- module Human; end
889
- class Person; include Human; end
890
- class User; include Human; end
891
-
892
- validates :human_kind, kind: { is: Human }
893
-
894
- #
895
- # Verifying if the attribute value is the module or if it is a module that extends the module
896
- #
897
- module Human; end
898
- module Person; extend Human; end
899
- module User; extend Human; end
900
-
901
- validates :human_kind, kind: { is: Human }
902
-
903
- # or use an array to verify if the attribute
904
- # is a kind of one those classes/modules.
905
-
906
- validates :human_kind, kind: { is: [Person, User] }
907
- ```
908
-
909
- **[Object#instance_of?](https://ruby-doc.org/core-2.6.4/Object.html#method-i-instance_of-3F)**
910
-
911
- ```ruby
912
- validates :name, kind: { instance_of: String }
913
-
914
- # or use an array to verify if the attribute
915
- # is an instance of one of the classes/modules.
916
-
917
- validates :name, kind: { instance_of: [String, Symbol] }
918
- ```
919
-
920
-
921
- **[Object#respond_to?](https://ruby-doc.org/core-2.6.4/Object.html#method-i-respond_to-3F)**
922
-
923
- ```ruby
924
- validates :handler, kind: { respond_to: :call }
925
- ```
926
-
927
- **Array.new.all? { |item| item.kind_of?(Class) }**
928
-
929
- ```ruby
930
- validates :account_types, kind: { array_of: String }
931
-
932
- # or use an array to verify if the attribute
933
- # is an instance of one of the classes
934
-
935
- validates :account_types, kind: { array_of: [String, Symbol] }
936
- ```
937
-
938
- **Array.new.all? { |item| expected_values.include?(item) }**
939
-
940
- ```ruby
941
- # Verifies if the attribute value
942
- # is an array with some or all the expected values.
943
-
944
- validates :account_types, kind: { array_with: ['foo', 'bar'] }
945
- ```
946
-
947
- #### Defining the default validation strategy
948
-
949
- By default, you can define the attribute type directly (without a hash). e.g.
950
-
951
- ```ruby
952
- validates :name, kind: String
953
- # or
954
- validates :name, kind: [String, Symbol]
955
- ```
956
-
957
- To changes this behavior you can set another strategy to validates the attributes types:
958
-
959
- ```ruby
960
- Kind::Validator.default_strategy = :instance_of
961
-
962
- # Tip: Create an initializer if you are in a Rails application.
963
- ```
964
-
965
- And these are the available options to define the default strategy:
966
- - `kind_of` *(default)*
967
- - `instance_of`
968
-
969
- #### Using the `allow_nil` and `strict` options
970
-
971
- You can use the `allow_nil` option with any of the kind validations. e.g.
1003
+ Kind::Maybe[object].try(:upcase) # nil
972
1004
 
973
- ```ruby
974
- validates :name, kind: String, allow_nil: true
1005
+ Kind::Maybe[object].try { |value| value.upcase } # nil
975
1006
  ```
976
1007
 
977
- And as any active model validation, kind validations works with the `strict: true`
978
- option and with the `validates!` method. e.g.
979
-
980
- ```ruby
981
- validates :first_name, kind: String, strict: true
982
- # or
983
- validates! :last_name, kind: String
984
- ```
1008
+ > **Note:** You can use the try method with the `Kind::Optional`.
985
1009
 
986
1010
  [⬆️ Back to Top](#table-of-contents-)
987
1011
 
@@ -18,9 +18,9 @@ module Kind
18
18
  private_constant :WRONG_NUMBER_OF_ARGUMENTS
19
19
 
20
20
  def self.is(expected = Undefined, object = Undefined)
21
- return Is if expected == Undefined && object == Undefined
21
+ return Is if Undefined == expected && Undefined == object
22
22
 
23
- return Kind::Is.(expected, object) if object != Undefined
23
+ return Kind::Is.(expected, object) if Undefined != object
24
24
 
25
25
  raise ArgumentError, WRONG_NUMBER_OF_ARGUMENTS
26
26
  end
@@ -36,9 +36,9 @@ module Kind
36
36
  __checkers__
37
37
 
38
38
  def self.of(kind = Undefined, object = Undefined)
39
- return Of if kind == Undefined && object == Undefined
39
+ return Of if Undefined == kind && Undefined == object
40
40
 
41
- return Kind::Of.(kind, object) if object != Undefined
41
+ return Kind::Of.(kind, object) if Undefined != object
42
42
 
43
43
  __checkers__[kind] ||= begin
44
44
  kind_name = kind.name
@@ -65,7 +65,7 @@ module Kind
65
65
  end
66
66
 
67
67
  def self.Module(value)
68
- value == ::Module || (value.is_a?(::Module) && !self.Class(value))
68
+ ::Module == value || (value.is_a?(::Module) && !self.Class(value))
69
69
  end
70
70
 
71
71
  def self.Boolean(value)
@@ -81,7 +81,7 @@ module Kind
81
81
  # -- Class
82
82
 
83
83
  def self.Class(object = Undefined)
84
- return Class if object == Undefined
84
+ return Class if Undefined == object
85
85
 
86
86
  self.call(::Class, object)
87
87
  end
@@ -103,7 +103,7 @@ module Kind
103
103
  # -- Module
104
104
 
105
105
  def self.Module(object = Undefined)
106
- return Module if object == Undefined
106
+ return Module if Undefined == object
107
107
 
108
108
  self.call(::Module, object)
109
109
  end
@@ -112,7 +112,7 @@ module Kind
112
112
  extend Checkable
113
113
 
114
114
  def self.__kind_undefined(value)
115
- __kind_error(Kind::Undefined) if value == Kind::Undefined
115
+ __kind_error(Kind::Undefined) if Kind::Undefined == value
116
116
 
117
117
  yield
118
118
  end
@@ -137,7 +137,7 @@ module Kind
137
137
  if ::Kind::Maybe::Value.none?(default)
138
138
  __kind_undefined(value) { __kind_of(value) }
139
139
  else
140
- return value if value != Kind::Undefined && instance?(value)
140
+ return value if Kind::Undefined != value && instance?(value)
141
141
 
142
142
  __kind_undefined(default) { __kind_of(default) }
143
143
  end
@@ -155,7 +155,7 @@ module Kind
155
155
  def self.Boolean(object = Undefined, options = Empty::HASH)
156
156
  default = options[:or]
157
157
 
158
- return Kind::Of::Boolean if object == Undefined && default.nil?
158
+ return Kind::Of::Boolean if Undefined == object && default.nil?
159
159
 
160
160
  bool = object.nil? ? default : object
161
161
 
@@ -177,14 +177,14 @@ module Kind
177
177
  if ::Kind::Maybe::Value.none?(default)
178
178
  __kind_undefined(value) { Kind::Of::Boolean(value) }
179
179
  else
180
- return value if value != Kind::Undefined && instance?(value)
180
+ return value if Kind::Undefined != value && instance?(value)
181
181
 
182
182
  __kind_undefined(default) { Kind::Of::Boolean(default) }
183
183
  end
184
184
  end
185
185
 
186
186
  def self.__kind_undefined(value)
187
- if value == Kind::Undefined
187
+ if Kind::Undefined == value
188
188
  raise Kind::Error.new('Boolean'.freeze, Kind::Undefined)
189
189
  else
190
190
  yield
@@ -210,7 +210,7 @@ module Kind
210
210
  def self.Lambda(object = Undefined, options = Empty::HASH)
211
211
  default = options[:or]
212
212
 
213
- return Kind::Of::Lambda if object == Undefined && default.nil?
213
+ return Kind::Of::Lambda if Undefined == object && default.nil?
214
214
 
215
215
  func = object || default
216
216
 
@@ -230,14 +230,14 @@ module Kind
230
230
  if ::Kind::Maybe::Value.none?(default)
231
231
  __kind_undefined(value) { Kind::Of::Lambda(value) }
232
232
  else
233
- return value if value != Kind::Undefined && instance?(value)
233
+ return value if Kind::Undefined != value && instance?(value)
234
234
 
235
235
  __kind_undefined(default) { Kind::Of::Lambda(default) }
236
236
  end
237
237
  end
238
238
 
239
239
  def self.__kind_undefined(value)
240
- if value == Kind::Undefined
240
+ if Kind::Undefined == value
241
241
  raise Kind::Error.new('Lambda'.freeze, Kind::Undefined)
242
242
  else
243
243
  yield
@@ -258,7 +258,7 @@ module Kind
258
258
  def self.Callable(object = Undefined, options = Empty::HASH)
259
259
  default = options[:or]
260
260
 
261
- return Kind::Of::Callable if object == Undefined && default.nil?
261
+ return Kind::Of::Callable if Undefined == object && default.nil?
262
262
 
263
263
  callable = object || default
264
264
 
@@ -282,14 +282,14 @@ module Kind
282
282
  if ::Kind::Maybe::Value.none?(default)
283
283
  __kind_undefined(value) { Kind::Of::Callable(value) }
284
284
  else
285
- return value if value != Kind::Undefined && instance?(value)
285
+ return value if Kind::Undefined != value && instance?(value)
286
286
 
287
287
  __kind_undefined(default) { Kind::Of::Callable(default) }
288
288
  end
289
289
  end
290
290
 
291
291
  def self.__kind_undefined(value)
292
- if value == Kind::Undefined
292
+ if Kind::Undefined == value
293
293
  raise Kind::Error.new('Callable'.freeze, Kind::Undefined)
294
294
  else
295
295
  yield
@@ -53,12 +53,12 @@ class KindValidator < ActiveModel::EachValidator
53
53
  def kind_is_not(expected, value)
54
54
  case expected
55
55
  when Class
56
- return if Kind.of.Class(value) == expected || value < expected
56
+ return if expected == Kind.of.Class(value) || value < expected
57
57
 
58
58
  "must be the class or a subclass of `#{expected.name}`"
59
59
  when Module
60
60
  return if value.kind_of?(Class) && value <= expected
61
- return if Kind.of.Module(value) == expected || value.kind_of?(expected)
61
+ return if expected == Kind.of.Module(value) || value.kind_of?(expected)
62
62
 
63
63
  "must include the `#{expected.name}` module"
64
64
  else
@@ -11,7 +11,7 @@ module Kind
11
11
 
12
12
  return Kind::Of.(__kind, value) if ::Kind::Maybe::Value.none?(default)
13
13
 
14
- value != Kind::Undefined && instance?(value) ? value : Kind::Of.(__kind, default)
14
+ Kind::Undefined != value && instance?(value) ? value : Kind::Of.(__kind, default)
15
15
  end
16
16
 
17
17
  def [](value, options = options = Empty::HASH)
@@ -38,7 +38,7 @@ module Kind
38
38
  return args.all? { |object| __is_instance__(object) } if args.size > 1
39
39
 
40
40
  arg = args[0]
41
- arg == Kind::Undefined ? is_instance_to_proc : __is_instance__(arg)
41
+ Kind::Undefined == arg ? is_instance_to_proc : __is_instance__(arg)
42
42
  end
43
43
 
44
44
  def or_nil(value)
@@ -59,7 +59,7 @@ module Kind
59
59
  end
60
60
 
61
61
  def as_maybe(value = Kind::Undefined)
62
- return __as_maybe__(value) if value != Kind::Undefined
62
+ return __as_maybe__(value) if Kind::Undefined != value
63
63
 
64
64
  as_maybe_to_proc
65
65
  end
@@ -7,7 +7,7 @@ module Kind
7
7
  private_constant :UNDEFINED_OBJECT
8
8
 
9
9
  def initialize(arg, object = UNDEFINED_OBJECT)
10
- if object == UNDEFINED_OBJECT
10
+ if UNDEFINED_OBJECT == object
11
11
  # Will be used when the exception was raised with a message. e.g:
12
12
  # raise Kind::Error, "some message"
13
13
  super(arg)
@@ -4,7 +4,7 @@ module Kind
4
4
  module Maybe
5
5
  module Value
6
6
  def self.none?(value)
7
- value == nil || value == Undefined
7
+ value.nil? || Undefined == value
8
8
  end
9
9
 
10
10
  def self.some?(value)
@@ -42,9 +42,9 @@ module Kind
42
42
  INVALID_DEFAULT_ARG = 'the default value must be defined as an argument or block'.freeze
43
43
 
44
44
  def value_or(default = Undefined, &block)
45
- raise ArgumentError, INVALID_DEFAULT_ARG if default == Undefined && !block
45
+ raise ArgumentError, INVALID_DEFAULT_ARG if Undefined == default && !block
46
46
 
47
- default != Undefined ? default : block.call
47
+ Undefined != default ? default : block.call
48
48
  end
49
49
 
50
50
  def none?; true; end
@@ -56,7 +56,7 @@ module Kind
56
56
  alias_method :then, :map
57
57
 
58
58
  def try(method_name = Undefined, &block)
59
- Kind.of.Symbol(method_name) if method_name != Undefined
59
+ Kind.of.Symbol(method_name) if Undefined != method_name
60
60
 
61
61
  nil
62
62
  end
@@ -80,8 +80,8 @@ module Kind
80
80
  result = fn.call(@value)
81
81
 
82
82
  return result if Maybe::None === result
83
- return NONE_WITH_NIL_VALUE if result == nil
84
- return NONE_WITH_UNDEFINED_VALUE if result == Undefined
83
+ return NONE_WITH_NIL_VALUE if result.nil?
84
+ return NONE_WITH_UNDEFINED_VALUE if Undefined == result
85
85
 
86
86
  Some.new(result)
87
87
  end
@@ -89,7 +89,7 @@ module Kind
89
89
  alias_method :then, :map
90
90
 
91
91
  def try(method_name = Undefined, *args, &block)
92
- fn = method_name == Undefined ? block : Kind.of.Symbol(method_name).to_proc
92
+ fn = Undefined == method_name ? block : Kind.of.Symbol(method_name).to_proc
93
93
 
94
94
  result = args.empty? ? fn.call(value) : fn.call(*args.unshift(value))
95
95
 
@@ -10,7 +10,7 @@ module Kind
10
10
  def self.%{method_name}(object = Undefined, options = Empty::HASH)
11
11
  default = options[:or]
12
12
 
13
- return Kind::Of::%{kind_name} if object == Undefined && default.nil?
13
+ return Kind::Of::%{kind_name} if Undefined == object && default.nil?
14
14
 
15
15
  is_instance = Kind::Of::%{kind_name}.__is_instance__(object)
16
16
 
@@ -28,7 +28,7 @@ module Kind
28
28
 
29
29
  KIND_IS = <<-RUBY
30
30
  def self.%{method_name}(value = Undefined)
31
- return Kind::Is::%{kind_name} if value == Undefined
31
+ return Kind::Is::%{kind_name} if Undefined == value
32
32
 
33
33
  Kind::Is.__call__(::%{kind_name_to_check}, value)
34
34
  end
@@ -19,7 +19,7 @@ module Kind
19
19
  end
20
20
 
21
21
  def undefined.default(value, default)
22
- return self if value != self
22
+ return self if self != value
23
23
 
24
24
  default.respond_to?(:call) ? default.call : default
25
25
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Kind
4
- VERSION = '2.1.0'
4
+ VERSION = '2.2.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: 2.1.0
4
+ version: 2.2.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-05-12 00:00:00.000000000 Z
11
+ date: 2020-06-23 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A simple type system (at runtime) for Ruby - free of dependencies.
14
14
  email: