tbpgr_utils 0.0.21 → 0.0.22

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.
data/.rubocop.yml ADDED
@@ -0,0 +1,2 @@
1
+ LineLength:
2
+ Enabled: false
data/README.md CHANGED
@@ -23,6 +23,8 @@ Or install it yourself as:
23
23
  |[TbpgrUtils Array#together](#arraytogether) |loop all arrays by block |
24
24
  |[TbpgrUtils Array#together_at](#arraytogether_at) |together version of Array#at. together_at has alias :tat |
25
25
  |[TbpgrUtils Array#together_clear](#arraytogether_clear) |together version of Array#clear. together_clear has alias :tclear |
26
+ |[TbpgrUtils Array#together_compact](#arraytogether_compact) |together version of Array#compact. together_compact has alias :tcompact. this is immutable. |
27
+ |[TbpgrUtils Array#together_compact!](#arraytogether_compact!) |together version of Array#compact!. together_compact! has alias :tcompact! this is mutable. |
26
28
  |[TbpgrUtils Array#together_concat](#arraytogether_concat) |together version of Array#concat. together_concat has alias :tconcat |
27
29
  |[TbpgrUtils Array#together_map](#arraytogether_mapor-tmap-together_collect-tcollect) |together version of Enumerable#map. together_map has aliases [:tmap, :together_collect, :tcollect] |
28
30
  |[TbpgrUtils Array#together_reduce](#arraytogether_reduceor-treduce-together_inject-tinject) |together version of Enumerable#reduce. together_reduce has aliases [:treduce, :together_inject, :tinject] |
@@ -89,6 +91,34 @@ numbers = %w{1 2 3}
89
91
 
90
92
  [back to list](#list)
91
93
 
94
+ ### Array#together_compact
95
+ ~~~ruby
96
+ require 'tbpgr_utils'
97
+
98
+ alpha = ['a','b','c', nil,'d']
99
+ numbers = [1, 2, nil, 3]
100
+ lists = [alpha, numbers]
101
+ ret = lists.together_compact
102
+ print lists # => output [['a','b','c', nil,'d'], [1, 2, nil, 3]]
103
+ print ret # => output [['a','b','c','d'], [1, 2, 3]]
104
+ ~~~
105
+
106
+ [back to list](#list)
107
+
108
+ ### Array#together_compact!
109
+ ~~~ruby
110
+ require 'tbpgr_utils'
111
+
112
+ alpha = ['a','b','c', nil,'d']
113
+ numbers = [1, 2, nil, 3]
114
+ lists = [alpha, numbers]
115
+ ret = lists.together_compact!
116
+ print lists # => output [['a','b','c','d'], [1, 2, 3]]
117
+ print ret # => output [['a','b','c','d'], [1, 2, 3]]
118
+ ~~~
119
+
120
+ [back to list](#list)
121
+
92
122
  ### Array#together_concat
93
123
  ~~~ruby
94
124
  require 'tbpgr_utils'
@@ -796,6 +826,7 @@ if you are Sublime Text2 user, you can use snippet for TbpgrUtils.
796
826
  https://github.com/tbpgr/tbpgr_utils_snippets
797
827
 
798
828
  ## History
829
+ * version 0.0.22 : add Array#together_compact. together_compact has alias :tcompact. Array#together_compact!. together_compact! has alias :tcompact!.
799
830
  * version 0.0.21 : add Array#together_clear. together_clear has alias :tclear
800
831
  * version 0.0.20 : add Array#together_at. together_at has alias :tat
801
832
  * version 0.0.19 : add AttributesHashable module.
@@ -176,6 +176,37 @@ class Array
176
176
  each { |list|list.clear }
177
177
  end
178
178
 
179
+ # Arrays bulk compact.(immutable)
180
+ #
181
+ # together_compact has alias :tcompact
182
+ #
183
+ # same elements size case
184
+ # alpha = ['a','b','c', nil,'d']
185
+ # numbers = [1, 2, nil, 3]
186
+ # lists = [alpha, numbers]
187
+ # ret = lists.together_compact
188
+ # print lists # => output [['a','b','c', nil,'d'], [1, 2, nil, 3]]
189
+ # print ret # => output [['a','b','c','d'], [1, 2, 3]]
190
+ def together_compact
191
+ if_not_contain_array_rails_type_error
192
+ reduce([]) { |ret, list|ret << list.compact }
193
+ end
194
+
195
+ # Arrays bulk compact!.(mutable)
196
+ #
197
+ # together_compact! has alias :tcompact!
198
+ #
199
+ # same elements size case
200
+ # alpha = ['a','b','c', nil,'d']
201
+ # numbers = [1, 2, nil, 3]
202
+ # ret = lists.together_compact!
203
+ # print lists # => output [['a','b','c','d'], [1, 2, 3]]
204
+ # print ret # => output [['a','b','c','d'], [1, 2, 3]]
205
+ def together_compact!
206
+ if_not_contain_array_rails_type_error
207
+ each { |list|list.compact! }
208
+ end
209
+
179
210
  private
180
211
 
181
212
  def if_not_contain_array_rails_type_error
@@ -226,6 +257,8 @@ class Array
226
257
  alias_method :tconcat, :together_concat
227
258
  alias_method :tat, :together_at
228
259
  alias_method :tclear, :together_clear
260
+ alias_method :tcompact, :together_compact
261
+ alias_method :tcompact!, :together_compact!
229
262
  alias_methods [:together_collect, :tmap, :tcollect], :together_map
230
263
  alias_methods [:together_find_all, :tselect, :tfindall], :together_select
231
264
  alias_methods [:together_inject, :treduce, :tinject], :together_reduce
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Tbpgr Utilities
4
4
  module TbpgrUtils
5
- VERSION = '0.0.21'
5
+ VERSION = '0.0.22'
6
6
  end
@@ -1,491 +1,590 @@
1
- # encoding: utf-8
2
- require 'spec_helper'
3
- require 'tbpgr_utils'
4
-
5
- describe Array do
6
- context :together do
7
- cases = [
8
- {
9
- case_no: 1,
10
- case_title: 'valid case',
11
- inputs: [[1, 2, 3], %w{one two three}],
12
- expected: ['1:one', '2:two', '3:three'],
13
- },
14
- {
15
- case_no: 2,
16
- case_title: 'contain nil case',
17
- inputs: [[1, 2, 3], %w{one two}],
18
- expected: ['1:one', '2:two', '3:'],
19
- },
20
- ]
21
-
22
- cases.each do |c|
23
- it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
24
- begin
25
- case_before c
26
-
27
- # -- given --
28
- # nothing
29
-
30
- # -- when/then --
31
- actual = []
32
- c[:inputs].together do |first, second|
33
- actual << "#{first}:#{second}"
34
- end
35
-
36
- expect(actual).to eq(c[:expected])
37
- ensure
38
- case_after c
39
- end
40
- end
41
-
42
- def case_before(c)
43
- # implement each case before
44
- end
45
-
46
- def case_after(c)
47
- # implement each case after
48
- end
49
- end
50
- end
51
-
52
- context :together_with_index do
53
- cases = [
54
- {
55
- case_no: 1,
56
- case_title: 'valid case',
57
- inputs: [[1, 2, 3], %w{one two three}],
58
- expected: ['0:1:one', '1:2:two', '2:3:three'],
59
- },
60
- {
61
- case_no: 2,
62
- case_title: 'contain nil case',
63
- inputs: [[1, 2, 3], %w{one two}],
64
- expected: ['0:1:one', '1:2:two', '2:3:'],
65
- },
66
- ]
67
-
68
- cases.each do |c|
69
- it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
70
- begin
71
- case_before c
72
-
73
- # -- given --
74
- # nothing
75
-
76
- # -- when/then --
77
- actual = []
78
- c[:inputs].together_with_index do |first, second, index|
79
- actual << "#{index.to_s}:#{first}:#{second}"
80
- end
81
-
82
- expect(actual).to eq(c[:expected])
83
- ensure
84
- case_after c
85
- end
86
- end
87
-
88
- def case_before(c)
89
- # implement each case before
90
- end
91
-
92
- def case_after(c)
93
- # implement each case after
94
- end
95
- end
96
- end
97
-
98
- context :together_map do
99
- cases = [
100
- {
101
- case_no: 1,
102
- case_title: 'valid case',
103
- method_name: :together_map,
104
- inputs: [[1, 2, 3], %w{one two three}],
105
- expected: ['1:one', '2:two', '3:three'],
106
- },
107
- {
108
- case_no: 2,
109
- case_title: 'contain nil case',
110
- method_name: :together_map,
111
- inputs: [[1, 2, 3], %w{one two}],
112
- expected: ['1:one', '2:two', '3:'],
113
- },
114
- {
115
- case_no: 3,
116
- case_title: 'valid case',
117
- method_name: :together_map,
118
- inputs: [[1, 2, 3], %w{one two three}],
119
- expected: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
120
- is_multi: true,
121
- },
122
- {
123
- case_no: 4,
124
- case_title: 'valid case(alias together_collect)',
125
- method_name: :together_collect,
126
- inputs: [[1, 2, 3], %w{one two three}],
127
- expected: ['1:one', '2:two', '3:three'],
128
- },
129
- {
130
- case_no: 5,
131
- case_title: 'valid case(alias tmap)',
132
- method_name: :tmap,
133
- inputs: [[1, 2, 3], %w{one two three}],
134
- expected: ['1:one', '2:two', '3:three'],
135
- },
136
- {
137
- case_no: 6,
138
- case_title: 'valid case(alias tcollect)',
139
- method_name: :tcollect,
140
- inputs: [[1, 2, 3], %w{one two three}],
141
- expected: ['1:one', '2:two', '3:three'],
142
- },
143
- ]
144
-
145
- cases.each do |c|
146
- it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
147
- begin
148
- case_before c
149
-
150
- # -- given --
151
- # nothing
152
-
153
- # -- when/then --
154
- if c[:is_multi]
155
- actual = c[:inputs].method(c[:method_name]).call { |first, second|["#{first}:#{second}", "#{second}:#{first}"] }
156
- else
157
- actual = c[:inputs].method(c[:method_name]).call { |first, second|"#{first}:#{second}" }
158
- end
159
-
160
- expect(actual).to eq(c[:expected])
161
- ensure
162
- case_after c
163
- end
164
- end
165
-
166
- def case_before(c)
167
- # implement each case before
168
- end
169
-
170
- def case_after(c)
171
- # implement each case after
172
- end
173
- end
174
- end
175
-
176
- context :together_select do
177
- cases = [
178
- {
179
- case_no: 1,
180
- case_title: 'single valid case',
181
- inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
182
- condition: 'first == second',
183
- method_name: :together_select,
184
- expected: [[2, 3], [2, 3]],
185
- },
186
- {
187
- case_no: 2,
188
- case_title: 'multi valid case',
189
- inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
190
- condition: '[first.odd?, second.even?]',
191
- expected: [[1, 3], [4, 2]],
192
- method_name: :together_select,
193
- },
194
- {
195
- case_no: 3,
196
- case_title: 'multi valid case',
197
- inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
198
- condition: '[first.odd?, second.even?]',
199
- expected: [[1, 3], [4, 2]],
200
- method_name: :tselect,
201
- },
202
- {
203
- case_no: 4,
204
- case_title: 'multi valid case',
205
- inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
206
- condition: '[first.odd?, second.even?]',
207
- expected: [[1, 3], [4, 2]],
208
- method_name: :together_find_all,
209
- },
210
- {
211
- case_no: 5,
212
- case_title: 'multi valid case',
213
- inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
214
- condition: '[first.odd?, second.even?]',
215
- expected: [[1, 3], [4, 2]],
216
- method_name: :tfindall,
217
- },
218
- ]
219
-
220
- cases.each do |c|
221
- it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
222
- begin
223
- case_before c
224
-
225
- # -- given --
226
- # nothing
227
-
228
- # -- when/then --
229
- actual = c[:inputs].method(c[:method_name]).call { |first, second| eval c[:condition], binding }
230
-
231
- expect(actual).to eq(c[:expected])
232
- ensure
233
- case_after c
234
- end
235
- end
236
-
237
- def case_before(c)
238
- # implement each case before
239
- end
240
-
241
- def case_after(c)
242
- # implement each case after
243
- end
244
- end
245
- end
246
-
247
- context :together_reduce do
248
- cases = [
249
- {
250
- case_no: 1,
251
- case_title: 'single valid case',
252
- inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
253
- init: nil,
254
- logic: 'memo + first + second',
255
- method_name: :together_reduce,
256
- expected: 20,
257
- },
258
- {
259
- case_no: 2,
260
- case_title: 'single with init valid case',
261
- inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
262
- init: 10,
263
- logic: 'memo + first + second',
264
- method_name: :together_reduce,
265
- expected: 30,
266
- },
267
- {
268
- case_no: 5,
269
- case_title: 'single valid case',
270
- inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
271
- logic: 'memo + first + second',
272
- expected: 20,
273
- method_name: :treduce,
274
- },
275
- {
276
- case_no: 6,
277
- case_title: 'single valid case',
278
- inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
279
- logic: 'memo + first + second',
280
- expected: 20,
281
- method_name: :together_inject,
282
- },
283
- {
284
- case_no: 7,
285
- case_title: 'multi valid case',
286
- inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
287
- logic: 'memo + first + second',
288
- expected: 20,
289
- method_name: :tinject,
290
- },
291
- {
292
- case_no: 8,
293
- case_title: 'single with init valid array case',
294
- inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
295
- init: [],
296
- logic: 'memo << first + second',
297
- method_name: :together_reduce,
298
- expected: [5, 4, 6, 5],
299
- },
300
- {
301
- case_no: 9,
302
- case_title: 'single with init valid array case',
303
- inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
304
- init: {},
305
- logic: 'memo[first] = second; memo',
306
- method_name: :together_reduce,
307
- expected: { 1 => 4, 2 => 2, 3 => 3, 4 => 1 },
308
- },
309
- ]
310
-
311
- cases.each do |c|
312
- it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
313
- begin
314
- case_before c
315
-
316
- # -- given --
317
- # nothing
318
-
319
- # -- when/then --
320
- if c[:init]
321
- actual = c[:inputs].method(c[:method_name]).call(c[:init]) { |memo, first, second| eval c[:logic], binding }
322
- else
323
- actual = c[:inputs].method(c[:method_name]).call { |memo, first, second| eval c[:logic], binding }
324
- end
325
-
326
- expect(actual).to eq(c[:expected])
327
- ensure
328
- case_after c
329
- end
330
- end
331
-
332
- def case_before(c)
333
- # implement each case before
334
- end
335
-
336
- def case_after(c)
337
- # implement each case after
338
- end
339
- end
340
- end
341
-
342
- context :together_concat do
343
- cases = [
344
- {
345
- case_no: 1,
346
- case_title: 'valid case',
347
- inputs: [[1, 2, 3], %w{one two three}],
348
- add_list: [4, 5, 6],
349
- method_name: :together_concat,
350
- expected: [[1, 2, 3, 4, 5, 6], ['one', 'two', 'three', 4, 5, 6]],
351
- },
352
- {
353
- case_no: 2,
354
- case_title: 'valid case',
355
- inputs: [[1, 2, 3], %w{one two three}],
356
- add_list: [4, 5, 6],
357
- method_name: :tconcat,
358
- expected: [[1, 2, 3, 4, 5, 6], ['one', 'two', 'three', 4, 5, 6]],
359
- },
360
- ]
361
-
362
- cases.each do |c|
363
- it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
364
- begin
365
- case_before c
366
-
367
- # -- given --
368
- # nothing
369
-
370
- # -- when --
371
- c[:inputs].send c[:method_name], c[:add_list]
372
-
373
- # -- then --
374
- expect(c[:inputs]).to eq(c[:expected])
375
- ensure
376
- case_after c
377
- end
378
- end
379
-
380
- def case_before(c)
381
- # implement each case before
382
- end
383
-
384
- def case_after(c)
385
- # implement each case after
386
- end
387
- end
388
- end
389
-
390
- context :together_at do
391
- cases = [
392
- {
393
- case_no: 1,
394
- case_title: 'valid case',
395
- inputs: [[1, 2, 3], %w{one two three}],
396
- index: 2,
397
- method_name: :together_at,
398
- expected: [3, 'three'],
399
- },
400
- {
401
- case_no: 2,
402
- case_title: 'contain nil case',
403
- inputs: [[1, 2, 3], %w{one two}],
404
- index: 2,
405
- method_name: :together_at,
406
- expected: [3, nil],
407
- },
408
- {
409
- case_no: 3,
410
- case_title: 'valid case',
411
- inputs: [[1, 2, 3], %w{one two three}],
412
- index: 2,
413
- method_name: :tat,
414
- expected: [3, 'three'],
415
- },
416
- ]
417
-
418
- cases.each do |c|
419
- it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
420
- begin
421
- case_before c
422
-
423
- # -- given --
424
- # nothing
425
-
426
- # -- when --
427
- actual = c[:inputs].send c[:method_name], c[:index]
428
-
429
- # -- then --
430
- expect(actual).to eq(c[:expected])
431
- ensure
432
- case_after c
433
- end
434
- end
435
-
436
- def case_before(c)
437
- # implement each case before
438
- end
439
-
440
- def case_after(c)
441
- # implement each case after
442
- end
443
- end
444
- end
445
-
446
- context :together_clear do
447
- cases = [
448
- {
449
- case_no: 1,
450
- case_title: 'valid case',
451
- inputs: [[1, 2, 3], %w{one two three}],
452
- method_name: :together_clear,
453
- expected: [[], []],
454
- },
455
- {
456
- case_no: 2,
457
- case_title: 'valid case',
458
- inputs: [[1, 2, 3], %w{one two three}],
459
- method_name: :tclear,
460
- expected: [[], []],
461
- },
462
- ]
463
-
464
- cases.each do |c|
465
- it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
466
- begin
467
- case_before c
468
-
469
- # -- given --
470
- # nothing
471
-
472
- # -- when --
473
- actual = c[:inputs].send c[:method_name]
474
-
475
- # -- then --
476
- expect(actual).to eq(c[:expected])
477
- ensure
478
- case_after c
479
- end
480
- end
481
-
482
- def case_before(c)
483
- # implement each case before
484
- end
485
-
486
- def case_after(c)
487
- # implement each case after
488
- end
489
- end
490
- end
491
- end
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'tbpgr_utils'
4
+
5
+ describe Array do
6
+ context :together do
7
+ cases = [
8
+ {
9
+ case_no: 1,
10
+ case_title: 'valid case',
11
+ inputs: [[1, 2, 3], %w{one two three}],
12
+ expected: ['1:one', '2:two', '3:three'],
13
+ },
14
+ {
15
+ case_no: 2,
16
+ case_title: 'contain nil case',
17
+ inputs: [[1, 2, 3], %w{one two}],
18
+ expected: ['1:one', '2:two', '3:'],
19
+ },
20
+ ]
21
+
22
+ cases.each do |c|
23
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
24
+ begin
25
+ case_before c
26
+
27
+ # -- given --
28
+ # nothing
29
+
30
+ # -- when/then --
31
+ actual = []
32
+ c[:inputs].together do |first, second|
33
+ actual << "#{first}:#{second}"
34
+ end
35
+
36
+ expect(actual).to eq(c[:expected])
37
+ ensure
38
+ case_after c
39
+ end
40
+ end
41
+
42
+ def case_before(c)
43
+ # implement each case before
44
+ end
45
+
46
+ def case_after(c)
47
+ # implement each case after
48
+ end
49
+ end
50
+ end
51
+
52
+ context :together_with_index do
53
+ cases = [
54
+ {
55
+ case_no: 1,
56
+ case_title: 'valid case',
57
+ inputs: [[1, 2, 3], %w{one two three}],
58
+ expected: ['0:1:one', '1:2:two', '2:3:three'],
59
+ },
60
+ {
61
+ case_no: 2,
62
+ case_title: 'contain nil case',
63
+ inputs: [[1, 2, 3], %w{one two}],
64
+ expected: ['0:1:one', '1:2:two', '2:3:'],
65
+ },
66
+ ]
67
+
68
+ cases.each do |c|
69
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
70
+ begin
71
+ case_before c
72
+
73
+ # -- given --
74
+ # nothing
75
+
76
+ # -- when/then --
77
+ actual = []
78
+ c[:inputs].together_with_index do |first, second, index|
79
+ actual << "#{index.to_s}:#{first}:#{second}"
80
+ end
81
+
82
+ expect(actual).to eq(c[:expected])
83
+ ensure
84
+ case_after c
85
+ end
86
+ end
87
+
88
+ def case_before(c)
89
+ # implement each case before
90
+ end
91
+
92
+ def case_after(c)
93
+ # implement each case after
94
+ end
95
+ end
96
+ end
97
+
98
+ context :together_map do
99
+ cases = [
100
+ {
101
+ case_no: 1,
102
+ case_title: 'valid case',
103
+ method_name: :together_map,
104
+ inputs: [[1, 2, 3], %w{one two three}],
105
+ expected: ['1:one', '2:two', '3:three'],
106
+ },
107
+ {
108
+ case_no: 2,
109
+ case_title: 'contain nil case',
110
+ method_name: :together_map,
111
+ inputs: [[1, 2, 3], %w{one two}],
112
+ expected: ['1:one', '2:two', '3:'],
113
+ },
114
+ {
115
+ case_no: 3,
116
+ case_title: 'valid case',
117
+ method_name: :together_map,
118
+ inputs: [[1, 2, 3], %w{one two three}],
119
+ expected: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
120
+ is_multi: true,
121
+ },
122
+ {
123
+ case_no: 4,
124
+ case_title: 'valid case(alias together_collect)',
125
+ method_name: :together_collect,
126
+ inputs: [[1, 2, 3], %w{one two three}],
127
+ expected: ['1:one', '2:two', '3:three'],
128
+ },
129
+ {
130
+ case_no: 5,
131
+ case_title: 'valid case(alias tmap)',
132
+ method_name: :tmap,
133
+ inputs: [[1, 2, 3], %w{one two three}],
134
+ expected: ['1:one', '2:two', '3:three'],
135
+ },
136
+ {
137
+ case_no: 6,
138
+ case_title: 'valid case(alias tcollect)',
139
+ method_name: :tcollect,
140
+ inputs: [[1, 2, 3], %w{one two three}],
141
+ expected: ['1:one', '2:two', '3:three'],
142
+ },
143
+ ]
144
+
145
+ cases.each do |c|
146
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
147
+ begin
148
+ case_before c
149
+
150
+ # -- given --
151
+ # nothing
152
+
153
+ # -- when/then --
154
+ if c[:is_multi]
155
+ actual = c[:inputs].method(c[:method_name]).call { |first, second|["#{first}:#{second}", "#{second}:#{first}"] }
156
+ else
157
+ actual = c[:inputs].method(c[:method_name]).call { |first, second|"#{first}:#{second}" }
158
+ end
159
+
160
+ expect(actual).to eq(c[:expected])
161
+ ensure
162
+ case_after c
163
+ end
164
+ end
165
+
166
+ def case_before(c)
167
+ # implement each case before
168
+ end
169
+
170
+ def case_after(c)
171
+ # implement each case after
172
+ end
173
+ end
174
+ end
175
+
176
+ context :together_select do
177
+ cases = [
178
+ {
179
+ case_no: 1,
180
+ case_title: 'single valid case',
181
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
182
+ condition: 'first == second',
183
+ method_name: :together_select,
184
+ expected: [[2, 3], [2, 3]],
185
+ },
186
+ {
187
+ case_no: 2,
188
+ case_title: 'multi valid case',
189
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
190
+ condition: '[first.odd?, second.even?]',
191
+ expected: [[1, 3], [4, 2]],
192
+ method_name: :together_select,
193
+ },
194
+ {
195
+ case_no: 3,
196
+ case_title: 'multi valid case',
197
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
198
+ condition: '[first.odd?, second.even?]',
199
+ expected: [[1, 3], [4, 2]],
200
+ method_name: :tselect,
201
+ },
202
+ {
203
+ case_no: 4,
204
+ case_title: 'multi valid case',
205
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
206
+ condition: '[first.odd?, second.even?]',
207
+ expected: [[1, 3], [4, 2]],
208
+ method_name: :together_find_all,
209
+ },
210
+ {
211
+ case_no: 5,
212
+ case_title: 'multi valid case',
213
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
214
+ condition: '[first.odd?, second.even?]',
215
+ expected: [[1, 3], [4, 2]],
216
+ method_name: :tfindall,
217
+ },
218
+ ]
219
+
220
+ cases.each do |c|
221
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
222
+ begin
223
+ case_before c
224
+
225
+ # -- given --
226
+ # nothing
227
+
228
+ # -- when/then --
229
+ actual = c[:inputs].method(c[:method_name]).call { |first, second| eval c[:condition], binding }
230
+
231
+ expect(actual).to eq(c[:expected])
232
+ ensure
233
+ case_after c
234
+ end
235
+ end
236
+
237
+ def case_before(c)
238
+ # implement each case before
239
+ end
240
+
241
+ def case_after(c)
242
+ # implement each case after
243
+ end
244
+ end
245
+ end
246
+
247
+ context :together_reduce do
248
+ cases = [
249
+ {
250
+ case_no: 1,
251
+ case_title: 'single valid case',
252
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
253
+ init: nil,
254
+ logic: 'memo + first + second',
255
+ method_name: :together_reduce,
256
+ expected: 20,
257
+ },
258
+ {
259
+ case_no: 2,
260
+ case_title: 'single with init valid case',
261
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
262
+ init: 10,
263
+ logic: 'memo + first + second',
264
+ method_name: :together_reduce,
265
+ expected: 30,
266
+ },
267
+ {
268
+ case_no: 5,
269
+ case_title: 'single valid case',
270
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
271
+ logic: 'memo + first + second',
272
+ expected: 20,
273
+ method_name: :treduce,
274
+ },
275
+ {
276
+ case_no: 6,
277
+ case_title: 'single valid case',
278
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
279
+ logic: 'memo + first + second',
280
+ expected: 20,
281
+ method_name: :together_inject,
282
+ },
283
+ {
284
+ case_no: 7,
285
+ case_title: 'multi valid case',
286
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
287
+ logic: 'memo + first + second',
288
+ expected: 20,
289
+ method_name: :tinject,
290
+ },
291
+ {
292
+ case_no: 8,
293
+ case_title: 'single with init valid array case',
294
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
295
+ init: [],
296
+ logic: 'memo << first + second',
297
+ method_name: :together_reduce,
298
+ expected: [5, 4, 6, 5],
299
+ },
300
+ {
301
+ case_no: 9,
302
+ case_title: 'single with init valid array case',
303
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
304
+ init: {},
305
+ logic: 'memo[first] = second; memo',
306
+ method_name: :together_reduce,
307
+ expected: { 1 => 4, 2 => 2, 3 => 3, 4 => 1 },
308
+ },
309
+ ]
310
+
311
+ cases.each do |c|
312
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
313
+ begin
314
+ case_before c
315
+
316
+ # -- given --
317
+ # nothing
318
+
319
+ # -- when/then --
320
+ if c[:init]
321
+ actual = c[:inputs].method(c[:method_name]).call(c[:init]) { |memo, first, second| eval c[:logic], binding }
322
+ else
323
+ actual = c[:inputs].method(c[:method_name]).call { |memo, first, second| eval c[:logic], binding }
324
+ end
325
+
326
+ expect(actual).to eq(c[:expected])
327
+ ensure
328
+ case_after c
329
+ end
330
+ end
331
+
332
+ def case_before(c)
333
+ # implement each case before
334
+ end
335
+
336
+ def case_after(c)
337
+ # implement each case after
338
+ end
339
+ end
340
+ end
341
+
342
+ context :together_concat do
343
+ cases = [
344
+ {
345
+ case_no: 1,
346
+ case_title: 'valid case',
347
+ inputs: [[1, 2, 3], %w{one two three}],
348
+ add_list: [4, 5, 6],
349
+ method_name: :together_concat,
350
+ expected: [[1, 2, 3, 4, 5, 6], ['one', 'two', 'three', 4, 5, 6]],
351
+ },
352
+ {
353
+ case_no: 2,
354
+ case_title: 'valid case',
355
+ inputs: [[1, 2, 3], %w{one two three}],
356
+ add_list: [4, 5, 6],
357
+ method_name: :tconcat,
358
+ expected: [[1, 2, 3, 4, 5, 6], ['one', 'two', 'three', 4, 5, 6]],
359
+ },
360
+ ]
361
+
362
+ cases.each do |c|
363
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
364
+ begin
365
+ case_before c
366
+
367
+ # -- given --
368
+ # nothing
369
+
370
+ # -- when --
371
+ c[:inputs].send c[:method_name], c[:add_list]
372
+
373
+ # -- then --
374
+ expect(c[:inputs]).to eq(c[:expected])
375
+ ensure
376
+ case_after c
377
+ end
378
+ end
379
+
380
+ def case_before(c)
381
+ # implement each case before
382
+ end
383
+
384
+ def case_after(c)
385
+ # implement each case after
386
+ end
387
+ end
388
+ end
389
+
390
+ context :together_at do
391
+ cases = [
392
+ {
393
+ case_no: 1,
394
+ case_title: 'valid case',
395
+ inputs: [[1, 2, 3], %w{one two three}],
396
+ index: 2,
397
+ method_name: :together_at,
398
+ expected: [3, 'three'],
399
+ },
400
+ {
401
+ case_no: 2,
402
+ case_title: 'contain nil case',
403
+ inputs: [[1, 2, 3], %w{one two}],
404
+ index: 2,
405
+ method_name: :together_at,
406
+ expected: [3, nil],
407
+ },
408
+ {
409
+ case_no: 3,
410
+ case_title: 'valid case',
411
+ inputs: [[1, 2, 3], %w{one two three}],
412
+ index: 2,
413
+ method_name: :tat,
414
+ expected: [3, 'three'],
415
+ },
416
+ ]
417
+
418
+ cases.each do |c|
419
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
420
+ begin
421
+ case_before c
422
+
423
+ # -- given --
424
+ # nothing
425
+
426
+ # -- when --
427
+ actual = c[:inputs].send c[:method_name], c[:index]
428
+
429
+ # -- then --
430
+ expect(actual).to eq(c[:expected])
431
+ ensure
432
+ case_after c
433
+ end
434
+ end
435
+
436
+ def case_before(c)
437
+ # implement each case before
438
+ end
439
+
440
+ def case_after(c)
441
+ # implement each case after
442
+ end
443
+ end
444
+ end
445
+
446
+ context :together_clear do
447
+ cases = [
448
+ {
449
+ case_no: 1,
450
+ case_title: 'valid case',
451
+ inputs: [[1, 2, 3], %w{one two three}],
452
+ method_name: :together_clear,
453
+ expected: [[], []],
454
+ },
455
+ {
456
+ case_no: 2,
457
+ case_title: 'valid case',
458
+ inputs: [[1, 2, 3], %w{one two three}],
459
+ method_name: :tclear,
460
+ expected: [[], []],
461
+ },
462
+ ]
463
+
464
+ cases.each do |c|
465
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
466
+ begin
467
+ case_before c
468
+
469
+ # -- given --
470
+ # nothing
471
+
472
+ # -- when --
473
+ actual = c[:inputs].send c[:method_name]
474
+
475
+ # -- then --
476
+ expect(actual).to eq(c[:expected])
477
+ ensure
478
+ case_after c
479
+ end
480
+ end
481
+
482
+ def case_before(c)
483
+ # implement each case before
484
+ end
485
+
486
+ def case_after(c)
487
+ # implement each case after
488
+ end
489
+ end
490
+ end
491
+
492
+ context :together_compact do
493
+ cases = [
494
+ {
495
+ case_no: 1,
496
+ case_title: 'valid case',
497
+ inputs: [[1, 2, nil, 3], ['a', 'b', 'c', nil, 'd']],
498
+ method_name: :together_compact,
499
+ expected_self: [[1, 2, nil, 3], ['a', 'b', 'c', nil, 'd']],
500
+ expected_ret: [[1, 2, 3], ['a', 'b', 'c', 'd']],
501
+ },
502
+ {
503
+ case_no: 2,
504
+ case_title: 'valid case(use alias tcompact)',
505
+ inputs: [[1, 2, nil, 3], ['a', 'b', 'c', nil, 'd']],
506
+ method_name: :tcompact,
507
+ expected_self: [[1, 2, nil, 3], ['a', 'b', 'c', nil, 'd']],
508
+ expected_ret: [[1, 2, 3], ['a', 'b', 'c', 'd']],
509
+ },
510
+ ]
511
+
512
+ cases.each do |c|
513
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
514
+ begin
515
+ case_before c
516
+
517
+ # -- given --
518
+ # nothing
519
+
520
+ # -- when --
521
+ actual = c[:inputs].send c[:method_name]
522
+
523
+ # -- then --
524
+ expect(c[:inputs]).to eq(c[:expected_self])
525
+ expect(actual).to eq(c[:expected_ret])
526
+ ensure
527
+ case_after c
528
+ end
529
+ end
530
+
531
+ def case_before(c)
532
+ # implement each case before
533
+ end
534
+
535
+ def case_after(c)
536
+ # implement each case after
537
+ end
538
+ end
539
+ end
540
+
541
+
542
+ context :together_compact! do
543
+ cases = [
544
+ {
545
+ case_no: 1,
546
+ case_title: 'valid case',
547
+ inputs: [[1, 2, nil, 3], ['a', 'b', 'c', nil, 'd']],
548
+ method_name: :together_compact!,
549
+ expected_self: [[1, 2, 3], ['a', 'b', 'c', 'd']],
550
+ expected_ret: [[1, 2, 3], ['a', 'b', 'c', 'd']],
551
+ },
552
+ {
553
+ case_no: 2,
554
+ case_title: 'valid case(use alias tcompact)',
555
+ inputs: [[1, 2, nil, 3], ['a', 'b', 'c', nil, 'd']],
556
+ method_name: :tcompact!,
557
+ expected_self: [[1, 2, 3], ['a', 'b', 'c', 'd']],
558
+ expected_ret: [[1, 2, 3], ['a', 'b', 'c', 'd']],
559
+ },
560
+ ]
561
+
562
+ cases.each do |c|
563
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
564
+ begin
565
+ case_before c
566
+
567
+ # -- given --
568
+ # nothing
569
+
570
+ # -- when --
571
+ actual = c[:inputs].send c[:method_name]
572
+
573
+ # -- then --
574
+ expect(c[:inputs]).to eq(c[:expected_self])
575
+ expect(actual).to eq(c[:expected_ret])
576
+ ensure
577
+ case_after c
578
+ end
579
+ end
580
+
581
+ def case_before(c)
582
+ # implement each case before
583
+ end
584
+
585
+ def case_after(c)
586
+ # implement each case after
587
+ end
588
+ end
589
+ end
590
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tbpgr_utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.21
4
+ version: 0.0.22
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-01-28 00:00:00.000000000 Z
12
+ date: 2014-01-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &20610228 !ruby/object:Gem::Requirement
16
+ requirement: &23038980 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 4.0.1
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *20610228
24
+ version_requirements: *23038980
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bundler
27
- requirement: &20609928 !ruby/object:Gem::Requirement
27
+ requirement: &23038680 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '1.3'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *20609928
35
+ version_requirements: *23038680
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &20609700 !ruby/object:Gem::Requirement
38
+ requirement: &23038452 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *20609700
46
+ version_requirements: *23038452
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &20609364 !ruby/object:Gem::Requirement
49
+ requirement: &23038116 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 2.14.1
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *20609364
57
+ version_requirements: *23038116
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: simplecov
60
- requirement: &20609064 !ruby/object:Gem::Requirement
60
+ requirement: &23037816 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: 0.8.2
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *20609064
68
+ version_requirements: *23037816
69
69
  description: Utilities
70
70
  email:
71
71
  - tbpgr@tbpgr.jp
@@ -75,6 +75,7 @@ extra_rdoc_files: []
75
75
  files:
76
76
  - .gitignore
77
77
  - .rspec
78
+ - .rubocop.yml
78
79
  - Gemfile
79
80
  - LICENSE.txt
80
81
  - README.md