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,84 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'tbpgr_utils'
4
+
5
+ describe Array do
6
+ context :together_first do
7
+ cases = [
8
+ {
9
+ case_no: 1,
10
+ case_title: 'not args case',
11
+ inputs: [[*1..5], [*6..10]],
12
+ method_name: :together_first,
13
+ expected: [1, 6],
14
+ has_args: false,
15
+ },
16
+ {
17
+ case_no: 2,
18
+ case_title: 'has args 2 case',
19
+ inputs: [[*1..5], [*6..10]],
20
+ args: 2,
21
+ method_name: :together_first,
22
+ expected: [[1, 2], [6, 7]],
23
+ has_args: true,
24
+ },
25
+ {
26
+ case_no: 3,
27
+ case_title: 'has args 0 case',
28
+ inputs: [[*1..5], [*6..10]],
29
+ args: 0,
30
+ method_name: :together_first,
31
+ expected: [[], []],
32
+ has_args: true,
33
+ },
34
+ {
35
+ case_no: 4,
36
+ case_title: 'has args over size case',
37
+ inputs: [[*1..5], [*6..10]],
38
+ args: 6,
39
+ method_name: :together_first,
40
+ expected: [[*1..5], [*6..10]],
41
+ has_args: true,
42
+ },
43
+ {
44
+ case_no: 5,
45
+ case_title: 'not args case(alias tfirst)',
46
+ inputs: [[*1..5], [*6..10]],
47
+ method_name: :tfirst,
48
+ expected: [1, 6],
49
+ has_args: false,
50
+ },
51
+ ]
52
+
53
+ cases.each do |c|
54
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
55
+ begin
56
+ case_before c
57
+
58
+ # -- given --
59
+ # nothing
60
+
61
+ # -- when --
62
+ if c[:has_args]
63
+ actual = c[:inputs].send c[:method_name], c[:args]
64
+ else
65
+ actual = c[:inputs].send c[:method_name]
66
+ end
67
+
68
+ # -- then --
69
+ expect(actual).to eq(c[:expected])
70
+ ensure
71
+ case_after c
72
+ end
73
+ end
74
+
75
+ def case_before(c)
76
+ # implement each case before
77
+ end
78
+
79
+ def case_after(c)
80
+ # implement each case after
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,100 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'tbpgr_utils'
4
+
5
+ describe Array do
6
+ context :together_include? do
7
+ cases = [
8
+ {
9
+ case_no: 1,
10
+ case_title: 'both include single ret case',
11
+ inputs: [[*1..5], [*5..9]],
12
+ value: 5,
13
+ method_name: :together_include?,
14
+ expected: true,
15
+ is_multi: false,
16
+ },
17
+ {
18
+ case_no: 2,
19
+ case_title: 'one include single ret case',
20
+ inputs: [[*1..5], [*5..9]],
21
+ value: 9,
22
+ method_name: :together_include?,
23
+ expected: true,
24
+ is_multi: false,
25
+ },
26
+ {
27
+ case_no: 3,
28
+ case_title: 'both not include single ret case',
29
+ inputs: [[*1..5], [*5..9]],
30
+ value: 10,
31
+ method_name: :together_include?,
32
+ expected: false,
33
+ is_multi: false,
34
+ },
35
+ {
36
+ case_no: 4,
37
+ case_title: 'both include multi ret case',
38
+ inputs: [[*1..5], [*5..9]],
39
+ value: 5,
40
+ method_name: :together_include?,
41
+ expected: [true, true],
42
+ is_multi: true,
43
+ },
44
+ {
45
+ case_no: 5,
46
+ case_title: 'one include multi ret case',
47
+ inputs: [[*1..5], [*5..9]],
48
+ value: 9,
49
+ method_name: :together_include?,
50
+ expected: [false, true],
51
+ is_multi: true,
52
+ },
53
+ {
54
+ case_no: 6,
55
+ case_title: 'both not include multi ret case',
56
+ inputs: [[*1..5], [*5..9]],
57
+ value: 10,
58
+ method_name: :together_include?,
59
+ expected: [false, false],
60
+ is_multi: true,
61
+ },
62
+ {
63
+ case_no: 7,
64
+ case_title: 'both include single ret case(alias tinclude?)',
65
+ inputs: [[*1..5], [*5..9]],
66
+ value: 5,
67
+ method_name: :tinclude?,
68
+ expected: true,
69
+ is_multi: false,
70
+ },
71
+ ]
72
+
73
+ cases.each do |c|
74
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
75
+ begin
76
+ case_before c
77
+
78
+ # -- given --
79
+ # nothing
80
+
81
+ # -- when --
82
+ actual = c[:inputs].send c[:method_name], c[:value], c[:is_multi]
83
+
84
+ # -- then --
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,69 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'tbpgr_utils'
4
+
5
+ describe Array do
6
+ context :together_index do
7
+ cases = [
8
+ {
9
+ case_no: 1,
10
+ case_title: 'both index exist case',
11
+ inputs: [[*1..5], [*5..9]],
12
+ value: 5,
13
+ method_name: :together_index,
14
+ expected: [4, 0],
15
+ },
16
+ {
17
+ case_no: 2,
18
+ case_title: 'one index exist case',
19
+ inputs: [[*1..5], [*5..9]],
20
+ value: 4,
21
+ method_name: :together_index,
22
+ expected: [3, nil],
23
+ },
24
+ {
25
+ case_no: 3,
26
+ case_title: 'both not exist index case',
27
+ inputs: [[*1..5], [*5..9]],
28
+ value: 10,
29
+ method_name: :together_index,
30
+ expected: [nil, nil],
31
+ },
32
+ {
33
+ case_no: 4,
34
+ case_title: 'both index exist case(alias tindex)',
35
+ inputs: [[*1..5], [*5..9]],
36
+ value: 5,
37
+ method_name: :tindex,
38
+ expected: [4, 0],
39
+ },
40
+ ]
41
+
42
+ cases.each do |c|
43
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
44
+ begin
45
+ case_before c
46
+
47
+ # -- given --
48
+ # nothing
49
+
50
+ # -- when --
51
+ actual = c[:inputs].send c[:method_name], c[:value]
52
+
53
+ # -- then --
54
+ expect(actual).to eq(c[:expected])
55
+ ensure
56
+ case_after c
57
+ end
58
+ end
59
+
60
+ def case_before(c)
61
+ # implement each case before
62
+ end
63
+
64
+ def case_after(c)
65
+ # implement each case after
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,65 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'tbpgr_utils'
4
+
5
+ describe Array do
6
+ context :together_insert do
7
+ cases = [
8
+ {
9
+ case_no: 1,
10
+ case_title: 'both insert exist case',
11
+ inputs: [[*1..5], [*5..9]],
12
+ exec_code: 'together_insert(1, 55, 66)',
13
+ expected: [[1, 55, 66, 2, 3, 4, 5], [5, 55, 66, 6, 7, 8, 9]],
14
+ },
15
+ {
16
+ case_no: 2,
17
+ case_title: 'both insert exist and minus index case',
18
+ inputs: [[*1..5], [*5..9]],
19
+ exec_code: 'together_insert(-2, 55, 66)',
20
+ expected: [[1, 2, 3, 4, 55, 66, 5], [5, 6, 7, 8, 55, 66, 9]],
21
+ },
22
+ {
23
+ case_no: 3,
24
+ case_title: 'both insert exist and over index case',
25
+ inputs: [[*1..5], [*5..9]],
26
+ exec_code: 'together_insert(6, 55, 66)',
27
+ expected: [[1, 2, 3, 4, 5, nil, 55, 66], [5, 6, 7, 8, 9, nil, 55, 66]],
28
+ },
29
+ {
30
+ case_no: 4,
31
+ case_title: 'both insert exist case(alias tinsert)',
32
+ inputs: [[*1..5], [*5..9]],
33
+ exec_code: 'tinsert(1, 55, 66)',
34
+ expected: [[1, 55, 66, 2, 3, 4, 5], [5, 55, 66, 6, 7, 8, 9]],
35
+ },
36
+ ]
37
+
38
+ cases.each do |c|
39
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
40
+ begin
41
+ case_before c
42
+
43
+ # -- given --
44
+ # nothing
45
+
46
+ # -- when --
47
+ actual = eval "#{c[:inputs]}.#{c[:exec_code]}", binding
48
+
49
+ # -- then --
50
+ expect(actual).to eq(c[:expected])
51
+ ensure
52
+ case_after c
53
+ end
54
+ end
55
+
56
+ def case_before(c)
57
+ # implement each case before
58
+ end
59
+
60
+ def case_after(c)
61
+ # implement each case after
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,84 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'tbpgr_utils'
4
+
5
+ describe Array do
6
+ context :together_last do
7
+ cases = [
8
+ {
9
+ case_no: 1,
10
+ case_title: 'not args case',
11
+ inputs: [[*1..5], [*6..10]],
12
+ method_name: :together_last,
13
+ expected: [5, 10],
14
+ has_args: false,
15
+ },
16
+ {
17
+ case_no: 2,
18
+ case_title: 'has args 2 case',
19
+ inputs: [[*1..5], [*6..10]],
20
+ args: 2,
21
+ method_name: :together_last,
22
+ expected: [[4, 5], [9, 10]],
23
+ has_args: true,
24
+ },
25
+ {
26
+ case_no: 3,
27
+ case_title: 'has args 0 case',
28
+ inputs: [[*1..5], [*6..10]],
29
+ args: 0,
30
+ method_name: :together_last,
31
+ expected: [[], []],
32
+ has_args: true,
33
+ },
34
+ {
35
+ case_no: 4,
36
+ case_title: 'has args over size case',
37
+ inputs: [[*1..5], [*6..10]],
38
+ args: 6,
39
+ method_name: :together_last,
40
+ expected: [[*1..5], [*6..10]],
41
+ has_args: true,
42
+ },
43
+ {
44
+ case_no: 5,
45
+ case_title: 'not args case(alias tlast)',
46
+ inputs: [[*1..5], [*6..10]],
47
+ method_name: :tlast,
48
+ expected: [5, 10],
49
+ has_args: false,
50
+ },
51
+ ]
52
+
53
+ cases.each do |c|
54
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
55
+ begin
56
+ case_before c
57
+
58
+ # -- given --
59
+ # nothing
60
+
61
+ # -- when --
62
+ if c[:has_args]
63
+ actual = c[:inputs].send c[:method_name], c[:args]
64
+ else
65
+ actual = c[:inputs].send c[:method_name]
66
+ end
67
+
68
+ # -- then --
69
+ expect(actual).to eq(c[:expected])
70
+ ensure
71
+ case_after c
72
+ end
73
+ end
74
+
75
+ def case_before(c)
76
+ # implement each case before
77
+ end
78
+
79
+ def case_after(c)
80
+ # implement each case after
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,171 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'tbpgr_utils'
4
+
5
+ describe Array do
6
+ context :together_map do
7
+ cases = [
8
+ {
9
+ case_no: 1,
10
+ case_title: 'valid case',
11
+ method_name: :together_map,
12
+ inputs: [[1, 2, 3], %w{one two three}],
13
+ expected: ['1:one', '2:two', '3:three'],
14
+ },
15
+ {
16
+ case_no: 2,
17
+ case_title: 'contain nil case',
18
+ method_name: :together_map,
19
+ inputs: [[1, 2, 3], %w{one two}],
20
+ expected: ['1:one', '2:two', '3:'],
21
+ },
22
+ {
23
+ case_no: 3,
24
+ case_title: 'valid case',
25
+ method_name: :together_map,
26
+ inputs: [[1, 2, 3], %w{one two three}],
27
+ expected: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
28
+ is_multi: true,
29
+ },
30
+ {
31
+ case_no: 4,
32
+ case_title: 'valid case(alias together_collect)',
33
+ method_name: :together_collect,
34
+ inputs: [[1, 2, 3], %w{one two three}],
35
+ expected: ['1:one', '2:two', '3:three'],
36
+ },
37
+ {
38
+ case_no: 5,
39
+ case_title: 'valid case(alias tmap)',
40
+ method_name: :tmap,
41
+ inputs: [[1, 2, 3], %w{one two three}],
42
+ expected: ['1:one', '2:two', '3:three'],
43
+ },
44
+ {
45
+ case_no: 6,
46
+ case_title: 'valid case(alias tcollect)',
47
+ method_name: :tcollect,
48
+ inputs: [[1, 2, 3], %w{one two three}],
49
+ expected: ['1:one', '2:two', '3:three'],
50
+ },
51
+ ]
52
+
53
+ cases.each do |c|
54
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
55
+ begin
56
+ case_before c
57
+
58
+ # -- given --
59
+ # nothing
60
+
61
+ # -- when/then --
62
+ if c[:is_multi]
63
+ actual = c[:inputs].method(c[:method_name]).call { |first, second|["#{first}:#{second}", "#{second}:#{first}"] }
64
+ else
65
+ actual = c[:inputs].method(c[:method_name]).call { |first, second|"#{first}:#{second}" }
66
+ end
67
+
68
+ expect(actual).to eq(c[:expected])
69
+ ensure
70
+ case_after c
71
+ end
72
+ end
73
+
74
+ def case_before(c)
75
+ # implement each case before
76
+ end
77
+
78
+ def case_after(c)
79
+ # implement each case after
80
+ end
81
+ end
82
+ end
83
+
84
+ context :together_map! do
85
+ cases = [
86
+ {
87
+ case_no: 1,
88
+ case_title: 'valid case',
89
+ method_name: :together_map!,
90
+ inputs: [[1, 2, 3], %w{one two three}],
91
+ expected_ret: ['1:one', '2:two', '3:three'],
92
+ expected_self: ['1:one', '2:two', '3:three'],
93
+ },
94
+ {
95
+ case_no: 2,
96
+ case_title: 'contain nil case',
97
+ method_name: :together_map!,
98
+ inputs: [[1, 2, 3], %w{one two}],
99
+ expected_ret: ['1:one', '2:two', '3:'],
100
+ expected_self: ['1:one', '2:two', '3:'],
101
+ },
102
+ {
103
+ case_no: 3,
104
+ case_title: 'valid case',
105
+ method_name: :together_map!,
106
+ inputs: [[1, 2, 3], %w{one two three}],
107
+ expected_ret: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
108
+ expected_self: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
109
+ is_multi: true,
110
+ },
111
+ {
112
+ case_no: 4,
113
+ case_title: 'valid case(alias together_collect!)',
114
+ method_name: :together_collect!,
115
+ inputs: [[1, 2, 3], %w{one two three}],
116
+ expected_ret: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
117
+ expected_self: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
118
+ is_multi: true,
119
+ },
120
+ {
121
+ case_no: 5,
122
+ case_title: 'valid case(alias tmap!)',
123
+ method_name: :tmap!,
124
+ inputs: [[1, 2, 3], %w{one two three}],
125
+ expected_ret: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
126
+ expected_self: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
127
+ is_multi: true,
128
+ },
129
+ {
130
+ case_no: 6,
131
+ case_title: 'valid case(alias tcollect!)',
132
+ method_name: :tcollect!,
133
+ inputs: [[1, 2, 3], %w{one two three}],
134
+ expected_ret: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
135
+ expected_self: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
136
+ is_multi: true,
137
+ },
138
+ ]
139
+
140
+ cases.each do |c|
141
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
142
+ begin
143
+ case_before c
144
+
145
+ # -- given --
146
+ # nothing
147
+
148
+ # -- when/then --
149
+ if c[:is_multi]
150
+ actual = c[:inputs].method(c[:method_name]).call { |first, second|["#{first}:#{second}", "#{second}:#{first}"] }
151
+ else
152
+ actual = c[:inputs].method(c[:method_name]).call { |first, second|"#{first}:#{second}" }
153
+ end
154
+
155
+ expect(actual).to eq(c[:expected_ret])
156
+ expect(c[:inputs]).to eq(c[:expected_self])
157
+ ensure
158
+ case_after c
159
+ end
160
+ end
161
+
162
+ def case_before(c)
163
+ # implement each case before
164
+ end
165
+
166
+ def case_after(c)
167
+ # implement each case after
168
+ end
169
+ end
170
+ end
171
+ 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_pop do
7
+ cases = [
8
+ {
9
+ case_no: 1,
10
+ case_title: 'not empty case',
11
+ inputs: [[1, 2], [5, 6]],
12
+ method_name: 'together_pop',
13
+ expected_ret: [2, 6],
14
+ expected_self: [[1], [5]],
15
+ },
16
+ {
17
+ case_no: 2,
18
+ case_title: 'one empty case',
19
+ inputs: [[1, 2], []],
20
+ method_name: 'together_pop',
21
+ expected_ret: [2, nil],
22
+ expected_self: [[1], []],
23
+ },
24
+ {
25
+ case_no: 3,
26
+ case_title: 'both empty case',
27
+ inputs: [[], []],
28
+ method_name: 'together_pop',
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_pop',
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_pop',
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_pop',
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 tpop)',
65
+ inputs: [[1, 2], [5, 6]],
66
+ method_name: 'tpop',
67
+ expected_ret: [2, 6],
68
+ expected_self: [[1], [5]],
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