array_enumerator 0.0.2 → 0.0.3
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.
- data/VERSION +1 -1
- data/array_enumerator.gemspec +1 -1
- data/lib/array_enumerator.rb +43 -0
- data/spec/array_enumerator_spec.rb +13 -0
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.3
|
data/array_enumerator.gemspec
CHANGED
data/lib/array_enumerator.rb
CHANGED
@@ -47,6 +47,49 @@ class Array_enumerator
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
+
#This method should only be used with 'each_index'.
|
51
|
+
def [](key)
|
52
|
+
if @each_index and @each_index.key?(key)
|
53
|
+
ret = @each_index[key]
|
54
|
+
@each_index.delete(key)
|
55
|
+
return ret
|
56
|
+
end
|
57
|
+
|
58
|
+
raise "This only works when also using 'each_index'. Invalid key: '#{key}'."
|
59
|
+
end
|
60
|
+
|
61
|
+
#Yields each count-key and caches element for returning it by using the []-method.
|
62
|
+
def each_index(&block)
|
63
|
+
enum = Enumerator.new do |yielder|
|
64
|
+
begin
|
65
|
+
@each_index = {}
|
66
|
+
|
67
|
+
count = 0
|
68
|
+
self.each do |ele|
|
69
|
+
#Remove previous element to not take up memory.
|
70
|
+
count_before = count - 1
|
71
|
+
@each_index.delete(count_before) if @each_index.key?(count_before)
|
72
|
+
|
73
|
+
#Add current element to cache.
|
74
|
+
@each_index[count] = ele
|
75
|
+
yield(count)
|
76
|
+
|
77
|
+
#Increase count for next run.
|
78
|
+
count += 1
|
79
|
+
end
|
80
|
+
ensure
|
81
|
+
@each_index = nil
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
if block
|
86
|
+
enum.each(&block)
|
87
|
+
return nil
|
88
|
+
else
|
89
|
+
return enum
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
50
93
|
#Returns a enumerator that can yield the all the lements (both cached and future un-cached ones).
|
51
94
|
def to_enum
|
52
95
|
check_corrupted
|
@@ -128,4 +128,17 @@ describe "ArrayEnumerator" do
|
|
128
128
|
end
|
129
129
|
end
|
130
130
|
end
|
131
|
+
|
132
|
+
it "each_index" do
|
133
|
+
arr = %w[a b c d e f g]
|
134
|
+
ae = Array_enumerator.new(arr.to_enum)
|
135
|
+
|
136
|
+
expect = 0
|
137
|
+
ae.each_index do |num|
|
138
|
+
raise "Expected #{expect} but got: #{num}" if num != expect
|
139
|
+
ele = ae[num]
|
140
|
+
raise "Expected #{arr[num]} but got: #{ele}" if ele != arr[num]
|
141
|
+
expect += 1
|
142
|
+
end
|
143
|
+
end
|
131
144
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: array_enumerator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.3
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Kasper Johansen
|
@@ -104,7 +104,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
104
104
|
requirements:
|
105
105
|
- - ">="
|
106
106
|
- !ruby/object:Gem::Version
|
107
|
-
hash:
|
107
|
+
hash: -947760670988037179
|
108
108
|
segments:
|
109
109
|
- 0
|
110
110
|
version: "0"
|