shape_of 1.2.2 → 2.0.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/lib/shape_of.rb +8 -16
- 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: 9934786c810465f0edc75a35faa47a305da950a63c337ec1c33b7184c1dd103e
|
4
|
+
data.tar.gz: bf6c05010803284ccb2a6be09d410d903d3693e53ec006be85089a1c0522257c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 19c075c5e72d649267aab15fcdf3872a104ac8ac2534e95159f121ca15cdd2add334f0010f53bd82b64c5ce09b1910717e04e7a6374febb86b143936d05afa4d
|
7
|
+
data.tar.gz: 4166c74b3c7df3ae858b2edeb1239c306e05479c96a0536b08815b279c82209f563f2f469a7ab6d1254c12f249d6014d484f12077e4a6471aa223ef0a15d2578
|
data/lib/shape_of.rb
CHANGED
@@ -127,9 +127,9 @@ module ShapeOf
|
|
127
127
|
end
|
128
128
|
end
|
129
129
|
|
130
|
-
# Array[
|
130
|
+
# Array[Shape] denotes that it is an array of shapes.
|
131
131
|
# It checks every element in the array and verifies that the element is in the correct shape.
|
132
|
-
# This, along with
|
132
|
+
# This, along with Array, are the core components of this module.
|
133
133
|
# Note that a ShapeOf::Array[Integer].shape_of?([]) will pass because it is vacuously true for an empty array.
|
134
134
|
class Array < Shape
|
135
135
|
@internal_class = ::Array
|
@@ -161,7 +161,7 @@ module ShapeOf
|
|
161
161
|
if @shape.respond_to? :shape_of?
|
162
162
|
@shape.shape_of? elem
|
163
163
|
elsif @shape.is_a? ::Array
|
164
|
-
Array[@shape
|
164
|
+
Array[@shape].shape_of? elem
|
165
165
|
elsif @shape.is_a? ::Hash
|
166
166
|
Hash[@shape].shape_of? elem
|
167
167
|
elsif @shape.is_a? Class
|
@@ -175,8 +175,7 @@ module ShapeOf
|
|
175
175
|
end
|
176
176
|
end
|
177
177
|
|
178
|
-
# Hash[key:
|
179
|
-
# Hash (without square brackets) is just a hash with any shape.
|
178
|
+
# Hash[key: Shape, ...] denotes it is a hash of shapes with a very specific structure. Hash (without square brackets) is just a hash with any shape.
|
180
179
|
# This, along with Array, are the core components of this module.
|
181
180
|
# Note that the keys are converted to strings for comparison for both the shape and object provided.
|
182
181
|
class Hash < Shape
|
@@ -223,7 +222,7 @@ module ShapeOf
|
|
223
222
|
if @shape[key].respond_to? :shape_of?
|
224
223
|
@shape[key].shape_of? elem
|
225
224
|
elsif @shape[key].is_a? ::Array
|
226
|
-
Array[@shape[key]
|
225
|
+
Array[@shape[key]].shape_of? elem
|
227
226
|
elsif @shape[key].is_a? ::Hash
|
228
227
|
Hash[@shape[key]].shape_of? elem
|
229
228
|
elsif @shape[key].is_a? Class
|
@@ -243,7 +242,7 @@ module ShapeOf
|
|
243
242
|
end
|
244
243
|
end
|
245
244
|
|
246
|
-
# Union[
|
245
|
+
# Union[Shape1, Shape2, ...] denotes that it can be of one the provided shapes
|
247
246
|
class Union < Shape
|
248
247
|
def self.[](*shapes)
|
249
248
|
Class.new(self) do
|
@@ -281,8 +280,7 @@ module ShapeOf
|
|
281
280
|
end
|
282
281
|
end
|
283
282
|
|
284
|
-
# Optional[
|
285
|
-
# (meaning if it is nil or the key is not present in the Hash, it's still true)
|
283
|
+
# Optional[Shape] denotes that the usual type is a Shape, but is optional (meaning if it is nil or the key is not present in the Hash, it's still true)
|
286
284
|
class Optional < Shape
|
287
285
|
def self.[](shape)
|
288
286
|
raise TypeError, "Shape cannot be nil" if shape.nil? || shape == NilClass
|
@@ -301,14 +299,13 @@ module ShapeOf
|
|
301
299
|
end
|
302
300
|
end
|
303
301
|
|
304
|
-
# Anything matches unless key does not exist in the Hash.
|
305
302
|
class Any < Shape
|
306
303
|
def self.shape_of?(object)
|
307
304
|
true
|
308
305
|
end
|
309
306
|
end
|
310
307
|
|
311
|
-
#
|
308
|
+
# Nothing only passes when the key does not exist in the Hash.
|
312
309
|
class Nothing < Shape
|
313
310
|
def self.shape_of?(object)
|
314
311
|
false
|
@@ -319,9 +316,6 @@ module ShapeOf
|
|
319
316
|
end
|
320
317
|
end
|
321
318
|
|
322
|
-
# Matches a Regexp against a String using Regexp#match?.
|
323
|
-
# Pretty much a wrapper around Regexp because a Regexp instance will be tested for equality
|
324
|
-
# in the ShapeOf::Hash and ShapeOf::Array since it's not a class.
|
325
319
|
class Pattern < Shape
|
326
320
|
def self.[](shape)
|
327
321
|
raise TypeError, "Shape must be #{Regexp.inspect}, was #{shape.inspect}" unless shape.instance_of? Regexp
|
@@ -351,12 +345,10 @@ module ShapeOf
|
|
351
345
|
end
|
352
346
|
end
|
353
347
|
|
354
|
-
# Union[Integer, Float, Rational, Complex]
|
355
348
|
Numeric = Union[Integer, Float, Rational, Complex].tap do |this|
|
356
349
|
this.instance_variable_set(:@class_name, this.name.sub(/Union.*/, 'Numeric'))
|
357
350
|
end
|
358
351
|
|
359
|
-
# Union[TrueClass, FalseClass]
|
360
352
|
Boolean = Union[TrueClass, FalseClass].tap do |this|
|
361
353
|
this.instance_variable_set(:@class_name, this.name.sub(/Union.*/, 'Boolean'))
|
362
354
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shape_of
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Isom
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-05-
|
11
|
+
date: 2021-05-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|