Skip to content

Commit

Permalink
fix sorted set when for non existent key
Browse files Browse the repository at this point in the history
  • Loading branch information
mkdynamic committed Mar 6, 2014
1 parent a5d691d commit f4f7024
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 8 deletions.
19 changes: 11 additions & 8 deletions lib/redis/connection/memory.rb
Original file line number Diff line number Diff line change
Expand Up @@ -900,6 +900,17 @@ def zremrangebyscore(key, min, max)
range.size
end

def zremrangebyrank(key, start, stop)
data_type_check(key, ZSet)
return 0 unless data[key]

sorted_elements = data[key].sort_by { |k, v| v }
start = sorted_elements.length if start > sorted_elements.length
elements_to_delete = sorted_elements[start..stop]
elements_to_delete.each { |elem, rank| data[key].delete(elem) }
elements_to_delete.size
end

def zinterstore(out, *args)
data_type_check(out, ZSet)
args_handler = SortedSetArgumentHandler.new(args)
Expand All @@ -914,14 +925,6 @@ def zunionstore(out, *args)
data[out].size
end

def zremrangebyrank(key, start, stop)
sorted_elements = data[key].sort_by { |k, v| v }
start = sorted_elements.length if start > sorted_elements.length
elements_to_delete = sorted_elements[start..stop]
elements_to_delete.each { |elem, rank| data[key].delete(elem) }
elements_to_delete.size
end

private
def raise_argument_error(command, match_string=command)
error_message = if %w(hmset mset_odd).include?(match_string.downcase)
Expand Down
4 changes: 4 additions & 0 deletions spec/sorted_sets_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,10 @@ module FakeRedis
@client.zremrangebyrank("key", 25, -1).should be == 0
@client.zcard('key').should be == 3
end

it "should return 0 if the key didn't exist" do
@client.zremrangebyrank("key", 0, 1).should be == 0
end
end

describe "#zunionstore" do
Expand Down

0 comments on commit f4f7024

Please sign in to comment.