merge_enum 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a35388e5d97c57ace35fe87acd5d49240ed8e2ab
4
- data.tar.gz: 3bfcd7d2e5134d5ef8130cda8b0b9096ed67acbf
3
+ metadata.gz: 96107e05d17a2500c015995a885805dee8f73201
4
+ data.tar.gz: 754eb0bb61e65a5d7310470a3886d0fee53a8b50
5
5
  SHA512:
6
- metadata.gz: f67bf685781bce9dd9583cea2c706948cca6892ce88d578e7adfd025ca704c11384ed6c0d83413edab0a2b5e1cb5b2a030fb2460dbf5dfca90b6bbb9818c09ed
7
- data.tar.gz: 9b7a441d6e75fcf7b683426cee580f7750766d7bfd8b2971255dcb82231f00cc4443272ce814189a12afce17217896ce20a5c8d8ed953041ed2a0f1c41b03916
6
+ metadata.gz: df4f49e52cc5aba2650d7d59f78052b06ba1af8e0e4add8671903d840af01aecb3315879a197cee4f7cee78a17bcc0cc7f0f7e5d3489806db53c37e05bc935e3
7
+ data.tar.gz: 629aeff7a46a81ac042c58312a6fef454d29f265eef485d92ea22125f2145225c89a42ae319d935eb5ac1563ece08b71b9baee1a5c4fcdd075d0af174675a410
data/Gemfile CHANGED
@@ -2,6 +2,3 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in merge_enum.gemspec
4
4
  gemspec
5
-
6
- gem 'rspec', '~> 3.0.0.beta2'
7
-
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # MergeEnum
2
- ###### ver 0.5.0
2
+ ###### ver 0.7.0
3
3
 
4
4
  複数のEnumerale(*1)を連結(合成)するEnumerableです。
5
5
  要素が必要になった時点で追加するように動作します。
@@ -91,6 +91,8 @@ Or install it yourself as:
91
91
   - `:first` : `Integer`: 要素を取得する最大サイズ
92
92
   - `:compact` : `Proc|bool`: nilを判定して除去する
93
93
   - `:select` : `Proc`: nil,falseを返す要素を除去する
94
+  - `:map` : `Proc`: 要素を変換する
95
+  - `:cache` : `bool`: 要素をキャッシュする
94
96
 
95
97
  * `Enumerable#merge_enum(enum_2, enum_3, ... , options = {})`
96
98
  レシーバ自身を`enum_1`として、`MergeEnumerable.new(enum_1, enum_2, enum_3, ... , options)`を返します
@@ -28,17 +28,22 @@ module MergeEnum
28
28
  end
29
29
 
30
30
  # options
31
- opt_fst = @options[:first]
32
- opt_fst = opt_fst.to_i if opt_fst
31
+ opt_fst = option_first @options
33
32
  (opt_proc, _proc) = merge_options_proc @options
34
- opt_map = map_proc @options
33
+ (opt_map, _map) = map_proc @options
34
+ opt_fill = @options[:fill]
35
35
 
36
36
  # local variables
37
37
  cnt = 0
38
38
  fst = nil
39
39
  cache = [] if opt_cache
40
40
 
41
- @collections.each do |c|
41
+ cs = if opt_fst and opt_fill
42
+ @collections + [opt_fill]
43
+ else
44
+ @collections
45
+ end
46
+ cs.each do |c|
42
47
  if opt_fst
43
48
  fst = opt_fst - cnt
44
49
  break if fst <= 0
@@ -69,8 +74,8 @@ module MergeEnum
69
74
  c = c.first fst unless called_first or _proc
70
75
  _cnt = 0
71
76
  c.each do |e|
72
- next if _proc and not opt_proc.call(e, cnt)
73
- e = opt_map.call(e, cnt)
77
+ next if _proc and not opt_proc.call e, cnt
78
+ e = opt_map.call e, cnt if _map
74
79
  block.call e
75
80
  cache.push e if cache
76
81
  cnt += 1
@@ -80,8 +85,8 @@ module MergeEnum
80
85
  else
81
86
  # without first option
82
87
  c.each do |e|
83
- next if _proc and not opt_proc.call(e, cnt)
84
- e = opt_map.call(e, cnt)
88
+ next if _proc and not opt_proc.call e, cnt
89
+ e = opt_map.call e, cnt if _map
85
90
  block.call e
86
91
  cache.push e if cache
87
92
  cnt += 1
@@ -96,6 +101,23 @@ module MergeEnum
96
101
 
97
102
  private
98
103
 
104
+ def option_first options
105
+ opt_fst = options[:first]
106
+ if opt_fst
107
+ if opt_fst.is_a? Proc
108
+ arity = opt_fst.arity.abs
109
+ case arity
110
+ when 0
111
+ opt_fst = opt_fst.call
112
+ else
113
+ opt_fst = opt_fst.call *Array.new(arity, nil)
114
+ end
115
+ end
116
+ opt_fst = opt_fst.to_i
117
+ end
118
+ opt_fst
119
+ end
120
+
99
121
  def merge_options_proc options
100
122
  opts = []
101
123
 
@@ -151,19 +173,20 @@ module MergeEnum
151
173
  unless opt_map.is_a? Proc
152
174
  raise ":map is must be a Proc"
153
175
  end
154
- case opt_map.arity
176
+ arity = opt_map.arity.abs
177
+ case arity
155
178
  when 0
156
- -> (e, i) { opt_map.call }
179
+ [-> (e, i) { opt_map.call }, true]
157
180
  when 1
158
- -> (e, i) { opt_map.call e }
181
+ [-> (e, i) { opt_map.call e }, true]
159
182
  when 2
160
- opt_map
183
+ [opt_map, true]
161
184
  else
162
185
  args = Array.new arity - 2, nil
163
- -> (e, i) { opt_map.call e, i, *args }
186
+ [-> (e, i) { opt_map.call e, i, *args }, true]
164
187
  end
165
188
  else
166
- -> (e, i) { e }
189
+ [-> (e, i) { e }, false]
167
190
  end
168
191
  end
169
192
 
@@ -179,19 +202,23 @@ module MergeEnum
179
202
  end
180
203
 
181
204
  def merge_options opts
205
+ raise "opts must be a Hash" if opts and not opts.is_a? Hash
182
206
  self.class.new *@collections, (@options.merge opts || {})
183
207
  end
184
208
 
185
209
  def merge_options! opts
210
+ raise "opts must be a Hash" if opts and not opts.is_a? Hash
186
211
  @options.merge! opts || {}
187
212
  self
188
213
  end
189
214
 
190
215
  def replace_options opts
216
+ raise "opts must be a Hash" if opts and not opts.is_a? Hash
191
217
  self.class.new *@collections, opts || {}
192
218
  end
193
219
 
194
220
  def replace_options! opts
221
+ raise "opts must be a Hash" if opts and not opts.is_a? Hash
195
222
  @options = opts || {}
196
223
  self
197
224
  end
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
  module MergeEnum
3
- VERSION = "0.6.0"
3
+ VERSION = "0.7.0"
4
4
  end
5
5
 
@@ -19,5 +19,10 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.5"
22
- spec.add_development_dependency "rake"
22
+ spec.add_development_dependency "rake", "~> 0"
23
+
24
+ spec.add_development_dependency 'rspec', '~> 3.0.0.rc1'
25
+ spec.add_development_dependency 'simplecov', "~> 0"
26
+
27
+ spec.add_development_dependency 'rspec_term', '~> 0.3', '>= 0.3.0'
23
28
  end
@@ -67,13 +67,8 @@ describe MergeEnum::MergeEnumerable do
67
67
  end
68
68
  end
69
69
 
70
- describe ".new nil" do
71
- let(:enum) { Target.new nil }
72
- test_error self, :enum, line: __LINE__
73
- end
74
-
75
- ["hoge", "foo", "bar"].each do |val|
76
- describe ".new '#{val}'" do
70
+ [nil, "hoge", "foo", "bar"].each do |val|
71
+ describe ".new #{val.inspect}" do
77
72
  let(:enum) { Target.new val }
78
73
  test_error self, :enum, line: __LINE__
79
74
  end
@@ -104,7 +99,7 @@ describe MergeEnum::MergeEnumerable do
104
99
 
105
100
  context "<positive>" do
106
101
  [1, 2, 50].each do |val|
107
- describe "#{val}" do
102
+ describe "#{val.inspect}" do
108
103
  let(:first) { val }
109
104
  test_empty self, :enum, line: __LINE__
110
105
  end
@@ -113,7 +108,7 @@ describe MergeEnum::MergeEnumerable do
113
108
 
114
109
  context "<negative>" do
115
110
  [-1, -2, -50].each do |val|
116
- describe "#{val}" do
111
+ describe "#{val.inspect}" do
117
112
  let(:first) { val }
118
113
  test_empty self, :enum, line: __LINE__
119
114
  end
@@ -137,7 +132,7 @@ describe MergeEnum::MergeEnumerable do
137
132
 
138
133
  context "<illegal>" do
139
134
  ["hoge", "foo", "bar"].each do |val|
140
- describe "'#{val}'" do
135
+ describe "#{val.inspect}" do
141
136
  let(:first) { val }
142
137
  test_empty self, :enum, line: __LINE__
143
138
  end
@@ -222,7 +217,7 @@ describe MergeEnum::MergeEnumerable do
222
217
 
223
218
  context "<positive>" do
224
219
  [1, 2, 50].each do |val|
225
- describe "#{val}" do
220
+ describe "#{val.inspect}" do
226
221
  let(:first) { val }
227
222
  test_empty self, :enum, line: __LINE__
228
223
  end
@@ -231,7 +226,7 @@ describe MergeEnum::MergeEnumerable do
231
226
 
232
227
  context "<negative>" do
233
228
  [-1, -2, -50].each do |val|
234
- describe "#{val}" do
229
+ describe "#{val.inspect}" do
235
230
  let(:first) { val }
236
231
  test_empty self, :enum, line: __LINE__
237
232
  end
@@ -255,7 +250,7 @@ describe MergeEnum::MergeEnumerable do
255
250
 
256
251
  context "<illegal>" do
257
252
  ["hoge", "foo", "bar"].each do |val|
258
- describe "'#{val}'" do
253
+ describe "#{val.inspect}" do
259
254
  let(:first) { val }
260
255
  test_empty self, :enum, line: __LINE__
261
256
  end
@@ -329,6 +324,78 @@ describe MergeEnum::MergeEnumerable do
329
324
  let(:ary) { 0...100 }
330
325
  test_all self, :enum, 0...100, line: __LINE__
331
326
  end
327
+
328
+ describe "Proc.new { 0...100 }" do
329
+ let(:ary) {
330
+ ary = Proc.new { 0...100 }
331
+ allow(ary).to receive(:call).once.and_return 0...100
332
+ ary
333
+ }
334
+ test_all self, :enum, 0...100, line: __LINE__
335
+ end
336
+
337
+ describe "Proc.new { |e| 0...100 }" do
338
+ let(:ary) {
339
+ ary = Proc.new { |e| 0...100 }
340
+ allow(ary).to receive(:call).once.and_return 0...100
341
+ ary
342
+ }
343
+ test_all self, :enum, 0...100, line: __LINE__
344
+ end
345
+
346
+ describe "Proc.new { |e, i| 0...100 }" do
347
+ let(:ary) {
348
+ ary = Proc.new { |e, i| 0...100 }
349
+ allow(ary).to receive(:call).once.and_return 0...100
350
+ ary
351
+ }
352
+ test_all self, :enum, 0...100, line: __LINE__
353
+ end
354
+
355
+ describe "Proc.new { |e, i, x, y, z| 0...100 }" do
356
+ let(:ary) {
357
+ ary = Proc.new { |e, i, x, y, z| 0...100 }
358
+ allow(ary).to receive(:call).once.and_return 0...100
359
+ ary
360
+ }
361
+ test_all self, :enum, 0...100, line: __LINE__
362
+ end
363
+
364
+ describe "-> { 0...100 }" do
365
+ let(:ary) {
366
+ ary = -> { 0...100 }
367
+ allow(ary).to receive(:call).once.and_return 0...100
368
+ ary
369
+ }
370
+ test_all self, :enum, 0...100, line: __LINE__
371
+ end
372
+
373
+ describe "-> { |e| 0...100 }" do
374
+ let(:ary) {
375
+ ary = -> (c) { 0...100 }
376
+ allow(ary).to receive(:call).once.and_return 0...100
377
+ ary
378
+ }
379
+ test_all self, :enum, 0...100, line: __LINE__
380
+ end
381
+
382
+ describe "-> (e, i) { 0...100 }" do
383
+ let(:ary) {
384
+ ary = -> (e, i) { 0...100 }
385
+ allow(ary).to receive(:call).once.and_return 0...100
386
+ ary
387
+ }
388
+ test_all self, :enum, 0...100, line: __LINE__
389
+ end
390
+
391
+ describe "-> (e, i, x, y, z) { 0...100 }" do
392
+ let(:ary) {
393
+ ary = -> (e, i, x, y, z) { 0...100 }
394
+ allow(ary).to receive(:call).once.and_return 0...100
395
+ ary
396
+ }
397
+ test_all self, :enum, 0...100, line: __LINE__
398
+ end
332
399
  end
333
400
 
334
401
  describe ".new" do
@@ -403,6 +470,16 @@ describe MergeEnum::MergeEnumerable do
403
470
  test_all self, :enum, (31...100).step(2), line: __LINE__
404
471
  end
405
472
 
473
+ describe "Proc.new { |e, i| e.nil? or e < 30 }" do
474
+ let(:compact) { Proc.new { |e, i| e.nil? or e < 30 } }
475
+ test_all self, :enum, (31...100).step(2), line: __LINE__
476
+ end
477
+
478
+ describe "Proc.new { |e, i, x, y, z| e.nil? or e < 30 }" do
479
+ let(:compact) { Proc.new { |e, i, x, y, z| e.nil? or e < 30 } }
480
+ test_all self, :enum, (31...100).step(2), line: __LINE__
481
+ end
482
+
406
483
  describe "-> { true }" do
407
484
  let(:compact) { -> { true } }
408
485
  test_all self, :enum, [], line: __LINE__
@@ -422,6 +499,16 @@ describe MergeEnum::MergeEnumerable do
422
499
  let(:compact) { -> (e) { e.nil? or e < 30 } }
423
500
  test_all self, :enum, (31...100).step(2), line: __LINE__
424
501
  end
502
+
503
+ describe "-> (e, i) { e.nil? or e < 30 }" do
504
+ let(:compact) { -> (e, i) { e.nil? or e < 30 } }
505
+ test_all self, :enum, (31...100).step(2), line: __LINE__
506
+ end
507
+
508
+ describe "-> (e, i, x, y, z) { e.nil? or e < 30 }" do
509
+ let(:compact) { -> (e, i, x, y, z) { e.nil? or e < 30 } }
510
+ test_all self, :enum, (31...100).step(2), line: __LINE__
511
+ end
425
512
  end
426
513
  end
427
514
  end
@@ -482,6 +569,16 @@ describe MergeEnum::MergeEnumerable do
482
569
  test_all self, :enum, (1...30).step(2), line: __LINE__
483
570
  end
484
571
 
572
+ describe "Proc.new { |e, i| not e.nil? and e < 30 }" do
573
+ let(:select) { Proc.new { |e, i| not e.nil? and e < 30 } }
574
+ test_all self, :enum, (1...30).step(2), line: __LINE__
575
+ end
576
+
577
+ describe "Proc.new { |e, i, x, y, z| not e.nil? and e < 30 }" do
578
+ let(:select) { Proc.new { |e, i, x, y, z| not e.nil? and e < 30 } }
579
+ test_all self, :enum, (1...30).step(2), line: __LINE__
580
+ end
581
+
485
582
  describe "-> { true }" do
486
583
  let(:select) { -> { true } }
487
584
  test_all self, :enum, (0...100).map { |e| e.odd? ? e : nil }, line: __LINE__
@@ -501,6 +598,16 @@ describe MergeEnum::MergeEnumerable do
501
598
  let(:select) { -> (e) { not e.nil? and e < 30 } }
502
599
  test_all self, :enum, (1...30).step(2), line: __LINE__
503
600
  end
601
+
602
+ describe "-> (e, i) { not e.nil? and e < 30 }" do
603
+ let(:select) { -> (e, i) { not e.nil? and e < 30 } }
604
+ test_all self, :enum, (1...30).step(2), line: __LINE__
605
+ end
606
+
607
+ describe "-> (e, i, x, y, z) { not e.nil? and e < 30 }" do
608
+ let(:select) { -> (e, i, x, y, z) { not e.nil? and e < 30 } }
609
+ test_all self, :enum, (1...30).step(2), line: __LINE__
610
+ end
504
611
  end
505
612
  end
506
613
  end
@@ -548,6 +655,92 @@ describe MergeEnum::MergeEnumerable do
548
655
  end
549
656
  end
550
657
 
658
+ describe ".new" do
659
+ let(:enum) { Target.new ary, fill: fill }
660
+ describe "0...100," do
661
+ let(:ary) { 0...100 }
662
+
663
+ describe "fill:" do
664
+ describe "nil" do
665
+ let(:fill) { nil }
666
+
667
+ test_all self, :enum, 0...100, line: __LINE__
668
+ end
669
+
670
+ describe "true" do
671
+ let(:fill) { true }
672
+
673
+ test_all self, :enum, 0...100, line: __LINE__
674
+ end
675
+
676
+ describe "false" do
677
+ let(:fill) { false }
678
+
679
+ test_all self, :enum, 0...100, line: __LINE__
680
+ end
681
+ end
682
+ end
683
+ end
684
+
685
+ describe ".new" do
686
+ let(:enum) { Target.new ary, first: first, fill: fill }
687
+ describe "0...100," do
688
+ let(:ary) { 0...100 }
689
+ describe "first:" do
690
+ describe "150," do
691
+ let(:first) { 150 }
692
+
693
+ [nil, "hoge", "foo", "bar"].each do |val|
694
+ describe "fill: #{val.inspect}" do
695
+ let(:fill) { val }
696
+ test_interrupt self, :enum, (0...100).to_a, line: __LINE__
697
+ end
698
+ end
699
+
700
+ describe "fill:" do
701
+ describe "200...300" do
702
+ let(:fill) { 200...300 }
703
+
704
+ test_all self, :enum, (0...100).to_a + (200...250).to_a, line: __LINE__
705
+ end
706
+
707
+ describe "Proc.new { 200...300 }" do
708
+ let(:fill) { Proc.new { 200...300 } }
709
+
710
+ test_all self, :enum, (0...100).to_a + (200...250).to_a, line: __LINE__
711
+ end
712
+
713
+ describe "Proc.new { |c| 200...300 }" do
714
+ let(:fill) {
715
+ _proc = Proc.new { |c| 200...300 }
716
+ expect(_proc).to receive(:call).with(50).once.and_return 200...300
717
+ _proc
718
+ }
719
+
720
+ test_equal self, :enum, (0...100).to_a + (200...250).to_a, line: __LINE__
721
+ end
722
+
723
+ describe "-> { 200...300 }" do
724
+ let(:fill) { -> { 200...300 } }
725
+
726
+ test_all self, :enum, (0...100).to_a + (200...250).to_a, line: __LINE__
727
+ end
728
+
729
+ describe "-> (c) { 200...300 }" do
730
+ let(:fill) {
731
+ _proc = -> (c) { 200...300 }
732
+ expect(_proc).to receive(:call).with(50).once.and_return 200...300
733
+ _proc
734
+ }
735
+
736
+ test_equal self, :enum, (0...100).to_a + (200...250).to_a, line: __LINE__
737
+ end
738
+ end
739
+ end
740
+ end
741
+ end
742
+ end
743
+
551
744
  describe ".new" do
552
745
  let(:enum) { Target.new ary1, ary2 }
553
746
  describe "0...100, 200...250" do
@@ -623,7 +816,7 @@ describe MergeEnum::MergeEnumerable do
623
816
  describe "130" do
624
817
  let(:ary1) {
625
818
  ary = Proc.new { |c| 0...100 }
626
- allow(ary).to receive(:call).once.with(130).and_return(0...100)
819
+ allow(ary).to receive(:call).once.with(130).and_return 0...100
627
820
  ary
628
821
  }
629
822
  let(:first) { 130 }
@@ -631,7 +824,7 @@ describe MergeEnum::MergeEnumerable do
631
824
  context "<all>" do
632
825
  let(:ary2) {
633
826
  ary = Proc.new { |c| 200...250 }
634
- allow(ary).to receive(:call).once.with(30).and_return(200...250)
827
+ allow(ary).to receive(:call).once.with(30).and_return 200...250
635
828
  ary
636
829
  }
637
830
  test_equal self, :enum, (0...100).to_a + (200...230).to_a, line: __LINE__
@@ -650,7 +843,7 @@ describe MergeEnum::MergeEnumerable do
650
843
  describe "200" do
651
844
  let(:ary1) {
652
845
  ary = Proc.new { |c| 0...100 }
653
- allow(ary).to receive(:call).once.with(200).and_return(0...100)
846
+ allow(ary).to receive(:call).once.with(200).and_return 0...100
654
847
  ary
655
848
  }
656
849
  let(:ary2) { Proc.new { |c| 200...250 } }
@@ -687,7 +880,7 @@ describe MergeEnum::MergeEnumerable do
687
880
  describe "50" do
688
881
  let(:ary1) {
689
882
  ary = -> (c) { 0...100 }
690
- allow(ary).to receive(:call).once.with(50).and_return(0...100)
883
+ allow(ary).to receive(:call).once.with(50).and_return 0...100
691
884
  ary
692
885
  }
693
886
  let(:ary2) {
@@ -702,7 +895,7 @@ describe MergeEnum::MergeEnumerable do
702
895
  describe "130" do
703
896
  let(:ary1) {
704
897
  ary = -> (c) { 0...100 }
705
- allow(ary).to receive(:call).once.with(130).and_return(0...100)
898
+ allow(ary).to receive(:call).once.with(130).and_return 0...100
706
899
  ary
707
900
  }
708
901
  let(:first) { 130 }
@@ -710,7 +903,7 @@ describe MergeEnum::MergeEnumerable do
710
903
  context "<all>" do
711
904
  let(:ary2) {
712
905
  ary = -> (c) { 200...250 }
713
- allow(ary).to receive(:call).once.with(30).and_return(200...250)
906
+ allow(ary).to receive(:call).once.with(30).and_return 200...250
714
907
  ary
715
908
  }
716
909
  test_equal self, :enum, (0...100).to_a + (200...230).to_a, line: __LINE__
@@ -729,7 +922,7 @@ describe MergeEnum::MergeEnumerable do
729
922
  describe "200" do
730
923
  let(:ary1) {
731
924
  ary = -> (c) { 0...100 }
732
- allow(ary).to receive(:call).once.with(200).and_return(0...100)
925
+ allow(ary).to receive(:call).once.with(200).and_return 0...100
733
926
  ary
734
927
  }
735
928
  let(:ary2) { -> (c) { 200...250 } }
@@ -788,7 +981,7 @@ describe MergeEnum::MergeEnumerable do
788
981
  describe "50" do
789
982
  let(:ary1) {
790
983
  ary = Proc.new { |c| 0...100 }
791
- allow(ary).to receive(:call).once.with(50).and_return(0...100)
984
+ allow(ary).to receive(:call).once.with(50).and_return 0...100
792
985
  ary
793
986
  }
794
987
  let(:ary2) {
@@ -1049,17 +1242,78 @@ describe MergeEnum::MergeEnumerable do
1049
1242
  describe ".new" do
1050
1243
  describe "0...100, Array.new(10, nil), Proc.new { |c| 200...250 }, first: 130, compact: true, map: -> (e) { e * 2 }" do
1051
1244
  let(:enum) { Target.new 0...100, Array.new(10, nil), Proc.new { |c| 200...250 }, first: 130, compact: true, map: map }
1052
- let(:map) {
1053
- _proc = -> (e) { raise "using stub" }
1054
- expect(_proc).to receive(:call).exactly(130).times do |e|
1055
- e * 2
1245
+
1246
+ describe "map: nil" do
1247
+ let(:map) { nil }
1248
+ subject { enum.to_a }
1249
+ it { is_expected.to eq (0...100).to_a + (200...230).to_a }
1250
+ end
1251
+
1252
+ describe "map: false" do
1253
+ let(:map) { false }
1254
+ subject { enum.to_a }
1255
+ it { is_expected.to eq (0...100).to_a + (200...230).to_a }
1256
+ end
1257
+
1258
+ describe "map: true" do
1259
+ let(:map) { true }
1260
+ subject { enum.to_a }
1261
+ it { expect { is_expected }.to raise_error }
1262
+ end
1263
+
1264
+ ["hoge", "foo", "bar"].each do |m|
1265
+ describe "map: #{m.inspect}" do
1266
+ let(:map) { m }
1267
+ subject { enum.to_a }
1268
+ it { expect { is_expected }.to raise_error }
1056
1269
  end
1057
- _proc
1058
- }
1059
- subject { enum.to_a }
1060
- it {
1061
- is_expected.to eq ((0...100).to_a + (200...230).to_a).map{ |e| e * 2 }
1062
- }
1270
+ end
1271
+
1272
+ describe "map: -> { 100 }" do
1273
+ let(:map) {
1274
+ _proc = -> { raise "using stub" }
1275
+ expect(_proc).to receive(:call).with(no_args).exactly(130).times.and_return 100
1276
+ _proc
1277
+ }
1278
+ subject { enum.to_a }
1279
+ it { is_expected.to eq Array.new(130, 100) }
1280
+ end
1281
+
1282
+ describe "map: -> (e) { e * 2 }" do
1283
+ let(:map) {
1284
+ _proc = -> (e) { raise "using stub" }
1285
+ expect(_proc).to receive(:call).exactly(130).times do |e|
1286
+ e * 2
1287
+ end
1288
+ _proc
1289
+ }
1290
+ subject { enum.to_a }
1291
+ it { is_expected.to eq ((0...100).to_a + (200...230).to_a).map{ |e| e * 2 } }
1292
+ end
1293
+
1294
+ describe "map: -> (e, i) { i }" do
1295
+ let(:map) {
1296
+ _proc = -> (e, i) { raise "using stub" }
1297
+ expect(_proc).to receive(:call).exactly(130).times do |e, i|
1298
+ i
1299
+ end
1300
+ _proc
1301
+ }
1302
+ subject { enum.to_a }
1303
+ it { is_expected.to eq (0...130).to_a }
1304
+ end
1305
+
1306
+ describe "map: -> (e, i, x, y, z) { i }" do
1307
+ let(:map) {
1308
+ _proc = -> (e, i, x, y, z) { raise "using stub" }
1309
+ expect(_proc).to receive(:call).exactly(130).times do |e, i|
1310
+ i
1311
+ end
1312
+ _proc
1313
+ }
1314
+ subject { enum.to_a }
1315
+ it { is_expected.to eq (0...130).to_a }
1316
+ end
1063
1317
  end
1064
1318
  end
1065
1319
 
@@ -1074,11 +1328,7 @@ describe MergeEnum::MergeEnumerable do
1074
1328
  expect(_proc).to receive(:call).exactly(10).times.and_return 0...100
1075
1329
  _proc
1076
1330
  }
1077
- it {
1078
- 10.times do
1079
- enum.to_a
1080
- end
1081
- }
1331
+ it { 10.times { enum.to_a } }
1082
1332
  end
1083
1333
 
1084
1334
  describe "cache: true" do
@@ -1089,9 +1339,7 @@ describe MergeEnum::MergeEnumerable do
1089
1339
  _proc
1090
1340
  }
1091
1341
  it {
1092
- 10.times do
1093
- enum.to_a
1094
- end
1342
+ 10.times { enum.to_a }
1095
1343
  enum.options! cache: false
1096
1344
  enum.to_a
1097
1345
  }
@@ -1141,44 +1389,60 @@ describe MergeEnum::MergeEnumerable do
1141
1389
  it { is_expected.to eq ary }
1142
1390
  end
1143
1391
 
1144
- context "#merge_optons nil" do
1145
- subject { enum.merge_options(nil).to_a }
1146
- it { is_expected.to eq ary }
1392
+ [true, 1, "hoge"].each do |opt|
1393
+ context "#merge_optons #{opt.inspect}" do
1394
+ subject { enum.merge_options(opt).to_a }
1395
+ it { expect { is_expected }.to raise_error }
1396
+ end
1147
1397
  end
1148
1398
 
1149
- context "#merge_optons! nil" do
1150
- subject { enum.merge_options!(nil).to_a }
1151
- it { is_expected.to eq ary }
1399
+ [true, 1, "hoge"].each do |opt|
1400
+ context "#merge_optons! #{opt.inspect}" do
1401
+ subject { enum.merge_options!(opt).to_a }
1402
+ it { expect { is_expected }.to raise_error }
1403
+ end
1152
1404
  end
1153
1405
 
1154
- context "#replace_optons nil" do
1155
- subject { enum.replace_options(nil).to_a }
1156
- it { is_expected.to eq ary }
1406
+ [true, 1, "hoge"].each do |opt|
1407
+ context "#replace_optons #{opt.inspect}" do
1408
+ subject { enum.replace_options(opt).to_a }
1409
+ it { expect { is_expected }.to raise_error }
1410
+ end
1157
1411
  end
1158
1412
 
1159
- context "#replace_optons! nil" do
1160
- subject { enum.replace_options!(nil).to_a }
1161
- it { is_expected.to eq ary }
1413
+ [true, 1, "hoge"].each do |opt|
1414
+ context "#replace_optons! #{opt.inspect}" do
1415
+ subject { enum.replace_options!(opt).to_a }
1416
+ it { expect { is_expected }.to raise_error }
1417
+ end
1162
1418
  end
1163
1419
 
1164
- context "#merge_optons {}" do
1165
- subject { enum.merge_options({}).to_a }
1166
- it { is_expected.to eq ary }
1420
+ [nil, false, {}].each do |opt|
1421
+ context "#merge_optons #{opt.inspect}" do
1422
+ subject { enum.merge_options(opt).to_a }
1423
+ it { is_expected.to eq ary }
1424
+ end
1167
1425
  end
1168
1426
 
1169
- context "#merge_optons! {}" do
1170
- subject { enum.merge_options!({}).to_a }
1171
- it { is_expected.to eq ary }
1427
+ [nil, false, {}].each do |opt|
1428
+ context "#merge_optons! #{opt.inspect}" do
1429
+ subject { enum.merge_options!(opt).to_a }
1430
+ it { is_expected.to eq ary }
1431
+ end
1172
1432
  end
1173
1433
 
1174
- context "#replace_optons {}" do
1175
- subject { enum.replace_options({}).to_a }
1176
- it { is_expected.to eq ary }
1434
+ [nil, false, {}].each do |opt|
1435
+ context "#replace_optons #{opt.inspect}" do
1436
+ subject { enum.replace_options(opt).to_a }
1437
+ it { is_expected.to eq ary }
1438
+ end
1177
1439
  end
1178
1440
 
1179
- context "#replace_optons! {}" do
1180
- subject { enum.replace_options!({}).to_a }
1181
- it { is_expected.to eq ary }
1441
+ [nil, false, {}].each do |opt|
1442
+ context "#replace_optons! #{opt.inspect}" do
1443
+ subject { enum.replace_options!(opt).to_a }
1444
+ it { is_expected.to eq ary }
1445
+ end
1182
1446
  end
1183
1447
 
1184
1448
  context "#merge_optons({ first: 160 })" do
@@ -1211,44 +1475,32 @@ describe MergeEnum::MergeEnumerable do
1211
1475
  it { is_expected.to eq ary[0...80] }
1212
1476
  end
1213
1477
 
1214
- context "#merge_optons nil" do
1215
- subject { enum.merge_options(nil).to_a }
1216
- it { is_expected.to eq ary[0...80] }
1217
- end
1218
-
1219
- context "#merge_optons! nil" do
1220
- subject { enum.merge_options!(nil).to_a }
1221
- it { is_expected.to eq ary[0...80] }
1222
- end
1223
-
1224
- context "#replace_optons nil" do
1225
- subject { enum.replace_options(nil).to_a }
1226
- it { is_expected.to eq ary }
1227
- end
1228
-
1229
- context "#replace_optons! nil" do
1230
- subject { enum.replace_options!(nil).to_a }
1231
- it { is_expected.to eq ary }
1232
- end
1233
-
1234
- context "#merge_optons {}" do
1235
- subject { enum.merge_options({}).to_a }
1236
- it { is_expected.to eq ary[0...80] }
1478
+ [nil, false, {}].each do |opt|
1479
+ context "#merge_optons #{opt.inspect}" do
1480
+ subject { enum.merge_options(opt).to_a }
1481
+ it { is_expected.to eq ary[0...80] }
1482
+ end
1237
1483
  end
1238
1484
 
1239
- context "#merge_optons! {}" do
1240
- subject { enum.merge_options!({}).to_a }
1241
- it { is_expected.to eq ary[0...80] }
1485
+ [nil, false, {}].each do |opt|
1486
+ context "#merge_optons! #{opt.inspect}" do
1487
+ subject { enum.merge_options!(opt).to_a }
1488
+ it { is_expected.to eq ary[0...80] }
1489
+ end
1242
1490
  end
1243
1491
 
1244
- context "#replace_optons {}" do
1245
- subject { enum.replace_options({}).to_a }
1246
- it { is_expected.to eq ary }
1492
+ [nil, false, {}].each do |opt|
1493
+ context "#replace_optons #{opt.inspect}" do
1494
+ subject { enum.replace_options(opt).to_a }
1495
+ it { is_expected.to eq ary }
1496
+ end
1247
1497
  end
1248
1498
 
1249
- context "#replace_optons! {}" do
1250
- subject { enum.replace_options!({}).to_a }
1251
- it { is_expected.to eq ary }
1499
+ [nil, false, {}].each do |opt|
1500
+ context "#replace_optons! #{opt.inspect}" do
1501
+ subject { enum.replace_options!(opt).to_a }
1502
+ it { is_expected.to eq ary }
1503
+ end
1252
1504
  end
1253
1505
 
1254
1506
  context "#merge_optons({ first: 160 })" do
@@ -1277,7 +1529,7 @@ describe MergeEnum::MergeEnumerable do
1277
1529
  {}, { first: 100 }, { compact: true },
1278
1530
  { hoge: "hoge", foo: "foo" }
1279
1531
  ].each do |opts|
1280
- describe "0...100, #{opts}" do
1532
+ describe "0...100, #{opts.inspect}" do
1281
1533
  let(:enum) { Target.new 0...100, opts }
1282
1534
 
1283
1535
  context "<@options>" do
@@ -1290,7 +1542,7 @@ describe MergeEnum::MergeEnumerable do
1290
1542
  { first: 100 }, { compact: true },
1291
1543
  { hoge: "hoge", foo: "foo" }
1292
1544
  ].each do |opts_2|
1293
- describe "#merge_options(#{opts_2})" do
1545
+ describe "#merge_options(#{opts_2.inspect})" do
1294
1546
  let(:enum_2) { enum.merge_options opts_2 }
1295
1547
 
1296
1548
  context "<eq>" do
@@ -1306,7 +1558,7 @@ describe MergeEnum::MergeEnumerable do
1306
1558
  end
1307
1559
  end
1308
1560
 
1309
- describe "#merge_options!(#{opts_2})" do
1561
+ describe "#merge_options!(#{opts_2.inspect})" do
1310
1562
  let(:enum_2) { enum.merge_options! opts_2 }
1311
1563
 
1312
1564
  context "<eq>" do
@@ -1322,7 +1574,7 @@ describe MergeEnum::MergeEnumerable do
1322
1574
  end
1323
1575
  end
1324
1576
 
1325
- describe "#replace_options(#{opts_2})" do
1577
+ describe "#replace_options(#{opts_2.inspect})" do
1326
1578
  let(:enum_2) { enum.replace_options opts_2 }
1327
1579
 
1328
1580
  context "<eq>" do
@@ -1341,7 +1593,7 @@ describe MergeEnum::MergeEnumerable do
1341
1593
  end
1342
1594
  end
1343
1595
 
1344
- describe "#replace_options!(#{opts_2})" do
1596
+ describe "#replace_options!(#{opts_2.inspect})" do
1345
1597
  let(:enum_2) { enum.replace_options! opts_2 }
1346
1598
 
1347
1599
  context "<eq>" do
@@ -1,9 +1,35 @@
1
1
  # encoding: utf-8
2
2
  require 'rubygems'
3
- require 'merge_enum'
4
3
 
5
4
  RSpec.configure do |config|
6
5
  config.color = true
7
6
  config.order = :random
8
7
  end
9
8
 
9
+ require 'simplecov'
10
+ SimpleCov.start do
11
+ add_filter do |file|
12
+ not file.filename =~ /^#{SimpleCov.root}\/lib/
13
+ end
14
+ end
15
+
16
+ require 'merge_enum'
17
+
18
+ require 'rspec_term'
19
+ RSpecTerm.configure do |config|
20
+ config.success_url = 'https://raw.githubusercontent.com/brightgenerous/rspec_term/master/images/success.jpg'
21
+ config.running_url = 'https://raw.githubusercontent.com/brightgenerous/rspec_term/master/images/running.jpg'
22
+ config.failure_url = 'https://raw.githubusercontent.com/brightgenerous/rspec_term/master/images/failure.jpg'
23
+ config.nothing_url = 'https://raw.githubusercontent.com/brightgenerous/rspec_term/master/images/nothing.jpg'
24
+ config.tmp_dir = '/tmp/rspec_term'
25
+ config.coverage do
26
+ SimpleCov.result.covered_percent
27
+ end
28
+ config.coverage_url do |coverage|
29
+ case coverage
30
+ when 100
31
+ 'https://raw.githubusercontent.com/brightgenerous/rspec_term/master/images/coverage_100.jpg'
32
+ end
33
+ end
34
+ end
35
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: merge_enum
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - brightgenerous
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-30 00:00:00.000000000 Z
11
+ date: 2014-06-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -28,16 +28,64 @@ dependencies:
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ~>
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 3.0.0.rc1
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 3.0.0.rc1
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
39
60
  - !ruby/object:Gem::Version
40
61
  version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec_term
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '0.3'
76
+ - - '>='
77
+ - !ruby/object:Gem::Version
78
+ version: 0.3.0
79
+ type: :development
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: '0.3'
86
+ - - '>='
87
+ - !ruby/object:Gem::Version
88
+ version: 0.3.0
41
89
  description: Merge those like Enumerable
42
90
  email:
43
91
  - katou.akihiro@gmail.com