diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb
index 3528d1a..1ee2a48 100644
--- a/app/controllers/home_controller.rb
+++ b/app/controllers/home_controller.rb
@@ -11,8 +11,7 @@ class HomeController < ApplicationController
before_filter :find_user_from_rss_token, :only => [ :index, :newest ]
def index
- @stories = find_stories_for_user_and_tag_and_newest_and_by_user(@user,
- nil, false, nil)
+ @stories = find_stories
@rss_link ||= " true })
@heading = @title = "Newest Stories"
@cur_url = "/newest"
+ @newest = true
@rss_link = ""
- @newest = true
-
respond_to do |format|
format.html { render :action => "index" }
format.rss {
@@ -61,24 +58,23 @@ class HomeController < ApplicationController
end
def newest_by_user
- for_user = User.where(:username => params[:user]).first!
+ by_user = User.where(:username => params[:user]).first!
- @stories = find_stories_for_user_and_tag_and_newest_and_by_user(@user,
- nil, false, for_user.id)
+ @stories = find_stories({ :by_user => by_user })
- @heading = @title = "Newest Stories by #{for_user.username}"
- @cur_url = "/newest/#{for_user.username}"
+ @heading = @title = "Newest Stories by #{by_user.username}"
+ @cur_url = "/newest/#{by_user.username}"
@newest = true
- @for_user = for_user.username
+ @for_user = by_user.username
render :action => "index"
end
def tagged
@tag = Tag.where(:tag => params[:tag]).first!
- @stories = find_stories_for_user_and_tag_and_newest_and_by_user(@user,
- @tag, false, nil)
+
+ @stories = find_stories({ :tag => @tag })
@heading = @title = @tag.description.blank?? @tag.tag : @tag.description
@cur_url = tag_url(@tag.tag)
@@ -115,8 +111,7 @@ class HomeController < ApplicationController
end
private
- def find_stories_for_user_and_tag_and_newest_and_by_user(user, tag = nil,
- newest = false, by_user = nil)
+ def find_stories(how = {})
@page = 1
if params[:page].to_i > 0
@page = params[:page].to_i
@@ -124,32 +119,28 @@ private
# guest views have caching, but don't bother for logged-in users or dev or
# when the user has tag filters
- if Rails.env == "development" || user || tags_filtered_by_cookie.any?
- stories, @show_more =
- _find_stories_for_user_and_tag_and_newest_and_by_user(user, tag,
- newest, by_user)
+ if Rails.env == "development" || @user || tags_filtered_by_cookie.any?
+ stories, @show_more = _find_stories(how)
else
- stories, @show_more = Rails.cache.fetch("stories tag:" <<
- "#{tag ? tag.tag : ""} new:#{newest} page:#{@page.to_i} by:#{by_user}",
- :expires_in => 45) do
- _find_stories_for_user_and_tag_and_newest_and_by_user(user, tag,
- newest, by_user)
+ stories, @show_more = Rails.cache.fetch("stories " <<
+ "tag:#{how[:tag].try(:tag)} new:#{how[:newest]} page:#{@page.to_i} " <<
+ "by:#{how[:by_user].try(:id)}", :expires_in => 45) do
+ _find_stories(how)
end
end
stories
end
- def _find_stories_for_user_and_tag_and_newest_and_by_user(user, tag = nil,
- newest = false, by_user = nil)
+ def _find_stories(how)
stories = Story.where(:is_expired => false)
- if user && !(newest || by_user)
+ if @user && !(how[:newest] || how[:by_user])
# exclude downvoted items
stories = stories.where(
Story.arel_table[:id].not_in(
Vote.arel_table.where(
- Vote.arel_table[:user_id].eq(user.id)
+ Vote.arel_table[:user_id].eq(@user.id)
).where(
Vote.arel_table[:vote].lt(0)
).where(
@@ -162,13 +153,13 @@ private
end
filtered_tag_ids = []
- if user
+ if @user
filtered_tag_ids = @user.tag_filters.map{|tf| tf.tag_id }
else
filtered_tag_ids = tags_filtered_by_cookie.map{|t| t.id }
end
- if tag
+ if how[:tag]
stories = stories.where(
Story.arel_table[:id].in(
Tagging.arel_table.where(
@@ -178,8 +169,8 @@ private
)
)
)
- elsif by_user
- stories = stories.where(:user_id => by_user)
+ elsif how[:by_user]
+ stories = stories.where(:user_id => how[:by_user].id)
elsif filtered_tag_ids.any?
stories = stories.where(
Story.arel_table[:id].not_in(
@@ -192,7 +183,7 @@ private
)
end
- if newest && @page == 1
+ if how[:newest] && @page == 1
# try to help recently-submitted stories that didn't gain traction
# grab the list of stories from the past n days, shifting out popular
@@ -224,7 +215,7 @@ private
).offset(
(@page - 1) * STORIES_PER_PAGE
).order(
- newest ? "stories.created_at DESC" : "hotness"
+ how[:newest] ? "stories.created_at DESC" : "hotness"
).to_a
show_more = false
@@ -233,9 +224,8 @@ private
stories.pop
end
- if user
- votes = Vote.votes_by_user_for_stories_hash(user.id,
- stories.map{|s| s.id })
+ if @user
+ votes = Vote.votes_by_user_for_stories_hash(@user.id, stories.map(&:id))
stories.each do |s|
if votes[s.id]