tbpgr_utils 0.0.36 → 0.0.37

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.
Files changed (53) hide show
  1. data/README.md +40 -1
  2. data/lib/open_classes/array/together.rb +23 -0
  3. data/lib/open_classes/array/together_at.rb +29 -0
  4. data/lib/open_classes/array/together_clear.rb +24 -0
  5. data/lib/open_classes/array/together_compact.rb +44 -0
  6. data/lib/open_classes/array/together_concat.rb +25 -0
  7. data/lib/open_classes/array/together_delete.rb +46 -0
  8. data/lib/open_classes/array/together_delete_at.rb +43 -0
  9. data/lib/open_classes/array/together_delete_if.rb +38 -0
  10. data/lib/open_classes/array/together_empty.rb +31 -0
  11. data/lib/open_classes/array/together_fill.rb +43 -0
  12. data/lib/open_classes/array/together_first.rb +40 -0
  13. data/lib/open_classes/array/together_helper.rb +25 -0
  14. data/lib/open_classes/array/together_include.rb +50 -0
  15. data/lib/open_classes/array/together_index.rb +34 -0
  16. data/lib/open_classes/array/together_insert.rb +34 -0
  17. data/lib/open_classes/array/together_last.rb +40 -0
  18. data/lib/open_classes/array/together_map.rb +87 -0
  19. data/lib/open_classes/array/together_pop.rb +47 -0
  20. data/lib/open_classes/array/together_reduce.rb +59 -0
  21. data/lib/open_classes/array/together_reverse.rb +53 -0
  22. data/lib/open_classes/array/together_sample.rb +49 -0
  23. data/lib/open_classes/array/together_select.rb +50 -0
  24. data/lib/open_classes/array/together_shift.rb +47 -0
  25. data/lib/open_classes/array/together_with_index.rb +24 -0
  26. data/lib/open_classes/array.rb +23 -718
  27. data/lib/tbpgr_utils/version.rb +1 -1
  28. data/spec/open_classes/array/together_at_spec.rb +61 -0
  29. data/spec/open_classes/array/together_clear_spec.rb +51 -0
  30. data/spec/open_classes/array/together_compact_spec.rb +103 -0
  31. data/spec/open_classes/array/together_concat_spec.rb +53 -0
  32. data/spec/open_classes/array/together_delete_at_spec.rb +78 -0
  33. data/spec/open_classes/array/together_delete_if_spec.rb +61 -0
  34. data/spec/open_classes/array/together_delete_spec.rb +80 -0
  35. data/spec/open_classes/array/together_empty_spec.rb +58 -0
  36. data/spec/open_classes/array/together_fill_spec.rb +79 -0
  37. data/spec/open_classes/array/together_first_spec.rb +84 -0
  38. data/spec/open_classes/array/together_include_spec.rb +100 -0
  39. data/spec/open_classes/array/together_index_spec.rb +69 -0
  40. data/spec/open_classes/array/together_insert_spec.rb +65 -0
  41. data/spec/open_classes/array/together_last_spec.rb +84 -0
  42. data/spec/open_classes/array/together_map_spec.rb +171 -0
  43. data/spec/open_classes/array/together_pop_spec.rb +105 -0
  44. data/spec/open_classes/array/together_reduce_spec.rb +100 -0
  45. data/spec/open_classes/array/together_reverse_spec.rb +119 -0
  46. data/spec/open_classes/array/together_select_spec.rb +76 -0
  47. data/spec/open_classes/array/together_shift_spec.rb +105 -0
  48. data/spec/open_classes/array/together_spec.rb +51 -0
  49. data/spec/open_classes/array/together_with_index_spec.rb +51 -0
  50. data/spec/open_classes/together_sample_spec.rb +122 -0
  51. data/spec/spec_helper.rb +1 -1
  52. metadata +82 -14
  53. data/spec/open_classes/array_spec.rb +0 -1699
@@ -0,0 +1,100 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'tbpgr_utils'
4
+
5
+ describe Array do
6
+ context :together_reduce do
7
+ cases = [
8
+ {
9
+ case_no: 1,
10
+ case_title: 'single valid case',
11
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
12
+ init: nil,
13
+ logic: 'memo + first + second',
14
+ method_name: :together_reduce,
15
+ expected: 20,
16
+ },
17
+ {
18
+ case_no: 2,
19
+ case_title: 'single with init valid case',
20
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
21
+ init: 10,
22
+ logic: 'memo + first + second',
23
+ method_name: :together_reduce,
24
+ expected: 30,
25
+ },
26
+ {
27
+ case_no: 5,
28
+ case_title: 'single valid case',
29
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
30
+ logic: 'memo + first + second',
31
+ expected: 20,
32
+ method_name: :treduce,
33
+ },
34
+ {
35
+ case_no: 6,
36
+ case_title: 'single valid case',
37
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
38
+ logic: 'memo + first + second',
39
+ expected: 20,
40
+ method_name: :together_inject,
41
+ },
42
+ {
43
+ case_no: 7,
44
+ case_title: 'multi valid case',
45
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
46
+ logic: 'memo + first + second',
47
+ expected: 20,
48
+ method_name: :tinject,
49
+ },
50
+ {
51
+ case_no: 8,
52
+ case_title: 'single with init valid array case',
53
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
54
+ init: [],
55
+ logic: 'memo << first + second',
56
+ method_name: :together_reduce,
57
+ expected: [5, 4, 6, 5],
58
+ },
59
+ {
60
+ case_no: 9,
61
+ case_title: 'single with init valid array case',
62
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
63
+ init: {},
64
+ logic: 'memo[first] = second; memo',
65
+ method_name: :together_reduce,
66
+ expected: { 1 => 4, 2 => 2, 3 => 3, 4 => 1 },
67
+ },
68
+ ]
69
+
70
+ cases.each do |c|
71
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
72
+ begin
73
+ case_before c
74
+
75
+ # -- given --
76
+ # nothing
77
+
78
+ # -- when/then --
79
+ if c[:init]
80
+ actual = c[:inputs].method(c[:method_name]).call(c[:init]) { |memo, first, second| eval c[:logic], binding }
81
+ else
82
+ actual = c[:inputs].method(c[:method_name]).call { |memo, first, second| eval c[:logic], binding }
83
+ end
84
+
85
+ expect(actual).to eq(c[:expected])
86
+ ensure
87
+ case_after c
88
+ end
89
+ end
90
+
91
+ def case_before(c)
92
+ # implement each case before
93
+ end
94
+
95
+ def case_after(c)
96
+ # implement each case after
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,119 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'tbpgr_utils'
4
+
5
+ describe Array do
6
+ context :together_reverse do
7
+ cases = [
8
+ {
9
+ case_no: 1,
10
+ case_title: 'not empty case',
11
+ inputs: [[1, 2], [5, 6]],
12
+ method_name: 'together_reverse',
13
+ expected_ret: [[2, 1], [6, 5]],
14
+ expected_self: [[1, 2], [5, 6]],
15
+ },
16
+ {
17
+ case_no: 2,
18
+ case_title: 'one empty case',
19
+ inputs: [[1, 2], []],
20
+ method_name: 'together_reverse',
21
+ expected_ret: [[2, 1], []],
22
+ expected_self: [[1, 2], []],
23
+ },
24
+ {
25
+ case_no: 3,
26
+ case_title: 'not empty case(alias treverse)',
27
+ inputs: [[1, 2], [5, 6]],
28
+ method_name: 'treverse',
29
+ expected_ret: [[2, 1], [6, 5]],
30
+ expected_self: [[1, 2], [5, 6]],
31
+ },
32
+ ]
33
+
34
+ cases.each do |c|
35
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
36
+ begin
37
+ case_before c
38
+
39
+ # -- given --
40
+ # nothing
41
+
42
+ # -- when --
43
+ actual = c[:inputs].send c[:method_name]
44
+
45
+ # -- then --
46
+ expect(actual).to eq(c[:expected_ret])
47
+ expect(c[:inputs]).to eq(c[:expected_self])
48
+ ensure
49
+ case_after c
50
+ end
51
+ end
52
+
53
+ def case_before(c)
54
+ # implement each case before
55
+ end
56
+
57
+ def case_after(c)
58
+ # implement each case after
59
+ end
60
+ end
61
+ end
62
+
63
+ context :together_reverse! do
64
+ cases = [
65
+ {
66
+ case_no: 1,
67
+ case_title: 'not empty case',
68
+ inputs: [[1, 2], [5, 6]],
69
+ method_name: 'together_reverse!',
70
+ expected_ret: [[2, 1], [6, 5]],
71
+ expected_self: [[2, 1], [6, 5]],
72
+ },
73
+ {
74
+ case_no: 2,
75
+ case_title: 'one empty case',
76
+ inputs: [[1, 2], []],
77
+ method_name: 'together_reverse!',
78
+ expected_ret: [[2, 1], []],
79
+ expected_self: [[2, 1], []],
80
+ },
81
+ {
82
+ case_no: 3,
83
+ case_title: 'not empty case(alias treverse!)',
84
+ inputs: [[1, 2], [5, 6]],
85
+ method_name: 'treverse!',
86
+ expected_ret: [[2, 1], [6, 5]],
87
+ expected_self: [[2, 1], [6, 5]],
88
+ },
89
+ ]
90
+
91
+ cases.each do |c|
92
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
93
+ begin
94
+ case_before c
95
+
96
+ # -- given --
97
+ # nothing
98
+
99
+ # -- when --
100
+ actual = c[:inputs].send c[:method_name]
101
+
102
+ # -- then --
103
+ expect(actual).to eq(c[:expected_ret])
104
+ expect(c[:inputs]).to eq(c[:expected_self])
105
+ ensure
106
+ case_after c
107
+ end
108
+ end
109
+
110
+ def case_before(c)
111
+ # implement each case before
112
+ end
113
+
114
+ def case_after(c)
115
+ # implement each case after
116
+ end
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,76 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'tbpgr_utils'
4
+
5
+ describe Array do
6
+ context :together_select do
7
+ cases = [
8
+ {
9
+ case_no: 1,
10
+ case_title: 'single valid case',
11
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
12
+ condition: 'first == second',
13
+ method_name: :together_select,
14
+ expected: [[2, 3], [2, 3]],
15
+ },
16
+ {
17
+ case_no: 2,
18
+ case_title: 'multi valid case',
19
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
20
+ condition: '[first.odd?, second.even?]',
21
+ expected: [[1, 3], [4, 2]],
22
+ method_name: :together_select,
23
+ },
24
+ {
25
+ case_no: 3,
26
+ case_title: 'multi valid case',
27
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
28
+ condition: '[first.odd?, second.even?]',
29
+ expected: [[1, 3], [4, 2]],
30
+ method_name: :tselect,
31
+ },
32
+ {
33
+ case_no: 4,
34
+ case_title: 'multi valid case',
35
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
36
+ condition: '[first.odd?, second.even?]',
37
+ expected: [[1, 3], [4, 2]],
38
+ method_name: :together_find_all,
39
+ },
40
+ {
41
+ case_no: 5,
42
+ case_title: 'multi valid case',
43
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
44
+ condition: '[first.odd?, second.even?]',
45
+ expected: [[1, 3], [4, 2]],
46
+ method_name: :tfindall,
47
+ },
48
+ ]
49
+
50
+ cases.each do |c|
51
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
52
+ begin
53
+ case_before c
54
+
55
+ # -- given --
56
+ # nothing
57
+
58
+ # -- when/then --
59
+ actual = c[:inputs].method(c[:method_name]).call { |first, second| eval c[:condition], binding }
60
+
61
+ expect(actual).to eq(c[:expected])
62
+ ensure
63
+ case_after c
64
+ end
65
+ end
66
+
67
+ def case_before(c)
68
+ # implement each case before
69
+ end
70
+
71
+ def case_after(c)
72
+ # implement each case after
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,105 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'tbpgr_utils'
4
+
5
+ describe Array do
6
+ context :together_shift do
7
+ cases = [
8
+ {
9
+ case_no: 1,
10
+ case_title: 'not empty case',
11
+ inputs: [[1, 2], [5, 6]],
12
+ method_name: 'together_shift',
13
+ expected_ret: [1, 5],
14
+ expected_self: [[2], [6]],
15
+ },
16
+ {
17
+ case_no: 2,
18
+ case_title: 'one empty case',
19
+ inputs: [[1, 2], []],
20
+ method_name: 'together_shift',
21
+ expected_ret: [1, nil],
22
+ expected_self: [[2], []],
23
+ },
24
+ {
25
+ case_no: 3,
26
+ case_title: 'both empty case',
27
+ inputs: [[], []],
28
+ method_name: 'together_shift',
29
+ expected_ret: [nil, nil],
30
+ expected_self: [[], []],
31
+ },
32
+ {
33
+ case_no: 4,
34
+ case_title: 'not empty, has args case',
35
+ inputs: [[1, 2], [5, 6]],
36
+ method_name: 'together_shift',
37
+ args: 2,
38
+ expected_ret: [[1, 2], [5, 6]],
39
+ expected_self: [[], []],
40
+ has_args: true,
41
+ },
42
+ {
43
+ case_no: 5,
44
+ case_title: 'one empty, has args case',
45
+ inputs: [[1, 2], []],
46
+ method_name: 'together_shift',
47
+ args: 2,
48
+ expected_ret: [[1, 2], []],
49
+ expected_self: [[], []],
50
+ has_args: true,
51
+ },
52
+ {
53
+ case_no: 6,
54
+ case_title: 'both empty, has args case',
55
+ inputs: [[], []],
56
+ method_name: 'together_shift',
57
+ args: 2,
58
+ expected_ret: [[], []],
59
+ expected_self: [[], []],
60
+ has_args: true,
61
+ },
62
+ {
63
+ case_no: 7,
64
+ case_title: 'not empty case(alias tshift)',
65
+ inputs: [[1, 2], [5, 6]],
66
+ method_name: 'tshift',
67
+ expected_ret: [1, 5],
68
+ expected_self: [[2], [6]],
69
+ },
70
+ ]
71
+
72
+ cases.each do |c|
73
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
74
+ begin
75
+ case_before c
76
+
77
+ # -- given --
78
+ # nothing
79
+
80
+ # -- when --
81
+ actual = \
82
+ if c[:has_args]
83
+ c[:inputs].send c[:method_name], c[:args]
84
+ else
85
+ c[:inputs].send c[:method_name]
86
+ end
87
+
88
+ # -- then --
89
+ expect(actual).to eq(c[:expected_ret])
90
+ expect(c[:inputs]).to eq(c[:expected_self])
91
+ ensure
92
+ case_after c
93
+ end
94
+ end
95
+
96
+ def case_before(c)
97
+ # implement each case before
98
+ end
99
+
100
+ def case_after(c)
101
+ # implement each case after
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,51 @@
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
+ end
@@ -0,0 +1,51 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'tbpgr_utils'
4
+
5
+ describe Array do
6
+ context :together_with_index do
7
+ cases = [
8
+ {
9
+ case_no: 1,
10
+ case_title: 'valid case',
11
+ inputs: [[1, 2, 3], %w{one two three}],
12
+ expected: ['0:1:one', '1:2:two', '2:3:three'],
13
+ },
14
+ {
15
+ case_no: 2,
16
+ case_title: 'contain nil case',
17
+ inputs: [[1, 2, 3], %w{one two}],
18
+ expected: ['0:1:one', '1:2:two', '2: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_with_index do |first, second, index|
33
+ actual << "#{index.to_s}:#{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
+ end
@@ -0,0 +1,122 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require "active_support/core_ext/object/inclusion"
4
+ require 'tbpgr_utils'
5
+
6
+ describe Array do
7
+ context :together_sample do
8
+ cases = [
9
+ {
10
+ case_no: 1,
11
+ case_title: 'not empty case',
12
+ inputs: [[1, 2], [5, 6]],
13
+ method_name: 'together_sample',
14
+ expected_first: "actual[0].in? [1, 2]",
15
+ expected_second: "actual[1].in? [5, 6]",
16
+ },
17
+ {
18
+ case_no: 2,
19
+ case_title: 'one empty case',
20
+ inputs: [[1, 2], []],
21
+ method_name: 'together_sample',
22
+ expected_first: "actual[0].in? [1, 2]",
23
+ expected_second: "actual[1].nil?",
24
+ },
25
+ {
26
+ case_no: 3,
27
+ case_title: 'both empty case',
28
+ inputs: [[], []],
29
+ method_name: 'together_sample',
30
+ expected_first: "actual[0].nil?",
31
+ expected_second: "actual[1].nil?",
32
+ },
33
+ {
34
+ case_no: 4,
35
+ case_title: 'not empty, has args case',
36
+ inputs: [[1, 2], [5, 6]],
37
+ method_name: 'together_sample',
38
+ args: 2,
39
+ expected_size: 2,
40
+ expected_first: "f.in? [1, 2]",
41
+ expected_second: "s.in? [5, 6]",
42
+ has_args: true,
43
+ },
44
+ {
45
+ case_no: 5,
46
+ case_title: 'both empty, has args case',
47
+ inputs: [[], []],
48
+ method_name: 'together_sample',
49
+ args: 2,
50
+ expected_size: 0,
51
+ expected_ret: [[], []],
52
+ expected_self: [[], []],
53
+ has_args: true,
54
+ },
55
+ {
56
+ case_no: 6,
57
+ case_title: 'not empty, over size, has args case',
58
+ inputs: [[1, 2], [5, 6]],
59
+ method_name: 'together_sample',
60
+ args: 3,
61
+ expected_size: 2,
62
+ expected_first: "f.in? [1, 2]",
63
+ expected_second: "s.in? [5, 6]",
64
+ has_args: true,
65
+ },
66
+ {
67
+ case_no: 7,
68
+ case_title: 'not empty case',
69
+ inputs: [[1, 2], [5, 6]],
70
+ method_name: 'tsample',
71
+ expected_first: "actual[0].in? [1, 2]",
72
+ expected_second: "actual[1].in? [5, 6]",
73
+ },
74
+ ]
75
+
76
+ cases.each do |c|
77
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
78
+ begin
79
+ case_before c
80
+
81
+ # -- given --
82
+ # nothing
83
+
84
+ # -- when --
85
+ if c[:has_args]
86
+ actual = c[:inputs].send c[:method_name], c[:args]
87
+ # -- then --
88
+ actual[0].each do |f|
89
+ first_ret = eval c[:expected_first], binding
90
+ expect(first_ret).to be_true
91
+ end
92
+ expect(actual[0].size).to eq(c[:expected_size])
93
+
94
+ actual[1].each do |s|
95
+ second_ret = eval c[:expected_second], binding
96
+ expect(second_ret).to be_true
97
+ end
98
+ expect(actual[1].size).to eq(c[:expected_size])
99
+ else
100
+ actual = c[:inputs].send c[:method_name]
101
+ # -- then --
102
+ first_ret = eval c[:expected_first], binding
103
+ expect(first_ret).to be_true
104
+ second_ret = eval c[:expected_second], binding
105
+ expect(second_ret).to be_true
106
+ end
107
+
108
+ ensure
109
+ case_after c
110
+ end
111
+ end
112
+
113
+ def case_before(c)
114
+ # implement each case before
115
+ end
116
+
117
+ def case_after(c)
118
+ # implement each case after
119
+ end
120
+ end
121
+ end
122
+ end
data/spec/spec_helper.rb CHANGED
@@ -7,7 +7,7 @@ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
7
7
  Coveralls::SimpleCov::Formatter
8
8
  ]
9
9
  SimpleCov.start do
10
- add_filter "/spec/"
10
+ add_filter '/spec/'
11
11
  end
12
12
  RSpec.configure do |config|
13
13
  config.treat_symbols_as_metadata_keys_with_true_values = true