shape_of 1.2.0 → 2.0.2

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 (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/shape_of.rb +20 -24
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6e28929cd043b2227c3fcfc7ec697afeebdcd77aa4fe82f3239c0c70518a653b
4
- data.tar.gz: ea1433d60b53e1cf9793e5824a02d08d990d079ab67d62684dbf5a9a8278227c
3
+ metadata.gz: f227bdcd2eb6f6161a565d653a11510cdbaeb9f7dca33d7e99ed704f574412b1
4
+ data.tar.gz: 177e743c8a22d03f56d7609ae478bd4ba5febd9b4da66e63b91ecab6a5119d11
5
5
  SHA512:
6
- metadata.gz: 1f4a6d76316870ae8945faa6de5797647c9aa9cbe259017b7acaf773a75c6100dfea4770d1f290dd2e8abcd37293111b74a6beb60767db6814a4ffab7714fec5
7
- data.tar.gz: 8dae349aab3980850618761687ad7b3e61701dd9e29ebdc6880757bb744dd5f708e5a63d931de5121777e619054c7cdddfd8931416cd40a5960448bd89c3e60e
6
+ metadata.gz: a06688a7273bc87e05a96c4d3efedffc4281dd29fdb005c07477be380e17f655c9c17e7d2947900d87989fb45ee2171e226194531f51d2487dd47df082e3e69b
7
+ data.tar.gz: 5b633d82d85b04fd41463d5a43dbda8da587a458bb77a50e02c8694202e26bc0a2eefb395924bd9d5ac50bdeca821ac66924aa0793f57f34afb1c50b358d705e
data/lib/shape_of.rb CHANGED
@@ -127,9 +127,9 @@ module ShapeOf
127
127
  end
128
128
  end
129
129
 
130
- # Array[Shape] denotes that it is an array of shapes.
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 Array, are the core components of this module.
132
+ # This, along with Hash, 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].shape_of? elem
164
+ Array[@shape.first].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,7 +175,8 @@ module ShapeOf
175
175
  end
176
176
  end
177
177
 
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.
178
+ # Hash[key: shape, ...] denotes it is a hash of shapes with a very specific structure.
179
+ # Hash (without square brackets) is just a hash with any shape.
179
180
  # This, along with Array, are the core components of this module.
180
181
  # Note that the keys are converted to strings for comparison for both the shape and object provided.
181
182
  class Hash < Shape
@@ -222,7 +223,7 @@ module ShapeOf
222
223
  if @shape[key].respond_to? :shape_of?
223
224
  @shape[key].shape_of? elem
224
225
  elsif @shape[key].is_a? ::Array
225
- Array[@shape[key]].shape_of? elem
226
+ Array[@shape[key].first].shape_of? elem
226
227
  elsif @shape[key].is_a? ::Hash
227
228
  Hash[@shape[key]].shape_of? elem
228
229
  elsif @shape[key].is_a? Class
@@ -242,7 +243,7 @@ module ShapeOf
242
243
  end
243
244
  end
244
245
 
245
- # Union[Shape1, Shape2, ...] denotes that it can be of one the provided shapes
246
+ # Union[shape1, shape2, ...] denotes that it can be of one the provided shapes.
246
247
  class Union < Shape
247
248
  def self.[](*shapes)
248
249
  Class.new(self) do
@@ -280,7 +281,8 @@ module ShapeOf
280
281
  end
281
282
  end
282
283
 
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)
284
+ # Optional[shape] denotes that the usual type is a shape, but is optional
285
+ # (meaning if it is nil or the key is not present in the Hash, it's still true)
284
286
  class Optional < Shape
285
287
  def self.[](shape)
286
288
  raise TypeError, "Shape cannot be nil" if shape.nil? || shape == NilClass
@@ -299,13 +301,14 @@ module ShapeOf
299
301
  end
300
302
  end
301
303
 
304
+ # Anything matches unless key does not exist in the Hash.
302
305
  class Any < Shape
303
306
  def self.shape_of?(object)
304
307
  true
305
308
  end
306
309
  end
307
310
 
308
- # Nothing only passes when the key does not exist in the Hash.
311
+ # Only passes when the key does not exist in the Hash.
309
312
  class Nothing < Shape
310
313
  def self.shape_of?(object)
311
314
  false
@@ -316,15 +319,12 @@ module ShapeOf
316
319
  end
317
320
  end
318
321
 
319
- class Regexp < Shape
320
- @internal_class = ::Regexp
321
-
322
- def self.shape_of?(object)
323
- object.instance_of? @internal_class
324
- end
325
-
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
+ class Pattern < Shape
326
326
  def self.[](shape)
327
- raise TypeError, "Shape must be #{::Regexp.inspect}, was #{shape.inspect}" unless shape.instance_of? ::Regexp
327
+ raise TypeError, "Shape must be #{Regexp.inspect}, was #{shape.inspect}" unless shape.instance_of? Regexp
328
328
 
329
329
  Class.new(self) do
330
330
  @class_name = "#{superclass.name}[#{shape.inspect}]"
@@ -343,24 +343,20 @@ module ShapeOf
343
343
  end
344
344
 
345
345
  def self.shape_of?(object)
346
- unless object.instance_of?(::Regexp) || object.instance_of?(String)
347
- raise TypeError, "expected #{::Regexp.inspect} or #{String.inspect}, was instead #{object.inspect}"
348
- end
346
+ raise TypeError, "expected #{String.inspect}, was instead #{object.inspect}" unless object.instance_of?(String)
349
347
 
350
- if object.instance_of?(::Regexp)
351
- @shape == object
352
- else # string
353
- @shape.match?(object)
354
- end
348
+ @shape.match?(object)
355
349
  end
356
350
  end
357
351
  end
358
352
  end
359
353
 
354
+ # Union[Integer, Float, Rational, Complex]
360
355
  Numeric = Union[Integer, Float, Rational, Complex].tap do |this|
361
356
  this.instance_variable_set(:@class_name, this.name.sub(/Union.*/, 'Numeric'))
362
357
  end
363
358
 
359
+ # Union[TrueClass, FalseClass]
364
360
  Boolean = Union[TrueClass, FalseClass].tap do |this|
365
361
  this.instance_variable_set(:@class_name, this.name.sub(/Union.*/, 'Boolean'))
366
362
  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: 1.2.0
4
+ version: 2.0.2
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-17 00:00:00.000000000 Z
11
+ date: 2021-05-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest