shape_of 0.0.4 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/shape_of.rb +14 -19
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 28b5bdad75322342f66037bc3780c36cc38dcbd932e6daba11480e372cd9bc7d
4
- data.tar.gz: c753cadb3a00e5656abf762dc2c0f41dfcc8c604bda53aebeab30c62e231792f
3
+ metadata.gz: 200845fd006ae0119d06f0b1f3f8b7b908a7c3d8f8c16ebe4856bcb905af5763
4
+ data.tar.gz: f046ee908eb3715e8028484dac72fa0fa411f24496ad3d71d8c984cf1a33fd7b
5
5
  SHA512:
6
- metadata.gz: ace4588260223b123c47a17b6f096fb3fdb5d30f84f68ecb53bd1aca7020a1cde2fe1805c05dad248fe544bcbb0cf42e77b7c5473313f2b01c096306a0e22dad
7
- data.tar.gz: 4ac6be6efef005e115a44aa7f7a6ee32bc69a058ec13e0336b80284e05e711628f68190ecb9b81fefe181b779f3da20f72c8b3bf55d01a05768b72ed7de754c6
6
+ metadata.gz: f9d8e53319be78d4f3cf0aa6cc94f19f89c25decc737fecd1d16ce6e4666f35b80bca6ee9aff753ada64e85aa9d8c829cb4af06d67b33c114033c6f57838258a
7
+ data.tar.gz: d70f5abeb46bd372329189755f901f5d56fa0e9d7d07d3a6724404719844c08ae4792042e6eaf417051e0bf33183f66f23fe29369003eefc0d6f7879157f9756
data/lib/shape_of.rb CHANGED
@@ -89,11 +89,11 @@ module ShapeOf
89
89
  module Assertions
90
90
  def assert_shape_of(object, shape)
91
91
  if shape.respond_to? :shape_of?
92
- assert shape.shape_of? object
92
+ assert_operator shape, :shape_of?, object
93
93
  elsif shape.instance_of? ::Array
94
- assert Array[shape.first].shape_of? object
94
+ assert_operator Array[shape.first], :shape_of?, object
95
95
  elsif shape.instance_of? ::Hash
96
- assert Hash[shape].shape_of? object
96
+ assert_operator Hash[shape], :shape_of?, object
97
97
  else
98
98
  raise TypeError, "Expected #{Shape.inspect}, an #{::Array.inspect}, or a #{::Hash.inspect} as the shape"
99
99
  end
@@ -101,11 +101,11 @@ module ShapeOf
101
101
 
102
102
  def refute_shape_of(object, shape)
103
103
  if shape.respond_to? :shape_of?
104
- refute shape.shape_of? object
104
+ refute_operator shape, :shape_of?, object
105
105
  elsif shape.instance_of? ::Array
106
- refute Array[shape.first].shape_of? object
106
+ refute_operator Array[shape.first], :shape_of?, object
107
107
  elsif shape.instance_of? ::Hash
108
- refute Hash[shape].shape_of? object
108
+ refute_operator Hash[shape], :shape_of?, object
109
109
  else
110
110
  raise TypeError, "Expected #{Shape.inspect}, an #{::Array.inspect}, or a #{::Hash.inspect} as the shape"
111
111
  end
@@ -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 Hash, are the core components of this module.
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.first].shape_of? elem
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: 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.
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].first].shape_of? elem
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[shape1, shape2, ...] denotes that it can be of one the provided shapes.
245
+ # Union[Shape1, Shape2, ...] denotes that it can be of one the provided shapes
247
246
  class Union < Shape
248
247
  def self.shape_of?(object)
249
248
  false
@@ -285,8 +284,7 @@ module ShapeOf
285
284
  end
286
285
  end
287
286
 
288
- # Optional[shape] denotes that the usual type is a shape, but is optional
289
- # (meaning if it is nil or the key is not present in the Hash, it's still true)
287
+ # 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)
290
288
  class Optional < Shape
291
289
  def self.[](shape)
292
290
  raise TypeError, "Shape cannot be nil" if shape.nil? || shape == NilClass
@@ -305,14 +303,13 @@ module ShapeOf
305
303
  end
306
304
  end
307
305
 
308
- # Anything matches unless key does not exist in the Hash.
309
306
  class Any < Shape
310
307
  def self.shape_of?(object)
311
308
  true
312
309
  end
313
310
  end
314
311
 
315
- # Only passes when the key does not exist in the Hash.
312
+ # Nothing only passes when the key does not exist in the Hash.
316
313
  class Nothing < Shape
317
314
  def self.shape_of?(object)
318
315
  false
@@ -323,12 +320,10 @@ module ShapeOf
323
320
  end
324
321
  end
325
322
 
326
- # Union[Integer, Float, Rational, Complex]
327
323
  Numeric = Union[Integer, Float, Rational, Complex].tap do |this|
328
324
  this.instance_variable_set(:@class_name, this.name.sub(/Union.*/, 'Numeric'))
329
325
  end
330
326
 
331
- # Union[TrueClass, FalseClass]
332
327
  Boolean = Union[TrueClass, FalseClass].tap do |this|
333
328
  this.instance_variable_set(:@class_name, this.name.sub(/Union.*/, 'Boolean'))
334
329
  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: 0.0.4
4
+ version: 0.1.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-28 00:00:00.000000000 Z
11
+ date: 2021-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest