merge_enum 0.2.1 → 0.2.2

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: bafae3364065c9abe915758a6dd04295cd3fedb1
4
- data.tar.gz: fede260331446d4c1de5dfcee837916aad302330
3
+ metadata.gz: 83c9df67a3bf180ed443689aa752ffb05daa2776
4
+ data.tar.gz: eafcdd7dfa4844eab8b96e1bb0dd31670ee19e58
5
5
  SHA512:
6
- metadata.gz: 87d4c7b73e7604d0f93690da8a5a33b52ef4c4ca2c74a50f6a3a4c8f31e4de6775614deaa8b91c3cf0efcf5b3a47bab2f55c66ecdf534118e8b0384aa7f08f17
7
- data.tar.gz: 3d02a507a2be532da38e62d277f84124290b67fe39ae3d202006cd25befd0ebdff359be540b22a90845a2e784ec608c0d6fa2bb9f8e5780fa241a4796088429b
6
+ metadata.gz: 6feac7d52703573869924e008a5dbea02ea08a2ec204a4e935147e1bc5e367cb4827c1d643790ba7bb77bc77e891fdc40e3b7db1db052e9a58866be60df973f4
7
+ data.tar.gz: 21a08e2bcf620c15a2e95e3aa978738c86b4a005dece07d97a1fd22a2c827d24bbc3fec8615644ffe084800fe1ee77124e51fc8ecf16574a086a286cbff5a5dd
data/README.md CHANGED
@@ -1,11 +1,11 @@
1
1
  # MergeEnum
2
- ###### ver 0.2.0
2
+ ###### ver 0.2.2
3
3
 
4
4
  複数のEnumerale(*1)を連結(合成)するEnumerableです。
5
5
  要素が必要になった時点で追加するように動作します。
6
- 効率的なはずです。
6
+ 効率的です。
7
7
 
8
- (*1) `each`,`first`メソッドが定義されていれば、Enumerableでなくても可
8
+ (*1) `each`,`first`メソッドが定義されていればEnumerableでなくてもよく、それを返すProc, Lambdaでもよい。
9
9
 
10
10
  ## Installation
11
11
 
@@ -42,12 +42,12 @@ Or install it yourself as:
42
42
  > m_enum.count
43
43
  => 55
44
44
 
45
- #### Enumerable#merge_enum から生成できるようにしました
45
+ #### Enumerable#merge_enum から生成できる
46
46
 
47
47
  > m_enum = (0...10).merge_enum(first: 13)
48
48
  => #<MergeEnum::MergeEnumerable:0x007fa...>
49
49
 
50
- #### concat, concat! で連結できるようにしました
50
+ #### concat, concat! で連結できる
51
51
 
52
52
  > m_enum = (0...10).merge_enum(first: 13)
53
53
  => #<MergeEnum::MergeEnumerable:0x007fb...>
@@ -24,18 +24,29 @@ module MergeEnum
24
24
  fst = opt_fst - cnt
25
25
  break if fst <= 0
26
26
  end
27
+ called_first = false
27
28
  if c.is_a? Proc
28
29
  if c.arity == 0
29
30
  c = c.call
30
31
  else
31
32
  c = c.call fst
33
+ called_first = true
32
34
  end
33
35
  end
34
- c = c.first fst if fst
35
- c.each do |i|
36
- block.call i
36
+ if fst
37
+ c = c.first fst unless called_first
38
+ _cnt = 0
39
+ c.each.with_index 1 do |e, i|
40
+ block.call e
41
+ _cnt = i
42
+ break if fst <= _cnt
43
+ end
44
+ cnt += _cnt
45
+ else
46
+ c.each do |e|
47
+ block.call e
48
+ end
37
49
  end
38
- cnt += c.count
39
50
  end
40
51
  self
41
52
  end
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
  module MergeEnum
3
- VERSION = "0.2.1"
3
+ VERSION = "0.2.2"
4
4
  end
5
5
 
@@ -248,8 +248,8 @@ describe MergeEnum::MergeEnumerable do
248
248
  it "equality enumerator" do
249
249
  enum = MergeEnum::MergeEnumerable.new(
250
250
  0...100,
251
- -> (c) { arg1 = c; 200...250 },
252
- Proc.new { |c| arg2 = c; 300...330 },
251
+ -> (c) { 200...250 },
252
+ Proc.new { |c| 300...330 },
253
253
  first: 200
254
254
  )
255
255
  enum_sub = enum.each
@@ -262,14 +262,18 @@ describe MergeEnum::MergeEnumerable do
262
262
 
263
263
  describe "Whitebox" do
264
264
  it "call first method" do
265
- ary = (0...100)
265
+ ary_1 = 0...100
266
+ ary_2 = 200...250
267
+ ary_3 = 300...330
266
268
  enum = MergeEnum::MergeEnumerable.new(
267
- ary,
268
- -> (c) { arg1 = c; 200...250 },
269
- Proc.new { |c| arg2 = c; 300...330 },
269
+ ary_1,
270
+ -> (c) { ary_2 },
271
+ Proc.new { ary_3 },
270
272
  first: 200
271
273
  )
272
- expect(ary).to receive(:first).with(200).and_return(ary)
274
+ expect(ary_1).to receive(:first).with(200).and_return(ary_1)
275
+ ary_2.stub(:first) { raise "unexpected" }
276
+ expect(ary_3).to receive(:first).with(50).and_return(ary_3)
273
277
  expect(enum.count).to be 180
274
278
  end
275
279
  end
@@ -277,8 +281,8 @@ describe MergeEnum::MergeEnumerable do
277
281
  describe ":concat Method" do
278
282
  it "equality enumerator" do
279
283
  enm_1 = 0...100
280
- enm_2 = -> (c) { arg1 = c; 200...250 }
281
- enm_3 = Proc.new { |c| arg2 = c; 300...330 }
284
+ enm_2 = -> (c) { 200...250 }
285
+ enm_3 = Proc.new { |c| 300...330 }
282
286
  enum = MergeEnum::MergeEnumerable.new(
283
287
  enm_1, enm_2,
284
288
  first: 130
@@ -296,8 +300,8 @@ describe MergeEnum::MergeEnumerable do
296
300
  describe ":concat! Method" do
297
301
  it "equality enumerator" do
298
302
  enm_1 = 0...100
299
- enm_2 = -> (c) { arg1 = c; 200...250 }
300
- enm_3 = Proc.new { |c| arg2 = c; 300...330 }
303
+ enm_2 = -> (c) { 200...250 }
304
+ enm_3 = Proc.new { |c| 300...330 }
301
305
  enum = MergeEnum::MergeEnumerable.new(
302
306
  enm_1, enm_2,
303
307
  first: 130
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.2.1
4
+ version: 0.2.2
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-12 00:00:00.000000000 Z
11
+ date: 2014-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler