From a4f346566ce86ce65744961fc7b19140b613d2f6 Mon Sep 17 00:00:00 2001 From: Greg Dean Date: Tue, 20 Oct 2020 09:15:37 -0700 Subject: [PATCH 1/2] Fixes bug causing the rank of an unranked member to be 1 --- lib/competition_ranking_leaderboard.rb | 2 ++ spec/competition_ranking_leaderboard_spec.rb | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/lib/competition_ranking_leaderboard.rb b/lib/competition_ranking_leaderboard.rb index 95f7a96..00347a5 100644 --- a/lib/competition_ranking_leaderboard.rb +++ b/lib/competition_ranking_leaderboard.rb @@ -9,6 +9,8 @@ class CompetitionRankingLeaderboard < Leaderboard # @return the rank for a member in the leaderboard. def rank_for_in(leaderboard_name, member) member_score = score_for_in(leaderboard_name, member) + return nil if member_score.nil? + if @reverse return @redis_connection.zcount(leaderboard_name, '-inf', "(#{member_score}") + 1 rescue nil else diff --git a/spec/competition_ranking_leaderboard_spec.rb b/spec/competition_ranking_leaderboard_spec.rb index bcb9b2f..4490eb0 100644 --- a/spec/competition_ranking_leaderboard_spec.rb +++ b/spec/competition_ranking_leaderboard_spec.rb @@ -184,4 +184,11 @@ expect(leaders[2][:member]).to eql('member_25') end end + + context 'ranks' do + it 'should return nil rank for unranked mamebr' do + leaderboard = CompetitionRankingLeaderboard.new('ranks', Leaderboard::DEFAULT_OPTIONS, {:host => "127.0.0.1", :db => 15}) + expect(leaderboard.rank_for('unranked_member')).to eq(nil) + end + end end From 5019f507b030f19c119ea873220e34422049f1ec Mon Sep 17 00:00:00 2001 From: Greg Dean Date: Mon, 7 Dec 2020 13:49:20 -0500 Subject: [PATCH 2/2] Update spec/competition_ranking_leaderboard_spec.rb Co-authored-by: David Czarnecki --- spec/competition_ranking_leaderboard_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/competition_ranking_leaderboard_spec.rb b/spec/competition_ranking_leaderboard_spec.rb index 4490eb0..866e38d 100644 --- a/spec/competition_ranking_leaderboard_spec.rb +++ b/spec/competition_ranking_leaderboard_spec.rb @@ -186,7 +186,7 @@ end context 'ranks' do - it 'should return nil rank for unranked mamebr' do + it 'should return nil rank for unranked member' do leaderboard = CompetitionRankingLeaderboard.new('ranks', Leaderboard::DEFAULT_OPTIONS, {:host => "127.0.0.1", :db => 15}) expect(leaderboard.rank_for('unranked_member')).to eq(nil) end