Fixes reversed: true.
Hey crystal, why don’t you have reversed ranges?
This commit is contained in:
parent
65c607d9fc
commit
6dc3a6d2f7
@ -166,13 +166,17 @@ describe "DODB::DataBase" do
|
||||
db << ship
|
||||
end
|
||||
|
||||
# The two #each test iteration.
|
||||
db.each_with_index do |item, index|
|
||||
item.should eq Ship.all_ships[index]
|
||||
end
|
||||
|
||||
db.each_with_index(reversed: true) do |item, index|
|
||||
item.should eq Ship.all_ships.reverse[index]
|
||||
item.should eq Ship.all_ships[index]
|
||||
end
|
||||
|
||||
# Actual reversal is tested here.
|
||||
db.to_a(reversed: true).should eq db.to_a.reverse
|
||||
end
|
||||
|
||||
it "respects the provided offsets if any" do
|
||||
|
23
src/dodb.cr
23
src/dodb.cr
@ -179,18 +179,25 @@ class DODB::DataBase(V)
|
||||
end
|
||||
|
||||
private def each_key(reversed = false)
|
||||
range = if reversed
|
||||
(last_index..0)
|
||||
else
|
||||
(0..last_index)
|
||||
end
|
||||
start = 0
|
||||
_end = last_index
|
||||
step = 1
|
||||
|
||||
range.each do |key|
|
||||
if reversed
|
||||
start = _end
|
||||
_end = 0
|
||||
step = -1
|
||||
end
|
||||
|
||||
key = start
|
||||
while step == 1 ? key <= _end : key >= _end
|
||||
full_path = file_path key
|
||||
|
||||
next unless File.exists? full_path
|
||||
if File.exists? full_path
|
||||
yield key, full_path
|
||||
end
|
||||
|
||||
yield key, full_path
|
||||
key = key + step
|
||||
end
|
||||
end
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user