tchae 0.0.1 → 0.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.
- checksums.yaml +4 -4
- data/lib/tchae/core.rb +94 -19
- data/lib/tchae/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d2ef331e75a9929d29f3348d5fb23316964a25773623eb2d703e802d623e0d92
|
4
|
+
data.tar.gz: 34c124e0e86a1400e895370f89cd94cdf200ad9b9a54d75b386fb841ff2e4675
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 23ba34c2410bce14ed5bd1e334057a00bfff4376b6c005a84c56056ad7177c7a2f342db3d71e5dee266ae552ef20c833d37f36e69a77af5f1f19ab00d3b69077
|
7
|
+
data.tar.gz: 94512da6a9a16bbafb6ac0be7855e32be3d3ce3bb6eebdcaf345cce820e26f39dd6a828f4ea57a8e4b0dd4d96244401b4b5a8e3bcc16deb50e74016cf001dcb7
|
data/lib/tchae/core.rb
CHANGED
@@ -5,7 +5,6 @@ class Object
|
|
5
5
|
end
|
6
6
|
|
7
7
|
module Tchae
|
8
|
-
EMPTY_ARRAY = [].freeze
|
9
8
|
|
10
9
|
def self.Wrapper(handling = ::Tchae::Handling::RAISE)
|
11
10
|
MethodValidator.new(handling)
|
@@ -14,8 +13,8 @@ module Tchae
|
|
14
13
|
# wrap method with validation, and on invalid,
|
15
14
|
# exit with control flow and retun a wrapped error object
|
16
15
|
# on success return a wrapped return object
|
17
|
-
def self.
|
18
|
-
|
16
|
+
def self.do_validation_return_wrapper(obj, wrapper, tea_methodsymb,
|
17
|
+
proclmbda, params, kwparms)
|
19
18
|
unless params.empty?
|
20
19
|
if (err = wrapper.args.positional.valid_or_return_error(params))
|
21
20
|
return Return(nil, err)
|
@@ -27,6 +26,35 @@ module Tchae
|
|
27
26
|
end
|
28
27
|
end
|
29
28
|
|
29
|
+
unchecked_result = if proclmbda.arity.zero?
|
30
|
+
obj.__send__(tea_methodsymb)
|
31
|
+
elsif kwparms.empty?
|
32
|
+
obj.__send__(tea_methodsymb, *params)
|
33
|
+
elsif params.empty?
|
34
|
+
obj.__send__(tea_methodsymb, **kwparms)
|
35
|
+
else
|
36
|
+
obj.__send__(tea_methodsymb, *params, **kwparms)
|
37
|
+
end
|
38
|
+
|
39
|
+
wrapper.result.return_wrapper unchecked_result
|
40
|
+
end
|
41
|
+
|
42
|
+
# wrap method with validation, and on invalid,
|
43
|
+
# exit with control flow and retun a error object
|
44
|
+
# on success return the valid result
|
45
|
+
def self.do_validation_result_or_error(obj, wrapper, tea_methodsymb,
|
46
|
+
proclmbda, params, kwparms)
|
47
|
+
unless params.empty?
|
48
|
+
if (err = wrapper.args.positional.valid_or_return_error(params))
|
49
|
+
return err
|
50
|
+
end
|
51
|
+
end
|
52
|
+
unless kwparms.empty?
|
53
|
+
if (err = wrapper.args.keyword.valid_or_return_error(kwparms))
|
54
|
+
return err
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
30
58
|
unchecked_result = if proclmbda.arity.zero?
|
31
59
|
obj.__send__(tea_methodsymb)
|
32
60
|
elsif kwparms.empty?
|
@@ -43,7 +71,7 @@ module Tchae
|
|
43
71
|
# wrap method with validation, and on invalid,
|
44
72
|
# exit by raising exception
|
45
73
|
|
46
|
-
def self.
|
74
|
+
def self.do_validation_raise(obj, wrapper, tea_methodsymb,
|
47
75
|
proclmbda, params, kwparms)
|
48
76
|
|
49
77
|
wrapper.args.positional.valid_or_raise_exception(params)
|
@@ -153,11 +181,17 @@ module Tchae
|
|
153
181
|
@valtor.valid_or_raise_exception(result, ::Tchae::ReturnTypeException)
|
154
182
|
end
|
155
183
|
|
156
|
-
def
|
184
|
+
def return_wrapper(result)
|
157
185
|
return Return(result) unless @valtor
|
158
186
|
|
159
187
|
@valtor.wrapped_result_or_error(result, ::Tchae::ReturnTypeError)
|
160
188
|
end
|
189
|
+
|
190
|
+
def valid_or_return_error(result)
|
191
|
+
return result unless @valtor
|
192
|
+
@valtor.valid_or_return_error(result, ::Tchae::ReturnTypeError)
|
193
|
+
end
|
194
|
+
|
161
195
|
end
|
162
196
|
|
163
197
|
class PositionalArgs < Array
|
@@ -171,7 +205,8 @@ module Tchae
|
|
171
205
|
@wrapper
|
172
206
|
end
|
173
207
|
|
174
|
-
def expect(constraints = EMPTY_ARRAY, &proc)
|
208
|
+
# def expect(constraints = EMPTY_ARRAY, &proc)
|
209
|
+
def expect(*constraints, &proc)
|
175
210
|
constraints.each { |inp| push Tchae(inp) }
|
176
211
|
instance_exec(&proc) if block_given?
|
177
212
|
@wrapper
|
@@ -247,8 +282,9 @@ module Tchae
|
|
247
282
|
end
|
248
283
|
module Handling
|
249
284
|
RAISE = :raise_exception
|
250
|
-
|
251
|
-
|
285
|
+
RETURN_WRAPPER = :return_wrapper
|
286
|
+
RETURN_RESULT_OR_ERROR = :return_result_or_error
|
287
|
+
ALL = [RAISE, RETURN_WRAPPER, RETURN_RESULT_OR_ERROR].freeze
|
252
288
|
end
|
253
289
|
end
|
254
290
|
|
@@ -297,8 +333,11 @@ module Tchae
|
|
297
333
|
lambda
|
298
334
|
end
|
299
335
|
|
300
|
-
|
301
|
-
|
336
|
+
case wrapper.handling
|
337
|
+
when ::Tchae::Handling::RETURN_WRAPPER
|
338
|
+
create_return_wrapper_method(methodname, wrapper, &proclmbda)
|
339
|
+
when ::Tchae::Handling::RETURN_RESULT_OR_ERROR
|
340
|
+
create_result_or_error_method(methodname, wrapper, &proclmbda)
|
302
341
|
else # RAISE
|
303
342
|
create_valid_or_raise_method(methodname, wrapper, &proclmbda)
|
304
343
|
end
|
@@ -310,7 +349,7 @@ module Tchae
|
|
310
349
|
tea_methodsymb = "__tea_#{methodname}".to_sym
|
311
350
|
define_method "__tea_#{methodname}", proc
|
312
351
|
define_method(methodname) do |*params, **kwparms|
|
313
|
-
Tchae.
|
352
|
+
Tchae.do_validation_raise(self, wrapper,
|
314
353
|
tea_methodsymb, proc,
|
315
354
|
params, kwparms)
|
316
355
|
end
|
@@ -319,14 +358,30 @@ module Tchae
|
|
319
358
|
end
|
320
359
|
end
|
321
360
|
|
322
|
-
def
|
361
|
+
def create_result_or_error_method(methodname,
|
362
|
+
wrapper= Tchae::NilWrapper,
|
363
|
+
&proc)
|
364
|
+
if block_given?
|
365
|
+
tea_methodsymb = "__tea_#{methodname}".to_sym
|
366
|
+
define_method "__tea_#{methodname}", proc
|
367
|
+
define_method(methodname) do |*params, **kwparms|
|
368
|
+
Tchae.do_validation_result_or_error(self, wrapper,
|
369
|
+
tea_methodsymb, proc,
|
370
|
+
params, kwparms)
|
371
|
+
end
|
372
|
+
else
|
373
|
+
define_method(methodname) {}
|
374
|
+
end
|
375
|
+
end
|
376
|
+
|
377
|
+
def create_return_wrapper_method(methodname,
|
323
378
|
wrapper = Tchae::NilWrapper,
|
324
379
|
&proc)
|
325
380
|
if block_given?
|
326
381
|
tea_methodsymb = "__tea_#{methodname}".to_sym
|
327
382
|
define_method "__tea_#{methodname}", proc
|
328
383
|
define_method(methodname) do |*params, **kwparms|
|
329
|
-
Tchae.
|
384
|
+
Tchae.do_validation_return_wrapper(self,
|
330
385
|
wrapper,
|
331
386
|
tea_methodsymb,
|
332
387
|
proc,
|
@@ -353,8 +408,11 @@ module Tchae
|
|
353
408
|
lambda
|
354
409
|
end
|
355
410
|
|
356
|
-
|
357
|
-
|
411
|
+
case wrapper.handling
|
412
|
+
when ::Tchae::Handling::RETURN_WRAPPER
|
413
|
+
create_return_wrapper_singleton_method(methodname, wrapper, &proclmbda)
|
414
|
+
when ::Tchae::Handling::RETURN_RESULT_OR_ERROR
|
415
|
+
create_result_or_error_singleton_method(methodname, wrapper, &proclmbda)
|
358
416
|
else # RAISE
|
359
417
|
create_valid_or_raise_singleton_method(methodname, wrapper, &proclmbda)
|
360
418
|
end
|
@@ -366,7 +424,7 @@ module Tchae
|
|
366
424
|
tea_methodsymb = "__tea_#{methodname}".to_sym
|
367
425
|
define_singleton_method "__tea_#{methodname}", proc
|
368
426
|
define_singleton_method(methodname) do |*params, **kwparms|
|
369
|
-
Tchae.
|
427
|
+
Tchae.do_validation_raise(self, wrapper,
|
370
428
|
tea_methodsymb, proc,
|
371
429
|
params, kwparms)
|
372
430
|
end
|
@@ -374,14 +432,30 @@ module Tchae
|
|
374
432
|
define_singleton_method(methodname) {}
|
375
433
|
end
|
376
434
|
end
|
377
|
-
|
378
|
-
def
|
435
|
+
|
436
|
+
def create_result_or_error_singleton_method(methodname,
|
437
|
+
wrapper= Tchae::NilWrapper,
|
438
|
+
&proc)
|
439
|
+
if block_given?
|
440
|
+
tea_methodsymb = "__tea_#{methodname}".to_sym
|
441
|
+
define_singleton_method "__tea_#{methodname}", proc
|
442
|
+
define_singleton_method(methodname) do |*params, **kwparms|
|
443
|
+
Tchae.do_validation_result_or_error(self, wrapper,
|
444
|
+
tea_methodsymb, proc,
|
445
|
+
params, kwparms)
|
446
|
+
end
|
447
|
+
else
|
448
|
+
define_singleton_method(methodname) {}
|
449
|
+
end
|
450
|
+
end
|
451
|
+
|
452
|
+
def create_return_wrapper_singleton_method(methodname,
|
379
453
|
wrapper = Tchae::NilWrapper, &proc)
|
380
454
|
if block_given?
|
381
455
|
tea_methodsymb = "__tea_#{methodname}".to_sym
|
382
456
|
define_singleton_method "__tea_#{methodname}", proc
|
383
457
|
define_singleton_method(methodname) do |*params, **kwparms|
|
384
|
-
Tchae.
|
458
|
+
Tchae.do_validation_return_wrapper(self, wrapper,
|
385
459
|
tea_methodsymb, proc,
|
386
460
|
params, kwparms)
|
387
461
|
end
|
@@ -396,6 +470,7 @@ end
|
|
396
470
|
def Return(result, error = nil)
|
397
471
|
Tchae::ResultWrapper.new(result, error)
|
398
472
|
end
|
473
|
+
|
399
474
|
class Object
|
400
475
|
extend Tchae::PI
|
401
476
|
include Tchae::PISingleton
|
data/lib/tchae/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tchae
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- D.M.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-09-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -38,7 +38,9 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0.51'
|
41
|
-
description:
|
41
|
+
description: |-
|
42
|
+
Having to validate method parameters and/or the result of method is a
|
43
|
+
quite common and repetitive task. Tchae is an attempt to capture this task in a small yet generic reuseable library. Tchae provides validated variants of the standard define_method ruby methods , that will create the same method as the standard would create wrapped into validation code.
|
42
44
|
email: dev@aithscel.eu
|
43
45
|
executables: []
|
44
46
|
extensions: []
|