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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 83c9df67a3bf180ed443689aa752ffb05daa2776
4
- data.tar.gz: eafcdd7dfa4844eab8b96e1bb0dd31670ee19e58
3
+ metadata.gz: 7a7cbcc12b63d8c7a55b8d4c4d3f8de7a749c400
4
+ data.tar.gz: 197e9e1c595d09167bf84fec15ee6488febd3f15
5
5
  SHA512:
6
- metadata.gz: 6feac7d52703573869924e008a5dbea02ea08a2ec204a4e935147e1bc5e367cb4827c1d643790ba7bb77bc77e891fdc40e3b7db1db052e9a58866be60df973f4
7
- data.tar.gz: 21a08e2bcf620c15a2e95e3aa978738c86b4a005dece07d97a1fd22a2c827d24bbc3fec8615644ffe084800fe1ee77124e51fc8ecf16574a086a286cbff5a5dd
6
+ metadata.gz: 6f3eb08663c8186902352a71b5b007bdb08f4214087a0f18b578d48e3a01af04bd760824db481a351aa4c7d6e27f5dda7c9b949f887d829d5141bb5650663a1f
7
+ data.tar.gz: ea1d6992ceeff7c5832f8c01e6187a40672379db773f4215841005d07666114f1ce7adb49af717ffebf95e0235727f7c61b09bf3f66449a890081798abccbc0d
data/Gemfile CHANGED
@@ -3,5 +3,5 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in merge_enum.gemspec
4
4
  gemspec
5
5
 
6
- gem 'rspec'
6
+ gem 'rspec', '~> 3.0.0.beta2'
7
7
 
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # MergeEnum
2
- ###### ver 0.2.2
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
- cnt = 0
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
- if c.arity == 0
49
+ case c.arity
50
+ when 0
30
51
  c = c.call
31
- else
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
- c = c.first fst unless called_first
62
+ # with first option
63
+ c = c.first fst unless called_first or opt_cmpct
38
64
  _cnt = 0
39
- c.each.with_index 1 do |e, i|
65
+ c.each do |e|
66
+ next if opt_cmpct_proc.call e
40
67
  block.call e
41
- _cnt = i
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
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
  module MergeEnum
3
- VERSION = "0.2.2"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
 
@@ -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
- it "option_first" do
12
- enum = MergeEnum::MergeEnumerable.new first: 50
13
- expect(enum.count).to be 0
14
- end
15
- it "option_first negative" do
16
- enum = MergeEnum::MergeEnumerable.new first: -50
17
- expect(enum.count).to be 0
18
- end
19
- it "option_first nil" do
20
- enum = MergeEnum::MergeEnumerable.new first: nil
21
- expect(enum.count).to be 0
22
- end
23
- it "option_first false" do
24
- enum = MergeEnum::MergeEnumerable.new first: false
25
- expect(enum.count).to be 0
26
- end
27
- it "option_first true" do
28
- enum = MergeEnum::MergeEnumerable.new first: true
29
- expect(enum.count).to be 0
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
- it "option_first illegal" do
32
- enum = MergeEnum::MergeEnumerable.new first: "hoge"
33
- expect(enum.count).to be 0
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
- it "option_first" do
43
- enum = MergeEnum::MergeEnumerable.new [], first: 50
44
- expect(enum.count).to be 0
45
- end
46
- it "option_first negative" do
47
- enum = MergeEnum::MergeEnumerable.new [], first: -50
48
- expect(enum.count).to be 0
49
- end
50
- it "option_first nil" do
51
- enum = MergeEnum::MergeEnumerable.new [], first: nil
52
- expect(enum.count).to be 0
53
- end
54
- it "option_first false" do
55
- enum = MergeEnum::MergeEnumerable.new [], first: false
56
- expect(enum.count).to be 0
57
- end
58
- it "option_first true" do
59
- enum = MergeEnum::MergeEnumerable.new [], first: true
60
- expect{ enum.count }.to raise_error NoMethodError
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
- it "option_first illegal" do
63
- enum = MergeEnum::MergeEnumerable.new [], first: "hoge"
64
- expect{ enum.count }.to raise_error NoMethodError
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
- it "option_first limited" do
81
- enum = MergeEnum::MergeEnumerable.new 0...100, first: 50
82
- expect(enum.count).to be 50
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
- it "option_first over" do
85
- enum = MergeEnum::MergeEnumerable.new 0...100, first: 200
86
- expect(enum.count).to be 100
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
- it "option_first limited at first" do
96
- enum = MergeEnum::MergeEnumerable.new 0...100, 200...250, first: 50
97
- expect(enum.count).to be 50
98
- end
99
- it "option_first limited at second" do
100
- enum = MergeEnum::MergeEnumerable.new 0...100, 200...250, first: 130
101
- expect(enum.count).to be 130
102
- end
103
- it "option_first over" do
104
- enum = MergeEnum::MergeEnumerable.new 0...100, 200...250, first: 200
105
- expect(enum.count).to be 150
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
- it "option_first limited at first" do
115
- enum = MergeEnum::MergeEnumerable.new 0...100, 200...250, 300...330, first: 50
116
- expect(enum.count).to be 50
117
- end
118
- it "option_first limited at second" do
119
- enum = MergeEnum::MergeEnumerable.new 0...100, 200...250, 300...330, first: 130
120
- expect(enum.count).to be 130
121
- end
122
- it "option_first limited at third" do
123
- enum = MergeEnum::MergeEnumerable.new 0...100, 200...250, 300...330, first: 170
124
- expect(enum.count).to be 170
125
- end
126
- it "option_first over" do
127
- enum = MergeEnum::MergeEnumerable.new 0...100, 200...250, 300...330, first: 200
128
- expect(enum.count).to be 180
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
- it "option_first limited at first" do
134
- enum = MergeEnum::MergeEnumerable.new(
135
- -> { 0...100 },
136
- -> { 200...250 },
137
- first: 50
138
- )
139
- expect(enum.count).to be 50
140
- end
141
- it "option_first over" do
142
- enum = MergeEnum::MergeEnumerable.new(
143
- -> { 0...100 },
144
- -> { 200...250 },
145
- first: 200
146
- )
147
- expect(enum.count).to be 150
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
- it "option_first limited at first" do
153
- arg1, arg2 = nil, nil
154
- enum = MergeEnum::MergeEnumerable.new(
155
- -> (c) { arg1 = c; 0...100 },
156
- -> (c) { raise "unexpect"; 200...250 },
157
- first: 50
158
- )
159
- expect(enum.count).to be 50
160
- expect(arg1).to be 50
161
- expect(arg2).to be_nil
162
- end
163
- it "option_first over" do
164
- arg1, arg2 = nil, nil
165
- enum = MergeEnum::MergeEnumerable.new(
166
- -> (c) { arg1 = c; 0...100 },
167
- -> (c) { arg2 = c; 200...250 },
168
- first: 200
169
- )
170
- expect(enum.count).to be 150
171
- expect(arg1).to be 200
172
- expect(arg2).to be 100
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
- it "option_first limited at first" do
178
- enum = MergeEnum::MergeEnumerable.new(
179
- Proc.new { 0...100 },
180
- Proc.new { 200...250 },
181
- first: 50
182
- )
183
- expect(enum.count).to be 50
184
- end
185
- it "option_first over" do
186
- enum = MergeEnum::MergeEnumerable.new(
187
- Proc.new { 0...100 },
188
- Proc.new { 200...250 },
189
- first: 200
190
- )
191
- expect(enum.count).to be 150
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
- it "option_first limited at first" do
197
- arg1, arg2 = nil, nil
198
- enum = MergeEnum::MergeEnumerable.new(
199
- Proc.new { |c| arg1 = c; 0...100 },
200
- Proc.new { |c| raise "unexpect"; 200...250 },
201
- first: 50
202
- )
203
- expect(enum.count).to be 50
204
- expect(arg1).to be 50
205
- expect(arg2).to be_nil
206
- end
207
- it "option_first over" do
208
- arg1, arg2 = nil, nil
209
- enum = MergeEnum::MergeEnumerable.new(
210
- Proc.new { |c| arg1 = c; 0...100 },
211
- Proc.new { |c| arg2 = c; 200...250 },
212
- first: 200
213
- )
214
- expect(enum.count).to be 150
215
- expect(arg1).to be 200
216
- expect(arg2).to be 100
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.stub(:first) { raise "unexpected" }
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 ":concat Method" do
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 ":concat! Method" do
449
+ describe "`concat!` Method:" do
301
450
  it "equality enumerator" do
302
451
  enm_1 = 0...100
303
452
  enm_2 = -> (c) { 200...250 }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: merge_enum
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - brightgenerous