primalize 0.3.2 → 0.3.3
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/primalize/single.rb +54 -7
- data/lib/primalize/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3e7e19ac6dc1dae6887c09d7c6a3388a29532895
|
4
|
+
data.tar.gz: 497da52eccc3c157d0ca413b8cf5ce132a2e5e4d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 29b4efb1d23fd3ccc909b133bd8e18c25e46e770bb0104a5b5e7fab414ebc8545d77b7f7b142513ee15f1823ea3158301f5221c1ab015ec05221e8bba777d567
|
7
|
+
data.tar.gz: 62a1dd9738ccacbd45b723a1b56e360db4a73fd7e3cb4837c78a5de519c785585ff1d14a29c2e00a1d29743f42e1e740efb6e638efa7d4872fd5b92d47e518f1
|
data/lib/primalize/single.rb
CHANGED
@@ -208,8 +208,6 @@ module Primalize
|
|
208
208
|
end
|
209
209
|
|
210
210
|
class Array
|
211
|
-
include Type
|
212
|
-
|
213
211
|
def initialize types, &coercion
|
214
212
|
@types = types
|
215
213
|
@coercion = coercion
|
@@ -222,6 +220,25 @@ module Primalize
|
|
222
220
|
end
|
223
221
|
end
|
224
222
|
|
223
|
+
def coerce array
|
224
|
+
if @coercion
|
225
|
+
return @coercion.call(array)
|
226
|
+
end
|
227
|
+
|
228
|
+
if array.respond_to? :map
|
229
|
+
array.map do |item|
|
230
|
+
type = @types.find { |type| type === item }
|
231
|
+
if type.respond_to? :coerce
|
232
|
+
type.coerce(item)
|
233
|
+
else
|
234
|
+
item
|
235
|
+
end
|
236
|
+
end
|
237
|
+
else
|
238
|
+
array
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
225
242
|
def inspect
|
226
243
|
"array(#{@types.map(&:inspect).join(', ')})"
|
227
244
|
end
|
@@ -249,8 +266,6 @@ module Primalize
|
|
249
266
|
end
|
250
267
|
|
251
268
|
class Object
|
252
|
-
include Type
|
253
|
-
|
254
269
|
def initialize types, &coercion
|
255
270
|
@types = types
|
256
271
|
@coercion = coercion
|
@@ -264,6 +279,26 @@ module Primalize
|
|
264
279
|
end
|
265
280
|
end
|
266
281
|
|
282
|
+
def coerce hash
|
283
|
+
if @coercion
|
284
|
+
return @coercion.call(hash)
|
285
|
+
end
|
286
|
+
|
287
|
+
if hash.respond_to? :map
|
288
|
+
hash.each_with_object({}) do |(key, value), h|
|
289
|
+
_, type = @types.find { |_, type| type === value }
|
290
|
+
|
291
|
+
h[key] = if type.respond_to? :coerce
|
292
|
+
type.coerce(value)
|
293
|
+
else
|
294
|
+
value
|
295
|
+
end
|
296
|
+
end
|
297
|
+
else
|
298
|
+
hash
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
267
302
|
def inspect
|
268
303
|
"object(#{@types.map { |attr, type| "#{attr}: #{type.inspect}" }.join(', ')})"
|
269
304
|
end
|
@@ -295,7 +330,8 @@ module Primalize
|
|
295
330
|
@coercion = proc do |obj|
|
296
331
|
# FIXME: this is dumb
|
297
332
|
begin
|
298
|
-
|
333
|
+
coerced = (coercion || DEFAULT_COERCION).call(obj)
|
334
|
+
primalizer.new(coerced).call
|
299
335
|
rescue ArgumentError => e
|
300
336
|
raise TypeError.new(e)
|
301
337
|
end
|
@@ -329,8 +365,6 @@ module Primalize
|
|
329
365
|
end
|
330
366
|
|
331
367
|
class Any
|
332
|
-
include Type
|
333
|
-
|
334
368
|
def initialize types, &coercion
|
335
369
|
@types = types
|
336
370
|
@coercion = coercion
|
@@ -340,6 +374,19 @@ module Primalize
|
|
340
374
|
@types.empty? || @types.any? { |type| type === value }
|
341
375
|
end
|
342
376
|
|
377
|
+
def coerce value
|
378
|
+
if @coercion
|
379
|
+
return @coercion.call(value)
|
380
|
+
end
|
381
|
+
|
382
|
+
type = @types.find { |type| type === value }
|
383
|
+
if type.respond_to? :coerce
|
384
|
+
type.coerce(value)
|
385
|
+
else
|
386
|
+
value
|
387
|
+
end
|
388
|
+
end
|
389
|
+
|
343
390
|
def inspect
|
344
391
|
params = "(#{@types.map(&:inspect).join(', ')})"
|
345
392
|
"any#{@types.empty? ? nil : params}"
|
data/lib/primalize/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: primalize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jamie Gaskins
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|