primalize 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|