merge_enum 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/README.md +2 -2
- data/lib/merge_enum/merge_enumerable.rb +35 -6
- data/lib/merge_enum/version.rb +1 -1
- data/spec/merge_enum/merge_enumerable_spec.rb +314 -165
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7a7cbcc12b63d8c7a55b8d4c4d3f8de7a749c400
|
4
|
+
data.tar.gz: 197e9e1c595d09167bf84fec15ee6488febd3f15
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6f3eb08663c8186902352a71b5b007bdb08f4214087a0f18b578d48e3a01af04bd760824db481a351aa4c7d6e27f5dda7c9b949f887d829d5141bb5650663a1f
|
7
|
+
data.tar.gz: ea1d6992ceeff7c5832f8c01e6187a40672379db773f4215841005d07666114f1ce7adb49af717ffebf95e0235727f7c61b09bf3f66449a890081798abccbc0d
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# MergeEnum
|
2
|
-
###### ver 0.
|
2
|
+
###### ver 0.3.0
|
3
3
|
|
4
4
|
複数のEnumerale(*1)を連結(合成)するEnumerableです。
|
5
5
|
要素が必要になった時点で追加するように動作します。
|
@@ -67,7 +67,7 @@ Or install it yourself as:
|
|
67
67
|
|
68
68
|
* `MergeEnum::MergeEnumerable.new(enum_1, enum_2, ... , options = {})`
|
69
69
|
`enum_x` : Enumerable(*1)、もしくは、Enumerable(*1)を返すProcオブジェクト
|
70
|
-
`options` : ハッシュ形式のオプション `{ first: <Integer
|
70
|
+
`options` : ハッシュ形式のオプション `{ first: <Integer:要素を取得する最大サイズ>, compact: <bool|Proc:nilを判定して除去する> }`
|
71
71
|
|
72
72
|
* `Enumerable#merge_enum(enum_2, enum_3, ... , options = {})`
|
73
73
|
レシーバ自身を`enum_1`として、`MergeEnumerable.new(enum_1, enum_2, enum_3, ... , options)`を返します
|
@@ -16,34 +16,63 @@ module MergeEnum
|
|
16
16
|
|
17
17
|
def each &block
|
18
18
|
return self.to_enum unless block_given?
|
19
|
-
|
19
|
+
|
20
|
+
# options
|
20
21
|
opt_fst = @options[:first]
|
22
|
+
opt_fst = opt_fst.to_i if opt_fst
|
23
|
+
opt_cmpct = @options[:compact]
|
24
|
+
opt_cmpct_proc = if opt_cmpct.is_a? Proc
|
25
|
+
if opt_cmpct.arity == 0
|
26
|
+
-> (e) { opt_cmpct.call }
|
27
|
+
else
|
28
|
+
opt_cmpct
|
29
|
+
end
|
30
|
+
elsif opt_cmpct
|
31
|
+
-> (e) { e.nil? }
|
32
|
+
else
|
33
|
+
-> (e) { false }
|
34
|
+
end
|
35
|
+
|
36
|
+
# local variables
|
37
|
+
cnt = 0
|
21
38
|
fst = nil
|
39
|
+
|
22
40
|
@collections.each do |c|
|
23
41
|
if opt_fst
|
24
42
|
fst = opt_fst - cnt
|
25
43
|
break if fst <= 0
|
26
44
|
end
|
45
|
+
|
46
|
+
# get enumerable
|
27
47
|
called_first = false
|
28
48
|
if c.is_a? Proc
|
29
|
-
|
49
|
+
case c.arity
|
50
|
+
when 0
|
30
51
|
c = c.call
|
31
|
-
|
52
|
+
when 1
|
32
53
|
c = c.call fst
|
33
54
|
called_first = true
|
55
|
+
else
|
56
|
+
c = c.call fst, opt_cmpct
|
57
|
+
called_first = true
|
34
58
|
end
|
35
59
|
end
|
60
|
+
|
36
61
|
if fst
|
37
|
-
|
62
|
+
# with first option
|
63
|
+
c = c.first fst unless called_first or opt_cmpct
|
38
64
|
_cnt = 0
|
39
|
-
c.each
|
65
|
+
c.each do |e|
|
66
|
+
next if opt_cmpct_proc.call e
|
40
67
|
block.call e
|
41
|
-
_cnt
|
68
|
+
_cnt += 1
|
42
69
|
break if fst <= _cnt
|
43
70
|
end
|
44
71
|
cnt += _cnt
|
45
72
|
else
|
73
|
+
# without first option
|
46
74
|
c.each do |e|
|
75
|
+
next if opt_cmpct_proc.call e
|
47
76
|
block.call e
|
48
77
|
end
|
49
78
|
end
|
data/lib/merge_enum/version.rb
CHANGED
@@ -3,221 +3,364 @@ require File.expand_path(File.join('../', 'spec_helper'), File.dirname(__FILE__)
|
|
3
3
|
|
4
4
|
describe MergeEnum::MergeEnumerable do
|
5
5
|
|
6
|
-
describe "No Arguments to MergeEnumerable" do
|
6
|
+
describe "No Arguments to MergeEnumerable:" do
|
7
7
|
it "count" do
|
8
8
|
enum = MergeEnum::MergeEnumerable.new
|
9
9
|
expect(enum.count).to be 0
|
10
10
|
end
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
11
|
+
|
12
|
+
describe "option_first is" do
|
13
|
+
it "positive" do
|
14
|
+
enum = MergeEnum::MergeEnumerable.new first: 50
|
15
|
+
expect(enum.count).to be 0
|
16
|
+
end
|
17
|
+
it "negative" do
|
18
|
+
enum = MergeEnum::MergeEnumerable.new first: -50
|
19
|
+
expect(enum.count).to be 0
|
20
|
+
end
|
21
|
+
it "nil" do
|
22
|
+
enum = MergeEnum::MergeEnumerable.new first: nil
|
23
|
+
expect(enum.count).to be 0
|
24
|
+
end
|
25
|
+
it "false" do
|
26
|
+
enum = MergeEnum::MergeEnumerable.new first: false
|
27
|
+
expect(enum.count).to be 0
|
28
|
+
end
|
29
|
+
it "true" do
|
30
|
+
enum = MergeEnum::MergeEnumerable.new first: true
|
31
|
+
expect{ enum.count }.to raise_error NoMethodError
|
32
|
+
end
|
33
|
+
it "illegal" do
|
34
|
+
enum = MergeEnum::MergeEnumerable.new first: "hoge"
|
35
|
+
expect(enum.count).to be 0
|
36
|
+
end
|
30
37
|
end
|
31
|
-
|
32
|
-
|
33
|
-
|
38
|
+
|
39
|
+
describe "option_compact is" do
|
40
|
+
it "true" do
|
41
|
+
enum = MergeEnum::MergeEnumerable.new compact: true
|
42
|
+
expect(enum.count).to be 0
|
43
|
+
end
|
44
|
+
it "false" do
|
45
|
+
enum = MergeEnum::MergeEnumerable.new compact: false
|
46
|
+
expect(enum.count).to be 0
|
47
|
+
end
|
48
|
+
it "nil" do
|
49
|
+
enum = MergeEnum::MergeEnumerable.new compact: nil
|
50
|
+
expect(enum.count).to be 0
|
51
|
+
end
|
52
|
+
it "Proc" do
|
53
|
+
enum = MergeEnum::MergeEnumerable.new compact: Proc.new {}
|
54
|
+
expect(enum.count).to be 0
|
55
|
+
end
|
56
|
+
it "Lambda" do
|
57
|
+
enum = MergeEnum::MergeEnumerable.new compact: -> {}
|
58
|
+
expect(enum.count).to be 0
|
59
|
+
end
|
34
60
|
end
|
35
61
|
end
|
36
62
|
|
37
|
-
describe "Empty Array to MergeEnumerable" do
|
63
|
+
describe "Empty Array to MergeEnumerable:" do
|
38
64
|
it "count" do
|
39
65
|
enum = MergeEnum::MergeEnumerable.new []
|
40
66
|
expect(enum.count).to be 0
|
41
67
|
end
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
68
|
+
|
69
|
+
describe "option_first" do
|
70
|
+
it "positive" do
|
71
|
+
enum = MergeEnum::MergeEnumerable.new [], first: 50
|
72
|
+
expect(enum.count).to be 0
|
73
|
+
end
|
74
|
+
it "negative" do
|
75
|
+
enum = MergeEnum::MergeEnumerable.new [], first: -50
|
76
|
+
expect(enum.count).to be 0
|
77
|
+
end
|
78
|
+
it "nil" do
|
79
|
+
enum = MergeEnum::MergeEnumerable.new [], first: nil
|
80
|
+
expect(enum.count).to be 0
|
81
|
+
end
|
82
|
+
it "false" do
|
83
|
+
enum = MergeEnum::MergeEnumerable.new [], first: false
|
84
|
+
expect(enum.count).to be 0
|
85
|
+
end
|
86
|
+
it "true" do
|
87
|
+
enum = MergeEnum::MergeEnumerable.new [], first: true
|
88
|
+
expect{ enum.count }.to raise_error NoMethodError
|
89
|
+
end
|
90
|
+
it "with to_i" do
|
91
|
+
enum = MergeEnum::MergeEnumerable.new 0...100, first: "hoge"
|
92
|
+
expect(enum.count).to be 0
|
93
|
+
end
|
94
|
+
it "with to_i" do
|
95
|
+
enum = MergeEnum::MergeEnumerable.new 0...100, first: "10hoge"
|
96
|
+
expect(enum.count).to be 10
|
97
|
+
end
|
61
98
|
end
|
62
|
-
|
63
|
-
|
64
|
-
|
99
|
+
|
100
|
+
describe "option_compact" do
|
101
|
+
it "true" do
|
102
|
+
enum = MergeEnum::MergeEnumerable.new [], compact: true
|
103
|
+
expect(enum.count).to be 0
|
104
|
+
end
|
105
|
+
it "false" do
|
106
|
+
enum = MergeEnum::MergeEnumerable.new [], compact: false
|
107
|
+
expect(enum.count).to be 0
|
108
|
+
end
|
109
|
+
it "nil" do
|
110
|
+
enum = MergeEnum::MergeEnumerable.new [], compact: nil
|
111
|
+
expect(enum.count).to be 0
|
112
|
+
end
|
113
|
+
it "Proc" do
|
114
|
+
enum = MergeEnum::MergeEnumerable.new [], compact: Proc.new {}
|
115
|
+
expect(enum.count).to be 0
|
116
|
+
end
|
117
|
+
it "Lambda" do
|
118
|
+
enum = MergeEnum::MergeEnumerable.new [], compact: -> {}
|
119
|
+
expect(enum.count).to be 0
|
120
|
+
end
|
65
121
|
end
|
66
122
|
end
|
67
123
|
|
68
|
-
describe "Illegal Argument to MergeEnumerable" do
|
124
|
+
describe "Illegal Argument to MergeEnumerable:" do
|
69
125
|
it "illegal argument" do
|
70
126
|
enum = MergeEnum::MergeEnumerable.new "hoge"
|
71
127
|
expect{ enum.count }.to raise_error NoMethodError
|
72
128
|
end
|
73
129
|
end
|
74
130
|
|
75
|
-
describe "One Enumerable to MergeEnumerable" do
|
131
|
+
describe "One Enumerable to MergeEnumerable:" do
|
76
132
|
it "count" do
|
77
133
|
enum = MergeEnum::MergeEnumerable.new 0...100
|
78
134
|
expect(enum.count).to be 100
|
79
135
|
end
|
80
|
-
|
81
|
-
|
82
|
-
|
136
|
+
|
137
|
+
describe "option_first" do
|
138
|
+
it "limited" do
|
139
|
+
enum = MergeEnum::MergeEnumerable.new 0...100, first: 50
|
140
|
+
expect(enum.count).to be 50
|
141
|
+
end
|
142
|
+
it "over" do
|
143
|
+
enum = MergeEnum::MergeEnumerable.new 0...100, first: 200
|
144
|
+
expect(enum.count).to be 100
|
145
|
+
end
|
83
146
|
end
|
84
|
-
|
85
|
-
|
86
|
-
|
147
|
+
|
148
|
+
describe "option_compact" do
|
149
|
+
it "true" do
|
150
|
+
ary = (0...100).map { |e| e.odd? ? e : nil }
|
151
|
+
expect(ary.compact.count).to be 50
|
152
|
+
expect(ary.count).to be 100
|
153
|
+
enum = MergeEnum::MergeEnumerable.new ary, compact: true
|
154
|
+
expect(enum.count).to be 50
|
155
|
+
end
|
156
|
+
it "false" do
|
157
|
+
ary = (0...100).map { |e| e.odd? ? e : nil }
|
158
|
+
enum = MergeEnum::MergeEnumerable.new ary, compact: false
|
159
|
+
expect(enum.count).to be 100
|
160
|
+
end
|
161
|
+
it "nil" do
|
162
|
+
ary = (0...100).map { |e| e.odd? ? e : nil }
|
163
|
+
enum = MergeEnum::MergeEnumerable.new ary, compact: nil
|
164
|
+
expect(enum.count).to be 100
|
165
|
+
end
|
166
|
+
it "Proc with no args" do
|
167
|
+
ary = (0...100).map { |e| e.odd? ? e : nil }
|
168
|
+
_proc = Proc.new { true }
|
169
|
+
enum = MergeEnum::MergeEnumerable.new ary, compact: _proc
|
170
|
+
expect(enum.count).to be 0
|
171
|
+
|
172
|
+
_proc = Proc.new { false }
|
173
|
+
enum = MergeEnum::MergeEnumerable.new ary, compact: _proc
|
174
|
+
expect(enum.count).to be 100
|
175
|
+
end
|
176
|
+
it "Proc with args" do
|
177
|
+
ary = (0...100).map { |e| e.odd? ? e : nil }
|
178
|
+
_proc = Proc.new { |e| e.nil? }
|
179
|
+
enum = MergeEnum::MergeEnumerable.new ary, compact: _proc
|
180
|
+
expect(enum.count).to be 50
|
181
|
+
|
182
|
+
ary = 0...100
|
183
|
+
_proc = Proc.new { |e| e < 30 }
|
184
|
+
enum = MergeEnum::MergeEnumerable.new ary, compact: _proc
|
185
|
+
expect(enum.count).to be 70
|
186
|
+
end
|
187
|
+
it "Lambda with no args" do
|
188
|
+
ary = (0...100).map { |e| e.odd? ? e : nil }
|
189
|
+
_proc = -> { true }
|
190
|
+
enum = MergeEnum::MergeEnumerable.new ary, compact: _proc
|
191
|
+
expect(enum.count).to be 0
|
192
|
+
_proc = -> { false }
|
193
|
+
enum = MergeEnum::MergeEnumerable.new ary, compact: _proc
|
194
|
+
expect(enum.count).to be 100
|
195
|
+
end
|
196
|
+
it "Lambda with args" do
|
197
|
+
ary = (0...100).map { |e| e.odd? ? e : nil }
|
198
|
+
_proc = -> (e) { e.nil? }
|
199
|
+
enum = MergeEnum::MergeEnumerable.new ary, compact: _proc
|
200
|
+
expect(enum.count).to be 50
|
201
|
+
|
202
|
+
ary = 0...100
|
203
|
+
_proc = -> (e) { e < 30 }
|
204
|
+
enum = MergeEnum::MergeEnumerable.new ary, compact: _proc
|
205
|
+
expect(enum.count).to be 70
|
206
|
+
end
|
207
|
+
it "with option_first" do
|
208
|
+
ary = (0...100).map { |e| e.odd? ? e : nil }
|
209
|
+
_proc = -> (e) { e.nil? }
|
210
|
+
enum = MergeEnum::MergeEnumerable.new ary, first: 30, compact: _proc
|
211
|
+
expect(enum.count).to be 30
|
212
|
+
|
213
|
+
enum = MergeEnum::MergeEnumerable.new ary, first: 60, compact: _proc
|
214
|
+
expect(enum.count).to be 50
|
215
|
+
end
|
87
216
|
end
|
88
217
|
end
|
89
218
|
|
90
|
-
describe "Two Enumerables to MergeEnumerable" do
|
219
|
+
describe "Two Enumerables to MergeEnumerable:" do
|
91
220
|
it "count" do
|
92
221
|
enum = MergeEnum::MergeEnumerable.new 0...100, 200...250
|
93
222
|
expect(enum.count).to be 150
|
94
223
|
end
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
224
|
+
|
225
|
+
describe "option_first" do
|
226
|
+
it "limited at first" do
|
227
|
+
enum = MergeEnum::MergeEnumerable.new 0...100, 200...250, first: 50
|
228
|
+
expect(enum.count).to be 50
|
229
|
+
end
|
230
|
+
it "limited at second" do
|
231
|
+
enum = MergeEnum::MergeEnumerable.new 0...100, 200...250, first: 130
|
232
|
+
expect(enum.count).to be 130
|
233
|
+
end
|
234
|
+
it "over" do
|
235
|
+
enum = MergeEnum::MergeEnumerable.new 0...100, 200...250, first: 200
|
236
|
+
expect(enum.count).to be 150
|
237
|
+
end
|
106
238
|
end
|
107
239
|
end
|
108
240
|
|
109
|
-
describe "Three Enumerables to MergeEnumerable" do
|
241
|
+
describe "Three Enumerables to MergeEnumerable:" do
|
110
242
|
it "count" do
|
111
243
|
enum = MergeEnum::MergeEnumerable.new 0...100, 200...250, 300...330
|
112
244
|
expect(enum.count).to be 180
|
113
245
|
end
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
246
|
+
|
247
|
+
describe "option_first" do
|
248
|
+
it "limited at first" do
|
249
|
+
enum = MergeEnum::MergeEnumerable.new 0...100, 200...250, 300...330, first: 50
|
250
|
+
expect(enum.count).to be 50
|
251
|
+
end
|
252
|
+
it "limited at second" do
|
253
|
+
enum = MergeEnum::MergeEnumerable.new 0...100, 200...250, 300...330, first: 130
|
254
|
+
expect(enum.count).to be 130
|
255
|
+
end
|
256
|
+
it "limited at third" do
|
257
|
+
enum = MergeEnum::MergeEnumerable.new 0...100, 200...250, 300...330, first: 170
|
258
|
+
expect(enum.count).to be 170
|
259
|
+
end
|
260
|
+
it "over" do
|
261
|
+
enum = MergeEnum::MergeEnumerable.new 0...100, 200...250, 300...330, first: 200
|
262
|
+
expect(enum.count).to be 180
|
263
|
+
end
|
129
264
|
end
|
130
265
|
end
|
131
266
|
|
132
|
-
describe "Lambda to MergeEnumerable" do
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
267
|
+
describe "Lambda to MergeEnumerable:" do
|
268
|
+
describe "option_first" do
|
269
|
+
it "limited at first" do
|
270
|
+
enum = MergeEnum::MergeEnumerable.new(
|
271
|
+
-> { 0...100 },
|
272
|
+
-> { 200...250 },
|
273
|
+
first: 50
|
274
|
+
)
|
275
|
+
expect(enum.count).to be 50
|
276
|
+
end
|
277
|
+
it "over" do
|
278
|
+
enum = MergeEnum::MergeEnumerable.new(
|
279
|
+
-> { 0...100 },
|
280
|
+
-> { 200...250 },
|
281
|
+
first: 200
|
282
|
+
)
|
283
|
+
expect(enum.count).to be 150
|
284
|
+
end
|
148
285
|
end
|
149
286
|
end
|
150
287
|
|
151
|
-
describe "Lambda with Arguments to MergeEnumerable" do
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
288
|
+
describe "Lambda with Arguments to MergeEnumerable:" do
|
289
|
+
describe "option_first" do
|
290
|
+
it "limited at first" do
|
291
|
+
arg1, arg2 = nil, nil
|
292
|
+
enum = MergeEnum::MergeEnumerable.new(
|
293
|
+
-> (c) { arg1 = c; 0...100 },
|
294
|
+
-> (c) { raise "unexpect"; 200...250 },
|
295
|
+
first: 50
|
296
|
+
)
|
297
|
+
expect(enum.count).to be 50
|
298
|
+
expect(arg1).to be 50
|
299
|
+
expect(arg2).to be_nil
|
300
|
+
end
|
301
|
+
it "over" do
|
302
|
+
arg1, arg2 = nil, nil
|
303
|
+
enum = MergeEnum::MergeEnumerable.new(
|
304
|
+
-> (c) { arg1 = c; 0...100 },
|
305
|
+
-> (c) { arg2 = c; 200...250 },
|
306
|
+
first: 200
|
307
|
+
)
|
308
|
+
expect(enum.count).to be 150
|
309
|
+
expect(arg1).to be 200
|
310
|
+
expect(arg2).to be 100
|
311
|
+
end
|
173
312
|
end
|
174
313
|
end
|
175
314
|
|
176
|
-
describe "Proc to MergeEnumerable" do
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
315
|
+
describe "Proc to MergeEnumerable:" do
|
316
|
+
describe "option_first" do
|
317
|
+
it "limited at first" do
|
318
|
+
enum = MergeEnum::MergeEnumerable.new(
|
319
|
+
Proc.new { 0...100 },
|
320
|
+
Proc.new { 200...250 },
|
321
|
+
first: 50
|
322
|
+
)
|
323
|
+
expect(enum.count).to be 50
|
324
|
+
end
|
325
|
+
it "over" do
|
326
|
+
enum = MergeEnum::MergeEnumerable.new(
|
327
|
+
Proc.new { 0...100 },
|
328
|
+
Proc.new { 200...250 },
|
329
|
+
first: 200
|
330
|
+
)
|
331
|
+
expect(enum.count).to be 150
|
332
|
+
end
|
192
333
|
end
|
193
334
|
end
|
194
335
|
|
195
|
-
describe "Proc with Arguments to MergeEnumerable" do
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
336
|
+
describe "Proc with Arguments to MergeEnumerable:" do
|
337
|
+
describe "option_first" do
|
338
|
+
it "limited at first" do
|
339
|
+
arg1, arg2 = nil, nil
|
340
|
+
enum = MergeEnum::MergeEnumerable.new(
|
341
|
+
Proc.new { |c| arg1 = c; 0...100 },
|
342
|
+
Proc.new { |c| raise "unexpect"; 200...250 },
|
343
|
+
first: 50
|
344
|
+
)
|
345
|
+
expect(enum.count).to be 50
|
346
|
+
expect(arg1).to be 50
|
347
|
+
expect(arg2).to be_nil
|
348
|
+
end
|
349
|
+
it "over" do
|
350
|
+
arg1, arg2 = nil, nil
|
351
|
+
enum = MergeEnum::MergeEnumerable.new(
|
352
|
+
Proc.new { |c| arg1 = c; 0...100 },
|
353
|
+
Proc.new { |c| arg2 = c; 200...250 },
|
354
|
+
first: 200
|
355
|
+
)
|
356
|
+
expect(enum.count).to be 150
|
357
|
+
expect(arg1).to be 200
|
358
|
+
expect(arg2).to be 100
|
359
|
+
end
|
217
360
|
end
|
218
361
|
end
|
219
362
|
|
220
|
-
describe "Complex Enumerables to MergeEnumerable" do
|
363
|
+
describe "Complex Enumerables to MergeEnumerable:" do
|
221
364
|
it "Enumerable, Proc, Lambda" do
|
222
365
|
arg1, arg2 = nil, nil
|
223
366
|
enum = MergeEnum::MergeEnumerable.new(
|
@@ -244,7 +387,7 @@ describe MergeEnum::MergeEnumerable do
|
|
244
387
|
end
|
245
388
|
end
|
246
389
|
|
247
|
-
describe "Equality Enumerator" do
|
390
|
+
describe "Equality Enumerator:" do
|
248
391
|
it "equality enumerator" do
|
249
392
|
enum = MergeEnum::MergeEnumerable.new(
|
250
393
|
0...100,
|
@@ -260,8 +403,8 @@ describe MergeEnum::MergeEnumerable do
|
|
260
403
|
end
|
261
404
|
end
|
262
405
|
|
263
|
-
describe "Whitebox" do
|
264
|
-
it "call first method" do
|
406
|
+
describe "Whitebox:" do
|
407
|
+
it "call `first` method" do
|
265
408
|
ary_1 = 0...100
|
266
409
|
ary_2 = 200...250
|
267
410
|
ary_3 = 300...330
|
@@ -272,13 +415,19 @@ describe MergeEnum::MergeEnumerable do
|
|
272
415
|
first: 200
|
273
416
|
)
|
274
417
|
expect(ary_1).to receive(:first).with(200).and_return(ary_1)
|
275
|
-
ary_2.
|
418
|
+
allow(ary_2).to receive(:first).and_raise("unexpected")
|
276
419
|
expect(ary_3).to receive(:first).with(50).and_return(ary_3)
|
277
420
|
expect(enum.count).to be 180
|
278
421
|
end
|
422
|
+
it "not call `first` method" do
|
423
|
+
ary = 0...100
|
424
|
+
allow(ary).to receive(:first).and_raise("unexpect")
|
425
|
+
enum = MergeEnum::MergeEnumerable.new ary, first: 10, compact: true
|
426
|
+
expect(enum.count).to be 10
|
427
|
+
end
|
279
428
|
end
|
280
429
|
|
281
|
-
describe "
|
430
|
+
describe "`concat` Method:" do
|
282
431
|
it "equality enumerator" do
|
283
432
|
enm_1 = 0...100
|
284
433
|
enm_2 = -> (c) { 200...250 }
|
@@ -297,7 +446,7 @@ describe MergeEnum::MergeEnumerable do
|
|
297
446
|
end
|
298
447
|
end
|
299
448
|
|
300
|
-
describe "
|
449
|
+
describe "`concat!` Method:" do
|
301
450
|
it "equality enumerator" do
|
302
451
|
enm_1 = 0...100
|
303
452
|
enm_2 = -> (c) { 200...250 }
|