lib/leaderboard.rb in leaderboard-3.10.0 vs lib/leaderboard.rb in leaderboard-3.11.0

- old
+ new

@@ -217,10 +217,30 @@ # @return String of optional member data. def member_data_for_in(leaderboard_name, member) @redis_connection.hget(member_data_key(leaderboard_name), member) end + # Retrieve the optional member data for a given member in the named leaderboard. + # + # @param leaderboard_name [String] Name of the leaderboard. + # @param members [Array] Member names. + # + # @return array of strings of optional member data. + def members_data_for_in(leaderboard_name, members) + return [] unless members.size > 0 + @redis_connection.hmget(member_data_key(leaderboard_name), *members) + end + + # Retrieve the optional member data for the given members in the leaderboard. + # + # @param members [Array] Member names. + # + # @return array of strings of optional member data. + def members_data_for(members) + members_data_for_in(@leaderboard_name, members) + end + # Update the optional member data for a given member in the leaderboard. # # @param member [String] Member name. # @param member_data [String] Optional member data. def update_member_data(member, member_data) @@ -858,11 +878,11 @@ # @param position [int] Position in named leaderboard. # @param options [Hash] Options to be used when retrieving the member from the named leaderboard. # # @return a page of leaders from the named leaderboard. def member_at_in(leaderboard_name, position, options = {}) - if position <= total_members_in(leaderboard_name) + if position > 0 && position <= total_members_in(leaderboard_name) leaderboard_options = DEFAULT_LEADERBOARD_REQUEST_OPTIONS.dup leaderboard_options.merge!(options) page_size = validate_page_size(leaderboard_options[:page_size]) || @page_size current_page = (position.to_f / page_size.to_f).ceil offset = (position - 1) % page_size @@ -962,14 +982,16 @@ next unless leaderboard_options[:include_missing] end data[@score_key] = responses[index * 2 + 1].to_f if responses[index * 2 + 1] end - if leaderboard_options[:with_member_data] - data[@member_data_key] = member_data_for_in(leaderboard_name, member) - end - ranks_for_members << data + end + + if leaderboard_options[:with_member_data] + members_data_for_in(leaderboard_name, members).each_with_index do |member_data, index| + ranks_for_members[index][@member_data_key] = member_data + end end case leaderboard_options[:sort_by] when :rank ranks_for_members = ranks_for_members.sort_by { |member| member[@rank_key] }