multi_hash_iterator 0.1.1 → 0.1.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: 88ea9612ce4415bb7a612f00af4edcec6edf2a6c
4
- data.tar.gz: 688f2342d86cad7c69f1f3ae2aeab36f4ae4cf75
3
+ metadata.gz: c32d73415e08880797327bbd129fd53dcef6e252
4
+ data.tar.gz: 2ee116a6205b0f3e9932389d006d9b2d6c54a2df
5
5
  SHA512:
6
- metadata.gz: b15ea5786196b6a2f58643440442fc80a91fb679aab9092d841c013b50e5aa151ba70b86ca29921b384a6035a43e47f686315e5ed79532acab7022f3795a2d28
7
- data.tar.gz: ae72986870f7e74381a8b827bce6695afc142d936895f4ed2654ac019f5a065a9de03f0d6c47c63248b7e3e2c8e79b545d21aaa0a08e2cbcebaab1b2bf5da511
6
+ metadata.gz: fc5597a65a39ddf1e9849c3c31a17f34849c55d41676e9f4f583357cfd5ca8d36b41b110f287e444183295c8e415d0c8379a2d437209838a47ca164baf937417
7
+ data.tar.gz: 6acd3756c7249d81d9d574db38660d1dbd3bd04669ec57b2bc37e2097a10d0b02da29d3164c2e9032dde533211505930f383dfca8ab00931b53bd845dd43b280
@@ -6,6 +6,7 @@ class MultiHash
6
6
 
7
7
  def initialize *hashes
8
8
  @hashes = hashes
9
+ @memo = {}
9
10
  end
10
11
 
11
12
  # Enumerate for each key.
@@ -14,11 +15,15 @@ class MultiHash
14
15
  def each
15
16
  return enum_for(:each) unless block_given?
16
17
 
17
- final_hash = {}
18
+ # iterate through the memo first
19
+ @memo.each do |k, v|
20
+ yield k, v
21
+ end
22
+
18
23
  count = @hashes.length
19
24
  count.times do |i|
20
25
  @hashes[i].each do |key, v|
21
- next if final_hash[key]
26
+ next if @memo[key]
22
27
 
23
28
  values = [].fill(nil, 0, i)
24
29
  values << v
@@ -27,7 +32,7 @@ class MultiHash
27
32
  end
28
33
 
29
34
  yield key, values if block_given?
30
- final_hash[key] = values
35
+ @memo[key] = values
31
36
  end
32
37
  end
33
38
  end
@@ -2,7 +2,7 @@ require './lib/multi_hash_iterator'
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "multi_hash_iterator"
5
- s.version = "0.1.1"
5
+ s.version = "0.1.2"
6
6
  s.authors = ["Albert Tedja"]
7
7
  s.email = "nicho_tedja@yahoo.com"
8
8
  s.homepage = "https://github.com/atedja/multi_hash_iterator"
@@ -28,7 +28,7 @@ class TestMultiHashIterator < Minitest::Test
28
28
  end
29
29
 
30
30
 
31
- def test_basic
31
+ def test_basic_multiple_iteration
32
32
  h1 = { a: 1, b: 2, c: 3 }
33
33
  h2 = { a: 2, b: 3 }
34
34
  h3 = { b: 4, d: 6 }
@@ -81,6 +81,10 @@ class TestMultiHashIterator < Minitest::Test
81
81
  assert_equal Enumerator, e.class
82
82
  assert_equal [:a, [1, 2, nil]], e.next
83
83
  assert_equal [:b, [2, 3, 4]], e.next
84
+
85
+ e = mh.each
86
+ assert_equal [:a, [1, 2, nil]], e.next
87
+ assert_equal [:b, [2, 3, 4]], e.next
84
88
  end
85
89
 
86
90
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: multi_hash_iterator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Albert Tedja