From 8fbf76b4846928556df6093302b19a32b17942cb Mon Sep 17 00:00:00 2001 From: Serge Paquet Date: Mon, 23 Dec 2013 22:20:06 -0500 Subject: [PATCH] use activerecord query interface instead of deprecated finder methods --- app/controllers/application_controller.rb | 9 +-- app/controllers/comments_controller.rb | 57 ++++++++++--------- app/controllers/filters_controller.rb | 4 +- app/controllers/home_controller.rb | 23 ++++---- app/controllers/invitations_controller.rb | 4 +- app/controllers/login_controller.rb | 2 +- app/controllers/messages_controller.rb | 2 +- app/controllers/moderations_controller.rb | 2 +- app/controllers/signup_controller.rb | 4 +- app/controllers/stories_controller.rb | 29 ++++++---- app/controllers/users_controller.rb | 4 +- app/models/comment.rb | 5 +- app/models/invitation.rb | 3 +- app/models/invitation_request.rb | 3 +- app/models/keystore.rb | 2 +- app/models/message.rb | 2 +- app/models/story.rb | 6 +- app/models/tag.rb | 2 +- app/models/vote.rb | 15 +++-- .../20121112165212_add_tag_media_types.rb | 2 +- extras/markdowner.rb | 2 +- script/parse_inbound_mail | 4 +- 22 files changed, 102 insertions(+), 84 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index ac763bb..8614bbd 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -9,7 +9,7 @@ class ApplicationController < ActionController::Base def authenticate_user if session[:u] - @user = User.find_by_session_token(session[:u].to_s) + @user = User.where(:session_token => session[:u].to_s).first end true @@ -59,8 +59,9 @@ class ApplicationController < ActionController::Base @_tags_filtered = nil def tags_filtered_by_cookie - @_tags_filtered ||= cookies[TAG_FILTER_COOKIE].to_s.split(",").map{|t| - Tag.find_by_tag(t) }.reject{|tf| !tf } + @_tags_filtered ||= Tag.where( + :tag => cookies[TAG_FILTER_COOKIE].to_s.split(",") + ) end def user_is_spider? @@ -69,7 +70,7 @@ class ApplicationController < ActionController::Base def find_user_from_rss_token if !@user && request[:format] == "rss" && params[:token].to_s.present? - @user = User.find_by_rss_token(params[:token].to_s) + @user = User.where(:rss_token => params[:token].to_s).first end end end diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index 83c8398..f6b389a 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -8,7 +8,7 @@ class CommentsController < ApplicationController before_filter :find_user_from_rss_token, :only => [ :index ] def create - if !(story = Story.find_by_short_id(params[:story_id])) || story.is_gone? + if !(story = Story.where(:short_id => params[:story_id]).first) || story.is_gone? return render :text => "can't find story", :status => 400 end @@ -18,8 +18,8 @@ class CommentsController < ApplicationController comment.user_id = @user.id if params[:parent_comment_short_id].present? - if pc = Comment.find_by_story_id_and_short_id(story.id, - params[:parent_comment_short_id]) + if pc = Comment.where(:story_id => story.id, :short_id => + params[:parent_comment_short_id]).first comment.parent_comment_id = pc.id # needed for carryng along in comment preview form comment.parent_comment_short_id = params[:parent_comment_short_id] @@ -31,8 +31,8 @@ class CommentsController < ApplicationController # prevent double-clicks of the post button if !params[:preview].present? && - (pc = Comment.find_by_story_id_and_user_id_and_parent_comment_id(story.id, - @user.id, comment.parent_comment_id)) + (pc = Comment.where(:story_id => story.id, :user_id => @user.id, + :parent_comment_id => comment.parent_comment_id).first) if (Time.now - pc.created_at) < 5.minutes comment.errors.add(:comment, "^You have already posted a comment " << "here recently.") @@ -72,8 +72,7 @@ class CommentsController < ApplicationController end def edit - if !((comment = Comment.find_by_short_id(params[:comment_id])) && - comment.is_editable_by_user?(@user)) + if !((comment = find_comment) && comment.is_editable_by_user?(@user)) return render :text => "can't find comment", :status => 400 end @@ -83,8 +82,7 @@ class CommentsController < ApplicationController end def delete - if !((comment = Comment.find_by_short_id(params[:comment_id])) && - comment.is_deletable_by_user?(@user)) + if !((comment = find_comment) && comment.is_deletable_by_user?(@user)) return render :text => "can't find comment", :status => 400 end @@ -96,8 +94,7 @@ class CommentsController < ApplicationController end def undelete - if !((comment = Comment.find_by_short_id(params[:comment_id])) && - comment.is_undeletable_by_user?(@user)) + if !((comment = find_comment) && comment.is_undeletable_by_user?(@user)) return render :text => "can't find comment", :status => 400 end @@ -109,8 +106,7 @@ class CommentsController < ApplicationController end def update - if !((comment = Comment.find_by_short_id(params[:comment_id])) && - comment.is_editable_by_user?(@user)) + if !((comment = find_comment) && comment.is_editable_by_user?(@user)) return render :text => "can't find comment", :status => 400 end @@ -133,8 +129,7 @@ class CommentsController < ApplicationController end def preview - if !((comment = Comment.find_by_short_id(params[:comment_id])) && - comment.is_editable_by_user?(@user)) + if !((comment = find_comment) && comment.is_editable_by_user?(@user)) return render :text => "can't find comment", :status => 400 end @@ -149,7 +144,7 @@ class CommentsController < ApplicationController end def unvote - if !(comment = Comment.find_by_short_id(params[:comment_id])) + if !(comment = find_comment) return render :text => "can't find comment", :status => 400 end @@ -160,7 +155,7 @@ class CommentsController < ApplicationController end def upvote - if !(comment = Comment.find_by_short_id(params[:comment_id])) + if !(comment = find_comment) return render :text => "can't find comment", :status => 400 end @@ -171,7 +166,7 @@ class CommentsController < ApplicationController end def downvote - if !(comment = Comment.find_by_short_id(params[:comment_id])) + if !(comment = find_comment) return render :text => "can't find comment", :status => 400 end @@ -198,13 +193,17 @@ class CommentsController < ApplicationController @page = params[:page].to_i end - @comments = Comment.find( - :all, - :conditions => "is_deleted = 0 AND is_moderated = 0", - :order => "created_at DESC", - :offset => ((@page - 1) * COMMENTS_PER_PAGE), - :limit => COMMENTS_PER_PAGE, - :include => [ :user, :story ]) + @comments = Comment.where( + :is_deleted => false, :is_moderated => false + ).order( + "created_at DESC" + ).offset( + (@page - 1) * COMMENTS_PER_PAGE + ).limit( + COMMENTS_PER_PAGE + ).includes( + :user, :story + ) if @user @votes = Vote.comment_votes_by_user_for_comment_ids_hash(@user.id, @@ -220,7 +219,7 @@ class CommentsController < ApplicationController def threads if params[:user] - @showing_user = User.find_by_username!(params[:user]) + @showing_user = User.where(:username => params[:user]).first! @heading = @title = "Threads for #{@showing_user.username}" @cur_url = "/threads/#{@showing_user.username}" elsif !@user @@ -269,4 +268,10 @@ end @comments = @threads.flatten end + +private + + def find_comment + Comment.where(:short_id => params[:comment_id]).first + end end diff --git a/app/controllers/filters_controller.rb b/app/controllers/filters_controller.rb index cb5939b..b398c13 100644 --- a/app/controllers/filters_controller.rb +++ b/app/controllers/filters_controller.rb @@ -23,7 +23,7 @@ class FiltersController < ApplicationController params.each do |k,v| if (m = k.match(/^tag_(.+)$/)) && v.to_i == 1 && - (t = Tag.find_by_tag(m[1])) && t.valid_for?(@user) + (t = Tag.where(:tag => m[1]).first) && t.valid_for?(@user) new_filters.push m[1] end end @@ -40,7 +40,7 @@ class FiltersController < ApplicationController new_filters.each do |t| tf = TagFilter.new tf.user_id = @user.id - tf.tag_id = Tag.find_by_tag(t).id + tf.tag_id = Tag.where(:tag => t).first.id tf.save! end else diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index 2c6bce7..3176497 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -55,7 +55,7 @@ class HomeController < ApplicationController end def newest_by_user - for_user = User.find_by_username!(params[:user]) + for_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) @@ -70,7 +70,7 @@ class HomeController < ApplicationController end def tagged - @tag = Tag.find_by_tag!(params[:tag]) + @tag = Tag.where(:tag => params[:tag]).first! @stories = find_stories_for_user_and_tag_and_newest_and_by_user(@user, @tag, false, nil) @@ -168,13 +168,16 @@ private conds += filtered_tag_ids end - stories = Story.find( - :all, - :conditions => conds, - :include => [ :user, { :taggings => :tag } ], - :limit => STORIES_PER_PAGE + 1, - :offset => ((@page - 1) * STORIES_PER_PAGE), - :order => (newest ? "stories.created_at DESC" : "hotness") + stories = Story.where( + *conds + ).includes( + :user, :taggings => :tag + ).limit( + STORIES_PER_PAGE + 1 + ).offset( + (@page - 1) * STORIES_PER_PAGE + ).order( + newest ? "stories.created_at DESC" : "hotness" ) show_more = false @@ -201,7 +204,7 @@ private # eager load comment counts if stories.any? comment_counts = {} - Keystore.find(:all, :conditions => stories.map{|s| + Keystore.where(stories.map{|s| "`key` = 'story:#{s.id}:comment_count'" }.join(" OR ")).each do |ks| comment_counts[ks.key[/\d+/].to_i] = ks.value end diff --git a/app/controllers/invitations_controller.rb b/app/controllers/invitations_controller.rb index 51ce196..743bf03 100644 --- a/app/controllers/invitations_controller.rb +++ b/app/controllers/invitations_controller.rb @@ -10,7 +10,7 @@ class InvitationsController < ApplicationController end def confirm_email - if !(ir = InvitationRequest.find_by_code(params[:code].to_s)) + if !(ir = InvitationRequest.where(:code => params[:code].to_s).first) flash[:error] = "Invalid or expired invitation request" return redirect_to "/invitations/request" end @@ -67,7 +67,7 @@ class InvitationsController < ApplicationController end def send_for_request - if !(ir = InvitationRequest.find_by_code(params[:code].to_s)) + if !(ir = InvitationRequest.where(:code => params[:code].to_s).first) flash[:error] = "Invalid or expired invitation request" return redirect_to "/invitations" end diff --git a/app/controllers/login_controller.rb b/app/controllers/login_controller.rb index 2939621..539bc53 100644 --- a/app/controllers/login_controller.rb +++ b/app/controllers/login_controller.rb @@ -51,7 +51,7 @@ class LoginController < ApplicationController @title = "Reset Password" if params[:token].blank? || - !(@reset_user = User.find_by_password_reset_token(params[:token].to_s)) + !(@reset_user = User.where(:password_reset_token => params[:token].to_s).first) flash[:error] = "Invalid reset token. It may have already been " << "used or you may have copied it incorrectly." return redirect_to forgot_password_url diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb index d465340..fb3bf7a 100644 --- a/app/controllers/messages_controller.rb +++ b/app/controllers/messages_controller.rb @@ -96,7 +96,7 @@ class MessagesController < ApplicationController private def find_message - if @message = Message.find_by_short_id(params[:message_id] || params[:id]) + if @message = Message.where(:short_id => params[:message_id] || params[:id]).first if (@message.author_user_id == @user.id || @message.recipient_user_id == @user.id) return true diff --git a/app/controllers/moderations_controller.rb b/app/controllers/moderations_controller.rb index ec2f249..896b61d 100644 --- a/app/controllers/moderations_controller.rb +++ b/app/controllers/moderations_controller.rb @@ -14,6 +14,6 @@ class ModerationsController < ApplicationController end @moderations = Moderation.order("id desc").limit(50).offset((@page - 1) * - 50).all + 50) end end diff --git a/app/controllers/signup_controller.rb b/app/controllers/signup_controller.rb index d735696..b6d436c 100644 --- a/app/controllers/signup_controller.rb +++ b/app/controllers/signup_controller.rb @@ -16,7 +16,7 @@ class SignupController < ApplicationController return redirect_to "/" end - if !(@invitation = Invitation.find_by_code(params[:invitation_code].to_s)) + if !(@invitation = Invitation.where(:code => params[:invitation_code].to_s).first) flash[:error] = "Invalid or expired invitation" return redirect_to "/signup" end @@ -30,7 +30,7 @@ class SignupController < ApplicationController end def signup - if !(@invitation = Invitation.find_by_code(params[:invitation_code].to_s)) + if !(@invitation = Invitation.where(:code => params[:invitation_code].to_s).first) flash[:error] = "Invalid or expired invitation." return redirect_to "/signup" end diff --git a/app/controllers/stories_controller.rb b/app/controllers/stories_controller.rb index 4c9847d..325fde2 100644 --- a/app/controllers/stories_controller.rb +++ b/app/controllers/stories_controller.rb @@ -5,7 +5,7 @@ class StoriesController < ApplicationController before_filter :require_logged_in_user, :only => [ :delete, :create, :edit, :fetch_url_title, :new ] - before_filter :find_story, :only => [ :destroy, :edit, :undelete, :update ] + before_filter :find_user_story, :only => [ :destroy, :edit, :undelete, :update ] def create @title = "Submit Story" @@ -116,7 +116,7 @@ class StoriesController < ApplicationController end def show - @story = Story.find_by_short_id!(params[:id]) + @story = Story.where(:short_id => params[:id]).first! if @story.can_be_seen_by_user?(@user) @title = @story.title @@ -144,11 +144,11 @@ class StoriesController < ApplicationController end def show_comment - @story = Story.find_by_short_id!(params[:id]) + @story = Story.where(:short_id => params[:id]).first! @title = @story.title - @showing_comment = Comment.find_by_short_id(params[:comment_short_id]) + @showing_comment = Comment.where(:short_id => params[:comment_short_id]).first if !@showing_comment flash[:error] = "Could not find comment. It may have been deleted." @@ -208,7 +208,7 @@ class StoriesController < ApplicationController end def unvote - if !(story = Story.find_by_short_id(params[:story_id])) + if !(story = find_story) return render :text => "can't find story", :status => 400 end @@ -219,7 +219,7 @@ class StoriesController < ApplicationController end def upvote - if !(story = Story.find_by_short_id(params[:story_id])) + if !(story = find_story) return render :text => "can't find story", :status => 400 end @@ -230,7 +230,7 @@ class StoriesController < ApplicationController end def downvote - if !(story = Story.find_by_short_id(params[:story_id])) + if !(story = find_story) return render :text => "can't find story", :status => 400 end @@ -245,12 +245,17 @@ class StoriesController < ApplicationController end private + def find_story + Story.where(:short_id => params[:story_id]).first + end + + def find_user_story if @user.is_moderator? - @story = Story.find_by_short_id(params[:story_id] || params[:id]) + @story = Story.where(:short_id => params[:story_id] || params[:id]).first else - @story = Story.find_by_user_id_and_short_id(@user.id, - (params[:story_id] || params[:id])) + @story = Story.where(:user_id => @user.id, :short_id => + (params[:story_id] || params[:id])).first end if !@story @@ -263,8 +268,8 @@ private def load_user_votes if @user - if v = Vote.find_by_user_id_and_story_id_and_comment_id(@user.id, - @story.id, nil) + if v = Vote.where(:user_id => @user.id, :story_id => @story.id, + :comment_id => nil).first @story.vote = v.vote end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 3506670..2202dbb 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,6 +1,6 @@ class UsersController < ApplicationController def show - @showing_user = User.find_by_username!(params[:id]) + @showing_user = User.where(:username => params[:id]).first! @title = "User #{@showing_user.username}" end @@ -13,7 +13,7 @@ class UsersController < ApplicationController (parents[u.invited_by_user_id.to_i] ||= []).push u end - Keystore.find(:all, :conditions => "`key` like 'user:%:karma'").each do |k| + Keystore.where("key like 'user:%:karma'").each do |k| karmas[k.key[/\d+/].to_i] = k.value end diff --git a/app/models/comment.rb b/app/models/comment.rb index e11333c..01311b4 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -130,7 +130,7 @@ class Comment < ActiveRecord::Base def deliver_mention_notifications self.plaintext_comment.scan(/\B\@([\w\-]+)/).flatten.uniq.each do |mention| - if u = User.find_by_username(mention) + if u = User.where(:username => mention).first if u.id == self.user.id next end @@ -309,8 +309,7 @@ class Comment < ActiveRecord::Base cs = [ "story_id = ?", story_id ] end - Comment.find(:all, :conditions => cs, :order => "confidence DESC", - :include => :user).each do |c| + Comment.where(*cs).order("confidence DESC").includes(:user).each do |c| (parents[c.parent_comment_id.to_i] ||= []).push c end diff --git a/app/models/invitation.rb b/app/models/invitation.rb index c953591..ea99f8e 100644 --- a/app/models/invitation.rb +++ b/app/models/invitation.rb @@ -18,7 +18,8 @@ class Invitation < ActiveRecord::Base raise "too many hash collisions" end - if !Invitation.find_by_code(self.code = Utils.random_str(15)) + self.code = Utils.random_str(15) + unless Invitation.exists?(:code => self.code) break end end diff --git a/app/models/invitation_request.rb b/app/models/invitation_request.rb index 1065e0a..1424b0b 100644 --- a/app/models/invitation_request.rb +++ b/app/models/invitation_request.rb @@ -18,7 +18,8 @@ class InvitationRequest < ActiveRecord::Base raise "too many hash collisions" end - if !InvitationRequest.find_by_code(self.code = Utils.random_str(15)) + self.code = Utils.random_str(15) + unless InvitationRequest.exists?(:code => self.code) break end end diff --git a/app/models/keystore.rb b/app/models/keystore.rb index 2ffb73b..123e8da 100644 --- a/app/models/keystore.rb +++ b/app/models/keystore.rb @@ -4,7 +4,7 @@ class Keystore < ActiveRecord::Base attr_accessible nil def self.get(key) - Keystore.find_by_key(key) + self.where(:key => key).first end def self.put(key, value) diff --git a/app/models/message.rb b/app/models/message.rb index 543d114..a9308f2 100644 --- a/app/models/message.rb +++ b/app/models/message.rb @@ -60,7 +60,7 @@ class Message < ActiveRecord::Base def recipient_username=(username) self.recipient_user_id = nil - if u = User.find_by_username(username) + if u = User.where(:username => username).first self.recipient_user_id = u.id @recipient_username = username else diff --git a/app/models/story.rb b/app/models/story.rb index 974aed2..91c4d0f 100644 --- a/app/models/story.rb +++ b/app/models/story.rb @@ -96,7 +96,7 @@ class Story < ActiveRecord::Base end conds[0] << ")" - if s = Story.find(:first, :conditions => conds) + if s = Story.where(*conds).first return s end @@ -302,8 +302,8 @@ class Story < ActiveRecord::Base end new_tag_names_a.each do |tag_name| - if tag_name.to_s != "" && !self.tags.map{|t| t.tag }.include?(tag_name) - if t = Tag.find_by_tag(tag_name) + if tag_name.to_s != "" && !self.tags.exists?(:tag => tag_name) + if t = Tag.where(:tag => tag_name).first # we can't lookup whether the user is allowed to use this tag yet # because we aren't assured to have a user_id by now; we'll do it in # the validation with check_tags diff --git a/app/models/tag.rb b/app/models/tag.rb index 3bc36d7..7d7d976 100644 --- a/app/models/tag.rb +++ b/app/models/tag.rb @@ -9,7 +9,7 @@ class Tag < ActiveRecord::Base end def self.all_with_filtered_counts_for(user) - counts = TagFilter.count(:group => "tag_id") + counts = TagFilter.group(:tag_id).count Tag.order(:tag).accessible_to(user).map{|t| t.filtered_count = counts[t.id].to_i diff --git a/app/models/vote.rb b/app/models/vote.rb index 439d33b..20e4bbd 100644 --- a/app/models/vote.rb +++ b/app/models/vote.rb @@ -36,8 +36,11 @@ class Vote < ActiveRecord::Base def self.comment_votes_by_user_for_story_hash(user_id, story_id) votes = {} - Vote.find(:all, :conditions => [ "user_id = ? AND story_id = ? AND " + - "comment_id IS NOT NULL", user_id, story_id ]).each do |v| + Vote.where( + :user_id => user_id, :story_id => story_id + ).where( + "comment_id IS NOT NULL" + ).each do |v| votes[v.comment_id] = { :vote => v.vote, :reason => v.reason } end @@ -58,7 +61,7 @@ class Vote < ActiveRecord::Base end cond[0] += ")" - Vote.find(:all, :conditions => cond).each do |v| + Vote.where(*cond).each do |v| votes[v.story_id] = { :vote => v.vote, :reason => v.reason } end @@ -79,7 +82,7 @@ class Vote < ActiveRecord::Base end cond[0] += ")" - Vote.find(:all, :conditions => cond).each do |v| + Vote.where(*cond).each do |v| votes[v.comment_id] = { :vote => v.vote, :reason => v.reason } end @@ -88,8 +91,8 @@ class Vote < ActiveRecord::Base def self.vote_thusly_on_story_or_comment_for_user_because(vote, story_id, comment_id, user_id, reason, update_counters = true) - v = Vote.find_or_initialize_by_user_id_and_story_id_and_comment_id(user_id, - story_id, comment_id) + v = Vote.where(:user_id => user_id, :story_id => story_id, + :comment_id => comment_id).first_or_initialize if !v.new_record? && v.vote == vote return diff --git a/db/migrate/20121112165212_add_tag_media_types.rb b/db/migrate/20121112165212_add_tag_media_types.rb index a87ffef..f141997 100644 --- a/db/migrate/20121112165212_add_tag_media_types.rb +++ b/db/migrate/20121112165212_add_tag_media_types.rb @@ -3,7 +3,7 @@ class AddTagMediaTypes < ActiveRecord::Migration add_column :tags, :is_media, :boolean, :default => false [ "pdf", "video" ].each do |t| - if tag = Tag.find_by_tag(t) + if tag = Tag.where(:tag => t).first tag.is_media = true tag.save end diff --git a/extras/markdowner.rb b/extras/markdowner.rb index fa336af..79fc2ca 100644 --- a/extras/markdowner.rb +++ b/extras/markdowner.rb @@ -33,7 +33,7 @@ class Markdowner if !opts[:disable_profile_links] # make @username link to that user's profile html.gsub!(/\B\@([\w\-]+)/) do |u| - if User.find_by_username(u[1 .. -1]) + if User.exists?(:username => u[1 .. -1]) "#{u}" else u diff --git a/script/parse_inbound_mail b/script/parse_inbound_mail index 2560fdb..6447aae 100755 --- a/script/parse_inbound_mail +++ b/script/parse_inbound_mail @@ -70,9 +70,9 @@ end irt = email[:in_reply_to].to_s.gsub(/[^A-Za-z0-9@\.]/, "") if m = irt.match(/^comment\.([^\.]+)\.\d+@/) - parent = Comment.find_by_short_id(m[1]) + parent = Comment.where(:short_id => m[1]).first elsif m = irt.match(/^story\.([^\.]+)\.\d+@/) - parent = Story.find_by_short_id(m[1]) + parent = Story.where(:short_id => m[1]).first end if !parent