From ad2b6675041f9a68f730d1181f2b00569a435f56 Mon Sep 17 00:00:00 2001 From: Stephan Kaag <stephan@ka.ag> Date: Mon, 22 Jul 2013 22:16:46 +0200 Subject: [PATCH 1/3] Remove dead code --- app/models/post.rb | 5 ----- lib/post_revisor.rb | 2 -- 2 files changed, 7 deletions(-) diff --git a/app/models/post.rb b/app/models/post.rb index e32b563e0..bc5bc5d9f 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -78,11 +78,6 @@ class Post < ActiveRecord::Base Digest::SHA1.hexdigest(raw.gsub(/\s+/, "")) end - def reset_cooked - @cooked_document = nil - self.cooked = nil - end - def self.white_listed_image_classes @white_listed_image_classes ||= ['avatar', 'favicon', 'thumbnail'] end diff --git a/lib/post_revisor.rb b/lib/post_revisor.rb index aed1a9dda..9a4fac265 100644 --- a/lib/post_revisor.rb +++ b/lib/post_revisor.rb @@ -66,8 +66,6 @@ class PostRevisor end def update_post - @post.reset_cooked - @post.raw = @new_raw @post.updated_by = @user @post.last_editor_id = @user.id From ebd5fa76c5ec49b568e50edec1d16fca757bd5fa Mon Sep 17 00:00:00 2001 From: Stephan Kaag <stephan@ka.ag> Date: Mon, 22 Jul 2013 22:24:47 +0200 Subject: [PATCH 2/3] Reuse post-analyzer and cooked-document when requesting multiple post stats --- app/models/post.rb | 7 ++++--- app/models/post_analyzer.rb | 11 ++++------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/app/models/post.rb b/app/models/post.rb index bc5bc5d9f..1b74ee22b 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -83,17 +83,18 @@ class Post < ActiveRecord::Base end def post_analyzer - @post_analyzer = PostAnalyzer.new(raw, topic_id) + @post_analyzers ||= {} + @post_analyzers[raw_hash] ||= PostAnalyzer.new(raw, topic_id) end %w{raw_mentions linked_hosts image_count attachment_count link_count raw_links}.each do |attr| define_method(attr) do - PostAnalyzer.new(raw, topic_id).send(attr) + post_analyzer.send(attr) end end def cook(*args) - PostAnalyzer.new(raw, topic_id).cook(*args) + post_analyzer.cook(*args) end diff --git a/app/models/post_analyzer.rb b/app/models/post_analyzer.rb index 26cf7ac5d..2e193ef41 100644 --- a/app/models/post_analyzer.rb +++ b/app/models/post_analyzer.rb @@ -1,17 +1,10 @@ class PostAnalyzer - attr_accessor :cooked, :raw - def initialize(raw, topic_id) @raw = raw @topic_id = topic_id end - def cooked_document - @cooked = cook(@raw, topic_id: @topic_id) - @cooked_document = Nokogiri::HTML.fragment(@cooked) - end - # What we use to cook posts def cook(*args) cooked = PrettyText.cook(*args) @@ -110,6 +103,10 @@ class PostAnalyzer private + def cooked_document + @cooked_document ||= Nokogiri::HTML.fragment(cook(@raw, topic_id: @topic_id)) + end + def link_is_a_mention?(l) html_class = l.attributes['class'] return false if html_class.nil? From b58da2fcf94ee7ebd29110bf6b6fa2709d4eaa5a Mon Sep 17 00:00:00 2001 From: Stephan Kaag <stephan@ka.ag> Date: Mon, 22 Jul 2013 22:39:20 +0200 Subject: [PATCH 3/3] Add some TODO's --- app/models/post.rb | 1 + app/models/post_alert_observer.rb | 12 +++++------- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/app/models/post.rb b/app/models/post.rb index 1b74ee22b..a62bea04d 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -292,6 +292,7 @@ class Post < ActiveRecord::Base end + # TODO: move to post-analyzer? # Determine what posts are quoted by this post def extract_quoted_post_numbers temp_collector = [] diff --git a/app/models/post_alert_observer.rb b/app/models/post_alert_observer.rb index 141ae363b..251d5605b 100644 --- a/app/models/post_alert_observer.rb +++ b/app/models/post_alert_observer.rb @@ -96,20 +96,18 @@ class PostAlertObserver < ActiveRecord::Observer display_username: opts[:display_username] || post.user.username }.to_json) end + # TODO: Move to post-analyzer? # Returns a list users who have been mentioned def extract_mentioned_users(post) User.where(username_lower: post.raw_mentions).where("id <> ?", post.user_id) end + # TODO: Move to post-analyzer? # Returns a list of users who were quoted in the post def extract_quoted_users(post) - result = [] - post.raw.scan(/\[quote=\"([^,]+),.+\"\]/).uniq.each do |m| - username = m.first.strip.downcase - user = User.where("username_lower = :username and id != :id", username: username, id: post.user_id).first - result << user if user.present? - end - result + post.raw.scan(/\[quote=\"([^,]+),.+\"\]/).uniq.map do |m| + User.where("username_lower = :username and id != :id", username: m.first.strip.downcase, id: post.user_id).first + end.compact end # Notify a bunch of users