From ebd5fa76c5ec49b568e50edec1d16fca757bd5fa Mon Sep 17 00:00:00 2001 From: Stephan Kaag Date: Mon, 22 Jul 2013 22:24:47 +0200 Subject: [PATCH] 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 bc5bc5d9fdd..1b74ee22b5b 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 26cf7ac5d3a..2e193ef41a8 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?