From 23dae8b155eb5eee5cd4c858a501723983e4cf31 Mon Sep 17 00:00:00 2001 From: James Herdman Date: Sat, 29 Aug 2009 15:03:48 -0400 Subject: [PATCH] Clean up Web#page_names_by_author implemention --- app/models/web.rb | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/app/models/web.rb b/app/models/web.rb index d62c7cc9..12e1ee9e 100644 --- a/app/models/web.rb +++ b/app/models/web.rb @@ -82,18 +82,19 @@ class Web < ActiveRecord::Base self[:markup].to_sym end + # @return [Hash] a Hash wherein the key is some author's name, and the + # values are an array of page names for that author. def page_names_by_author - connection.select_all( - 'SELECT DISTINCT r.author AS author, p.name AS page_name ' + - 'FROM revisions r ' + - 'JOIN pages p ON r.page_id = p.id ' + - "WHERE p.web_id = #{self.id} " + - 'ORDER by p.name').inject({}) { |result, row| - author, page_name = row['author'], row['page_name'] - result[author] = [] unless result.has_key?(author) - result[author] << page_name - result - } + data = revisions.all( + :select => "DISTINCT revisions.author AS author, pages.name AS page_name", + :order => "pages.name" + ) + + data.inject({}) do |result, revision| + result[revision.author] ||= [] + result[revision.author] << revision.page_name + result + end end def remove_pages(pages_to_be_removed)