diff --git a/lib/leaderboard.rb b/lib/leaderboard.rb index 15308a5..d02774b 100644 --- a/lib/leaderboard.rb +++ b/lib/leaderboard.rb @@ -822,6 +822,18 @@ def top(number,options = {}) members_from_rank_range(1, number, options) end + # Retrieve members from the named leaderboard within a range from 1 to the number given. + # + # @param leaderboard_name [String] Name of the leaderboard. + # @param starting_rank [int] Starting rank (inclusive). + # @param ending_rank [int] Ending rank (inclusive). + # @param options [Hash] Options to be used when retrieving the data from the leaderboard. + # + # @return members from the leaderboard that fall within the given rank range. + def top_in(leaderboard_name, number, options={}) + members_from_rank_range_in(leaderboard_name, 1, number, options) + end + # Retrieve a member at the specified index from the leaderboard. # diff --git a/spec/leaderboard_spec.rb b/spec/leaderboard_spec.rb index 1a1d2bc..ca199fa 100644 --- a/spec/leaderboard_spec.rb +++ b/spec/leaderboard_spec.rb @@ -646,6 +646,25 @@ expect(members[24][:member]).to eql('member_1') end + it 'should allow you to retrieve a given set of members from the named leaderboard in a range from 1 to the number given' do + rank_members_in_leaderboard(25) + + members = @leaderboard.top_in("name", 5) + expect(members.size).to be(5) + expect(members[0][:member]).to eql('member_25') + expect(members[0][:score].to_i).to be(25) + expect(members[4][:member]).to eql('member_21') + + members = @leaderboard.top(1) + expect(members.size).to be(1) + expect(members[0][:member]).to eql('member_25') + + members = @leaderboard.top(26) + expect(members.size).to be(25) + expect(members[0][:member]).to eql('member_25') + expect(members[0][:score].to_i).to be(25) + expect(members[24][:member]).to eql('member_1') + end it 'should sort by rank if the :sort_by option is set to :rank' do rank_members_in_leaderboard(25)