code-ruby 1.5.7 → 1.6.1

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.
@@ -3,25 +3,124 @@
3
3
  class Code
4
4
  class Object
5
5
  class List < Object
6
- delegate :code_eight?, to: :code_size
7
- delegate :code_five?, to: :code_size
8
- delegate :code_four?, to: :code_size
9
- delegate :code_nine?, to: :code_size
10
- delegate :code_one?, to: :code_size
11
- delegate :code_seven?, to: :code_size
12
- delegate :code_six?, to: :code_size
13
- delegate :code_ten?, to: :code_size
14
- delegate :code_three?, to: :code_size
15
- delegate :code_two?, to: :code_size
16
- delegate :code_zero?, to: :code_size
17
- delegate :code_many?, to: :code_size
6
+ delegate(
7
+ :code_many?,
8
+ :code_positive?,
9
+ :code_negative?,
10
+ :code_zero?,
11
+ :code_one?,
12
+ :code_two?,
13
+ :code_three?,
14
+ :code_four?,
15
+ :code_five?,
16
+ :code_six?,
17
+ :code_seven?,
18
+ :code_eight?,
19
+ :code_nine?,
20
+ :code_ten?,
21
+ :code_eleven?,
22
+ :code_twelve?,
23
+ :code_thirteen?,
24
+ :code_fourteen?,
25
+ :code_fifteen?,
26
+ :code_sixteen?,
27
+ :code_seventeen?,
28
+ :code_eighteen?,
29
+ :code_nineteen?,
30
+ :code_twenty?,
31
+ :code_twenty_one?,
32
+ :code_twenty_two?,
33
+ :code_twenty_three?,
34
+ :code_twenty_four?,
35
+ :code_twenty_five?,
36
+ :code_twenty_six?,
37
+ :code_twenty_seven?,
38
+ :code_twenty_eight?,
39
+ :code_twenty_nine?,
40
+ :code_thirty?,
41
+ :code_thirty_one?,
42
+ :code_thirty_two?,
43
+ :code_thirty_three?,
44
+ :code_thirty_four?,
45
+ :code_thirty_five?,
46
+ :code_thirty_six?,
47
+ :code_thirty_seven?,
48
+ :code_thirty_eight?,
49
+ :code_thirty_nine?,
50
+ :code_forty?,
51
+ :code_forty_one?,
52
+ :code_forty_two?,
53
+ :code_forty_three?,
54
+ :code_forty_four?,
55
+ :code_forty_five?,
56
+ :code_forty_six?,
57
+ :code_forty_seven?,
58
+ :code_forty_eight?,
59
+ :code_forty_nine?,
60
+ :code_fifty?,
61
+ :code_fifty_one?,
62
+ :code_fifty_two?,
63
+ :code_fifty_three?,
64
+ :code_fifty_four?,
65
+ :code_fifty_five?,
66
+ :code_fifty_six?,
67
+ :code_fifty_seven?,
68
+ :code_fifty_eight?,
69
+ :code_fifty_nine?,
70
+ :code_sixty?,
71
+ :code_sixty_one?,
72
+ :code_sixty_two?,
73
+ :code_sixty_three?,
74
+ :code_sixty_four?,
75
+ :code_sixty_five?,
76
+ :code_sixty_six?,
77
+ :code_sixty_seven?,
78
+ :code_sixty_eight?,
79
+ :code_sixty_nine?,
80
+ :code_seventy?,
81
+ :code_seventy_one?,
82
+ :code_seventy_two?,
83
+ :code_seventy_three?,
84
+ :code_seventy_four?,
85
+ :code_seventy_five?,
86
+ :code_seventy_six?,
87
+ :code_seventy_seven?,
88
+ :code_seventy_eight?,
89
+ :code_seventy_nine?,
90
+ :code_eighty?,
91
+ :code_eighty_one?,
92
+ :code_eighty_two?,
93
+ :code_eighty_three?,
94
+ :code_eighty_four?,
95
+ :code_eighty_five?,
96
+ :code_eighty_six?,
97
+ :code_eighty_seven?,
98
+ :code_eighty_eight?,
99
+ :code_eighty_nine?,
100
+ :code_ninety?,
101
+ :code_ninety_one?,
102
+ :code_ninety_two?,
103
+ :code_ninety_three?,
104
+ :code_ninety_four?,
105
+ :code_ninety_five?,
106
+ :code_ninety_six?,
107
+ :code_ninety_seven?,
108
+ :code_ninety_eight?,
109
+ :code_ninety_nine?,
110
+ :code_one_hundred?,
111
+ to: :code_size
112
+ )
18
113
 
19
114
  def initialize(*args, **_kargs, &_block)
20
115
  self.raw =
21
116
  if args.first.is_a?(List)
22
117
  args.first.raw.map(&:to_code)
118
+ elsif args.first.is_a?(Dictionary)
119
+ args.first.raw.to_a.map(&:to_code)
23
120
  elsif args.first.is_an?(::Array)
24
121
  args.first.map(&:to_code)
122
+ elsif args.first.is_a?(::Hash)
123
+ args.first.to_a.map(&:to_code)
25
124
  else
26
125
  []
27
126
  end
@@ -47,13 +146,13 @@ class Code
47
146
  sig(args) { List }
48
147
  code_minus(code_value)
49
148
  when "any?"
50
- sig(args) { Function.maybe }
149
+ sig(args) { (Function | Class).maybe }
51
150
  code_any?(code_value, **globals)
52
151
  when "detect"
53
- sig(args) { Function }
152
+ sig(args) { (Function | Class).maybe }
54
153
  code_detect(code_value, **globals)
55
154
  when "each"
56
- sig(args) { Function }
155
+ sig(args) { (Function | Class).maybe }
57
156
  code_each(code_value, **globals)
58
157
  when "first"
59
158
  sig(args) { Integer.maybe }
@@ -70,6 +169,9 @@ class Code
70
169
  when "pop"
71
170
  sig(args) { Integer.maybe }
72
171
  code_pop(code_value)
172
+ when "pop!"
173
+ sig(args) { Integer.maybe }
174
+ code_pop!(code_value)
73
175
  when "shift"
74
176
  sig(args) { Integer.maybe }
75
177
  code_shift(code_value)
@@ -80,43 +182,40 @@ class Code
80
182
  sig(args)
81
183
  code_last
82
184
  when "map"
83
- sig(args) { Function }
185
+ sig(args) { (Function | Class).maybe }
84
186
  code_map(code_value, **globals)
85
187
  when "map!"
86
- sig(args) { Function }
188
+ sig(args) { (Function | Class).maybe }
87
189
  code_map!(code_value, **globals)
88
190
  when "max"
89
- sig(args)
90
- code_max
91
- when "max_by"
92
- sig(args) { Function }
93
- code_max_by(code_value, **globals)
191
+ sig(args) { (Function | Class).maybe }
192
+ code_max(code_value, **globals)
94
193
  when "none?"
95
- sig(args) { Function.maybe }
194
+ sig(args) { (Function | Class).maybe }
96
195
  code_none?(code_value, **globals)
97
196
  when "reduce"
98
- sig(args) { Function }
197
+ sig(args) { (Function | Class).maybe }
99
198
  code_reduce(code_value, **globals)
100
199
  when "reverse"
101
200
  sig(args)
102
201
  code_reverse
103
202
  when "select"
104
- sig(args) { Function }
203
+ sig(args) { (Function | Class).maybe }
105
204
  code_select(code_value, **globals)
106
205
  when "select!"
107
- sig(args) { Function }
206
+ sig(args) { (Function | Class).maybe }
108
207
  code_select!(code_value, **globals)
109
208
  when "compact"
110
- sig(args) { Function.maybe }
209
+ sig(args) { (Function | Class).maybe }
111
210
  code_compact(code_value, **globals)
112
211
  when "compact!"
113
- sig(args) { Function.maybe }
212
+ sig(args) { (Function | Class).maybe }
114
213
  code_compact!(code_value, **globals)
115
214
  when "reject"
116
- sig(args) { Function }
215
+ sig(args) { (Function | Class).maybe }
117
216
  code_reject(code_value, **globals)
118
217
  when "reject!"
119
- sig(args) { Function }
218
+ sig(args) { (Function | Class).maybe }
120
219
  code_reject!(code_value, **globals)
121
220
  when "size"
122
221
  sig(args)
@@ -127,6 +226,15 @@ class Code
127
226
  when "uniq"
128
227
  sig(args)
129
228
  code_uniq
229
+ when "many?"
230
+ sig(args)
231
+ code_many?
232
+ when "positive?"
233
+ sig(args)
234
+ code_positive?
235
+ when "negative?"
236
+ sig(args)
237
+ code_negative?
130
238
  when "zero?"
131
239
  sig(args)
132
240
  code_zero?
@@ -160,9 +268,276 @@ class Code
160
268
  when "ten?"
161
269
  sig(args)
162
270
  code_ten?
163
- when "many?"
271
+ when "eleven?"
164
272
  sig(args)
165
- code_many?
273
+ code_eleven?
274
+ when "twelve?"
275
+ sig(args)
276
+ code_twelve?
277
+ when "thirteen?"
278
+ sig(args)
279
+ code_thirteen?
280
+ when "fourteen?"
281
+ sig(args)
282
+ code_fourteen?
283
+ when "fifteen?"
284
+ sig(args)
285
+ code_fifteen?
286
+ when "sixteen?"
287
+ sig(args)
288
+ code_sixteen?
289
+ when "seventeen?"
290
+ sig(args)
291
+ code_seventeen?
292
+ when "eighteen?"
293
+ sig(args)
294
+ code_eighteen?
295
+ when "nineteen?"
296
+ sig(args)
297
+ code_nineteen?
298
+ when "twenty?"
299
+ sig(args)
300
+ code_twenty?
301
+ when "twenty_one?"
302
+ sig(args)
303
+ code_twenty_one?
304
+ when "twenty_two?"
305
+ sig(args)
306
+ code_twenty_two?
307
+ when "twenty_three?"
308
+ sig(args)
309
+ code_twenty_three?
310
+ when "twenty_four?"
311
+ sig(args)
312
+ code_twenty_four?
313
+ when "twenty_five?"
314
+ sig(args)
315
+ code_twenty_five?
316
+ when "twenty_six?"
317
+ sig(args)
318
+ code_twenty_six?
319
+ when "twenty_seven?"
320
+ sig(args)
321
+ code_twenty_seven?
322
+ when "twenty_eight?"
323
+ sig(args)
324
+ code_twenty_eight?
325
+ when "twenty_nine?"
326
+ sig(args)
327
+ code_twenty_nine?
328
+ when "thirty?"
329
+ sig(args)
330
+ code_thirty?
331
+ when "thirty_one?"
332
+ sig(args)
333
+ code_thirty_one?
334
+ when "thirty_two?"
335
+ sig(args)
336
+ code_thirty_two?
337
+ when "thirty_three?"
338
+ sig(args)
339
+ code_thirty_three?
340
+ when "thirty_four?"
341
+ sig(args)
342
+ code_thirty_four?
343
+ when "thirty_five?"
344
+ sig(args)
345
+ code_thirty_five?
346
+ when "thirty_six?"
347
+ sig(args)
348
+ code_thirty_six?
349
+ when "thirty_seven?"
350
+ sig(args)
351
+ code_thirty_seven?
352
+ when "thirty_eight?"
353
+ sig(args)
354
+ code_thirty_eight?
355
+ when "thirty_nine?"
356
+ sig(args)
357
+ code_thirty_nine?
358
+ when "forty?"
359
+ sig(args)
360
+ code_forty?
361
+ when "forty_one?"
362
+ sig(args)
363
+ code_forty_one?
364
+ when "forty_two?"
365
+ sig(args)
366
+ code_forty_two?
367
+ when "forty_three?"
368
+ sig(args)
369
+ code_forty_three?
370
+ when "forty_four?"
371
+ sig(args)
372
+ code_forty_four?
373
+ when "forty_five?"
374
+ sig(args)
375
+ code_forty_five?
376
+ when "forty_six?"
377
+ sig(args)
378
+ code_forty_six?
379
+ when "forty_seven?"
380
+ sig(args)
381
+ code_forty_seven?
382
+ when "forty_eight?"
383
+ sig(args)
384
+ code_forty_eight?
385
+ when "forty_nine?"
386
+ sig(args)
387
+ code_forty_nine?
388
+ when "fifty?"
389
+ sig(args)
390
+ code_fifty?
391
+ when "fifty_one?"
392
+ sig(args)
393
+ code_fifty_one?
394
+ when "fifty_two?"
395
+ sig(args)
396
+ code_fifty_two?
397
+ when "fifty_three?"
398
+ sig(args)
399
+ code_fifty_three?
400
+ when "fifty_four?"
401
+ sig(args)
402
+ code_fifty_four?
403
+ when "fifty_five?"
404
+ sig(args)
405
+ code_fifty_five?
406
+ when "fifty_six?"
407
+ sig(args)
408
+ code_fifty_six?
409
+ when "fifty_seven?"
410
+ sig(args)
411
+ code_fifty_seven?
412
+ when "fifty_eight?"
413
+ sig(args)
414
+ code_fifty_eight?
415
+ when "fifty_nine?"
416
+ sig(args)
417
+ code_fifty_nine?
418
+ when "sixty?"
419
+ sig(args)
420
+ code_sixty?
421
+ when "sixty_one?"
422
+ sig(args)
423
+ code_sixty_one?
424
+ when "sixty_two?"
425
+ sig(args)
426
+ code_sixty_two?
427
+ when "sixty_three?"
428
+ sig(args)
429
+ code_sixty_three?
430
+ when "sixty_four?"
431
+ sig(args)
432
+ code_sixty_four?
433
+ when "sixty_five?"
434
+ sig(args)
435
+ code_sixty_five?
436
+ when "sixty_six?"
437
+ sig(args)
438
+ code_sixty_six?
439
+ when "sixty_seven?"
440
+ sig(args)
441
+ code_sixty_seven?
442
+ when "sixty_eight?"
443
+ sig(args)
444
+ code_sixty_eight?
445
+ when "sixty_nine?"
446
+ sig(args)
447
+ code_sixty_nine?
448
+ when "seventy?"
449
+ sig(args)
450
+ code_seventy?
451
+ when "seventy_one?"
452
+ sig(args)
453
+ code_seventy_one?
454
+ when "seventy_two?"
455
+ sig(args)
456
+ code_seventy_two?
457
+ when "seventy_three?"
458
+ sig(args)
459
+ code_seventy_three?
460
+ when "seventy_four?"
461
+ sig(args)
462
+ code_seventy_four?
463
+ when "seventy_five?"
464
+ sig(args)
465
+ code_seventy_five?
466
+ when "seventy_six?"
467
+ sig(args)
468
+ code_seventy_six?
469
+ when "seventy_seven?"
470
+ sig(args)
471
+ code_seventy_seven?
472
+ when "seventy_eight?"
473
+ sig(args)
474
+ code_seventy_eight?
475
+ when "seventy_nine?"
476
+ sig(args)
477
+ code_seventy_nine?
478
+ when "eighty?"
479
+ sig(args)
480
+ code_eighty?
481
+ when "eighty_one?"
482
+ sig(args)
483
+ code_eighty_one?
484
+ when "eighty_two?"
485
+ sig(args)
486
+ code_eighty_two?
487
+ when "eighty_three?"
488
+ sig(args)
489
+ code_eighty_three?
490
+ when "eighty_four?"
491
+ sig(args)
492
+ code_eighty_four?
493
+ when "eighty_five?"
494
+ sig(args)
495
+ code_eighty_five?
496
+ when "eighty_six?"
497
+ sig(args)
498
+ code_eighty_six?
499
+ when "eighty_seven?"
500
+ sig(args)
501
+ code_eighty_seven?
502
+ when "eighty_eight?"
503
+ sig(args)
504
+ code_eighty_eight?
505
+ when "eighty_nine?"
506
+ sig(args)
507
+ code_eighty_nine?
508
+ when "ninety?"
509
+ sig(args)
510
+ code_ninety?
511
+ when "ninety_one?"
512
+ sig(args)
513
+ code_ninety_one?
514
+ when "ninety_two?"
515
+ sig(args)
516
+ code_ninety_two?
517
+ when "ninety_three?"
518
+ sig(args)
519
+ code_ninety_three?
520
+ when "ninety_four?"
521
+ sig(args)
522
+ code_ninety_four?
523
+ when "ninety_five?"
524
+ sig(args)
525
+ code_ninety_five?
526
+ when "ninety_six?"
527
+ sig(args)
528
+ code_ninety_six?
529
+ when "ninety_seven?"
530
+ sig(args)
531
+ code_ninety_seven?
532
+ when "ninety_eight?"
533
+ sig(args)
534
+ code_ninety_eight?
535
+ when "ninety_nine?"
536
+ sig(args)
537
+ code_ninety_nine?
538
+ when "one_hundred?"
539
+ sig(args)
540
+ code_one_hundred?
166
541
  else
167
542
  super
168
543
  end
@@ -175,9 +550,7 @@ class Code
175
550
 
176
551
  Boolean.new(
177
552
  raw.any? do |code_element|
178
- if code_argument.nothing?
179
- true.tap { index += 1 }
180
- else
553
+ if code_argument.is_a?(Function)
181
554
  code_argument
182
555
  .call(
183
556
  arguments: List.new([code_element, Integer.new(index), self]),
@@ -185,6 +558,10 @@ class Code
185
558
  )
186
559
  .truthy?
187
560
  .tap { index += 1 }
561
+ elsif code_argument.is_a?(Class)
562
+ code_element.is_a?(code_argument.raw).tap { index += 1 }
563
+ else
564
+ true.tap { index += 1 }
188
565
  end
189
566
  rescue Error::Next => e
190
567
  e.code_value.tap { index += 1 }
@@ -206,27 +583,37 @@ class Code
206
583
  List.new(raw - code_other.raw)
207
584
  end
208
585
 
209
- def code_detect(argument, **globals)
586
+ def code_detect(argument = nil, **globals)
210
587
  code_argument = argument.to_code
211
588
 
212
589
  raw.detect.with_index do |code_element, index|
213
- code_argument.call(
214
- arguments: List.new([code_element, Integer.new(index), self]),
215
- **globals
216
- ).truthy?
590
+ if code_argument.is_a?(Function)
591
+ code_argument.call(
592
+ arguments: List.new([code_element, Integer.new(index), self]),
593
+ **globals
594
+ ).truthy?
595
+ elsif code_argument.is_a?(Class)
596
+ code_element.is_a?(code_argument.raw)
597
+ else
598
+ false
599
+ end
217
600
  rescue Error::Next => e
218
601
  e.code_value
219
602
  end || Nothing.new
220
603
  end
221
604
 
222
- def code_each(argument, **globals)
605
+ def code_each(argument = nil, **globals)
223
606
  code_argument = argument.to_code
224
607
 
225
608
  raw.each.with_index do |code_element, index|
226
- code_argument.call(
227
- arguments: List.new([code_element, Integer.new(index), self]),
228
- **globals
229
- )
609
+ if code_argument.is_a?(Function)
610
+ code_argument.call(
611
+ arguments: List.new([code_element, Integer.new(index), self]),
612
+ **globals
613
+ )
614
+ elsif code_argument.is_a?(Class)
615
+ code_argument.raw.new(code_element)
616
+ end
230
617
  rescue Error::Next => e
231
618
  e.code_value
232
619
  end
@@ -282,6 +669,13 @@ class Code
282
669
  code_n = n.to_code
283
670
  n = code_n.raw
284
671
 
672
+ code_n.nothing? ? raw.dup.pop || Nothing.new : List.new(raw.dup.pop(n))
673
+ end
674
+
675
+ def code_pop!(n = nil)
676
+ code_n = n.to_code
677
+ n = code_n.raw
678
+
285
679
  code_n.nothing? ? raw.pop || Nothing.new : List.new(raw.pop(n))
286
680
  end
287
681
 
@@ -302,29 +696,41 @@ class Code
302
696
  raw.last || Nothing.new
303
697
  end
304
698
 
305
- def code_map(argument, **globals)
699
+ def code_map(argument = nil, **globals)
306
700
  code_argument = argument.to_code
307
701
 
308
702
  List.new(
309
703
  raw.map.with_index do |code_element, index|
310
- code_argument.call(
311
- arguments: List.new([code_element, Integer.new(index), self]),
312
- **globals
313
- )
704
+ if code_argument.is_a?(Function)
705
+ code_argument.call(
706
+ arguments: List.new([code_element, Integer.new(index), self]),
707
+ **globals
708
+ )
709
+ elsif code_argument.is_a?(Class)
710
+ code_argument.raw.new(code_element)
711
+ else
712
+ Nothing.new
713
+ end
314
714
  rescue Error::Next => e
315
715
  e.code_value
316
716
  end
317
717
  )
318
718
  end
319
719
 
320
- def code_map!(argument, **globals)
720
+ def code_map!(argument = nil, **globals)
321
721
  code_argument = argument.to_code
322
722
 
323
723
  raw.map!.with_index do |code_element, index|
324
- code_argument.call(
325
- arguments: List.new([code_element, Integer.new(index), self]),
326
- **globals
327
- )
724
+ if code_argument.is_a?(Function)
725
+ code_argument.call(
726
+ arguments: List.new([code_element, Integer.new(index), self]),
727
+ **globals
728
+ )
729
+ elsif code_argument.is_a?(Class)
730
+ code_argument.raw.new(code_element)
731
+ else
732
+ Nothing.new
733
+ end
328
734
  rescue Error::Next => e
329
735
  e.code_value
330
736
  end
@@ -332,18 +738,18 @@ class Code
332
738
  self
333
739
  end
334
740
 
335
- def code_max
336
- raw.max || Nothing.new
337
- end
338
-
339
- def code_max_by(argument, **globals)
741
+ def code_max(argument = nil, **globals)
340
742
  code_argument = argument.to_code
341
743
 
342
744
  raw.max_by.with_index do |code_element, index|
343
- code_argument.call(
344
- arguments: List.new([code_element, Integer.new(index), self]),
345
- **globals
346
- )
745
+ if code_argument.is_a?(Function)
746
+ code_argument.call(
747
+ arguments: List.new([code_element, Integer.new(index), self]),
748
+ **globals
749
+ ).truthy?
750
+ else
751
+ code_element
752
+ end
347
753
  rescue Error::Next => e
348
754
  e.code_value
349
755
  end || Nothing.new
@@ -356,9 +762,7 @@ class Code
356
762
 
357
763
  Boolean.new(
358
764
  raw.none? do |code_element|
359
- if code_argument.nothing?
360
- code_element.truthy?.tap { index += 1 }
361
- else
765
+ if code_argument.is_a?(Function)
362
766
  code_argument
363
767
  .call(
364
768
  arguments: List.new([code_element, Integer.new(index), self]),
@@ -366,6 +770,10 @@ class Code
366
770
  )
367
771
  .truthy?
368
772
  .tap { index += 1 }
773
+ elsif code_argument.is_a?(Class)
774
+ code_element.is_a?(code_argument.raw).tap { index += 1 }
775
+ else
776
+ true.tap { index += 1 }
369
777
  end
370
778
  rescue Error::Next => e
371
779
  e.code_value.truthy?.tap { index += 1 }
@@ -373,17 +781,25 @@ class Code
373
781
  )
374
782
  end
375
783
 
376
- def code_reduce(argument, **globals)
784
+ def code_reduce(argument = nil, **globals)
377
785
  code_argument = argument.to_code
378
786
 
379
- raw.reduce.with_index do |code_acc, code_element, index|
380
- code_argument.call(
381
- arguments:
382
- List.new([code_acc, code_element, Integer.new(index), self]),
383
- **globals
384
- )
787
+ index = 0
788
+
789
+ raw.reduce do |code_acc, code_element|
790
+ if code_argument.is_a?(Function)
791
+ code_argument
792
+ .call(
793
+ arguments:
794
+ List.new([code_acc, code_element, Integer.new(index), self]),
795
+ **globals
796
+ )
797
+ .tap { index += 1 }
798
+ else
799
+ code_acc.tap { index += 1 }
800
+ end
385
801
  rescue Error::Next => e
386
- e.code_value
802
+ e.code_value.tap { index += 1 }
387
803
  end || Nothing.new
388
804
  end
389
805
 
@@ -398,9 +814,7 @@ class Code
398
814
 
399
815
  List.new(
400
816
  raw.select do |code_element|
401
- if code_argument.nothing?
402
- code_element.truthy?.tap { index += 1 }
403
- else
817
+ if code_argument.is_a?(Function)
404
818
  code_argument
405
819
  .call(
406
820
  arguments: List.new([code_element, Integer.new(index), self]),
@@ -408,6 +822,10 @@ class Code
408
822
  )
409
823
  .truthy?
410
824
  .tap { index += 1 }
825
+ elsif code_argument.is_a?(Class)
826
+ code_element.is_a?(code_argument.raw).tap { index += 1 }
827
+ else
828
+ code_element.truthy?.tap { index += 1 }
411
829
  end
412
830
  rescue Error::Next => e
413
831
  e.code_value.truhty?.tap { index += 1 }
@@ -421,9 +839,7 @@ class Code
421
839
  index = 0
422
840
 
423
841
  raw.select! do |code_element|
424
- if code_argument.nothing?
425
- code_element.truthy?.tap { index += 1 }
426
- else
842
+ if code_argument.is_a?(Function)
427
843
  code_argument
428
844
  .call(
429
845
  arguments: List.new([code_element, Integer.new(index), self]),
@@ -431,6 +847,10 @@ class Code
431
847
  )
432
848
  .truthy?
433
849
  .tap { index += 1 }
850
+ elsif code_argument.is_a?(Class)
851
+ code_element.is_a?(code_argument.raw).tap { index += 1 }
852
+ else
853
+ code_element.truthy?.tap { index += 1 }
434
854
  end
435
855
  rescue Error::Next => e
436
856
  e.code_value.truhty?.tap { index += 1 }
@@ -439,29 +859,41 @@ class Code
439
859
  self
440
860
  end
441
861
 
442
- def code_select(argument, **globals)
862
+ def code_select(argument = nil, **globals)
443
863
  code_argument = argument.to_code
444
864
 
445
865
  List.new(
446
866
  raw.select.with_index do |code_element, index|
447
- code_argument.call(
448
- arguments: List.new([code_element, Integer.new(index), self]),
449
- **globals
450
- ).truthy?
867
+ if code_argument.is_a?(Function)
868
+ code_argument.call(
869
+ arguments: List.new([code_element, Integer.new(index), self]),
870
+ **globals
871
+ ).truthy?
872
+ elsif code_argument.is_a?(Class)
873
+ code_element.is_a?(code_argument.raw)
874
+ else
875
+ false
876
+ end
451
877
  rescue Error::Next => e
452
878
  e.code_value.truthy?
453
879
  end
454
880
  )
455
881
  end
456
882
 
457
- def code_select!(argument, **globals)
883
+ def code_select!(argument = nil, **globals)
458
884
  code_argument = argument.to_code
459
885
 
460
886
  raw.select!.with_index do |code_element, index|
461
- code_argument.call(
462
- arguments: List.new([code_element, Integer.new(index), self]),
463
- **globals
464
- ).truthy?
887
+ if code_argument.is_a?(Function)
888
+ code_argument.call(
889
+ arguments: List.new([code_element, Integer.new(index), self]),
890
+ **globals
891
+ ).truthy?
892
+ elsif code_argument.is_a?(Class)
893
+ code_element.is_a?(code_argument.raw)
894
+ else
895
+ false
896
+ end
465
897
  rescue Error::Next => e
466
898
  e.code_value.truthy?
467
899
  end
@@ -469,29 +901,41 @@ class Code
469
901
  self
470
902
  end
471
903
 
472
- def code_reject(argument, **globals)
904
+ def code_reject(argument = nil, **globals)
473
905
  code_argument = argument.to_code
474
906
 
475
907
  List.new(
476
908
  raw.reject.with_index do |code_element, index|
477
- code_argument.call(
478
- arguments: List.new([code_element, Integer.new(index), self]),
479
- **globals
480
- ).truthy?
909
+ if code_argument.is_a?(Function)
910
+ code_argument.call(
911
+ arguments: List.new([code_element, Integer.new(index), self]),
912
+ **globals
913
+ ).truthy?
914
+ elsif code_argument.is_a?(Class)
915
+ code_element.is_a?(code_argument.raw)
916
+ else
917
+ false
918
+ end
481
919
  rescue Error::Next => e
482
920
  e.code_value.truthy?
483
921
  end
484
922
  )
485
923
  end
486
924
 
487
- def code_reject!(argument, **globals)
925
+ def code_reject!(argument = nil, **globals)
488
926
  code_argument = argument.to_code
489
927
 
490
928
  raw.reject!.with_index do |code_element, index|
491
- code_argument.call(
492
- arguments: List.new([code_element, Integer.new(index), self]),
493
- **globals
494
- ).truthy?
929
+ if code_argument.is_a?(Function)
930
+ code_argument.call(
931
+ arguments: List.new([code_element, Integer.new(index), self]),
932
+ **globals
933
+ ).truthy?
934
+ elsif code_argument.is_a?(Class)
935
+ code_element.is_a?(code_argument.raw)
936
+ else
937
+ false
938
+ end
495
939
  rescue Error::Next => e
496
940
  e.code_value.truthy?
497
941
  end