multi_hash_iterator 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/multi_hash_iterator.rb +8 -3
- data/multi_hash_iterator.gemspec +1 -1
- data/test/test_multihashiterator.rb +5 -1
- 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: c32d73415e08880797327bbd129fd53dcef6e252
|
4
|
+
data.tar.gz: 2ee116a6205b0f3e9932389d006d9b2d6c54a2df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fc5597a65a39ddf1e9849c3c31a17f34849c55d41676e9f4f583357cfd5ca8d36b41b110f287e444183295c8e415d0c8379a2d437209838a47ca164baf937417
|
7
|
+
data.tar.gz: 6acd3756c7249d81d9d574db38660d1dbd3bd04669ec57b2bc37e2097a10d0b02da29d3164c2e9032dde533211505930f383dfca8ab00931b53bd845dd43b280
|
data/lib/multi_hash_iterator.rb
CHANGED
@@ -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
|
-
|
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
|
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
|
-
|
35
|
+
@memo[key] = values
|
31
36
|
end
|
32
37
|
end
|
33
38
|
end
|
data/multi_hash_iterator.gemspec
CHANGED
@@ -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.
|
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
|
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
|
|