From 9565843d449bf3f5eb4f70080c31a1640878dd59 Mon Sep 17 00:00:00 2001
From: Chris Hunt <chrishunt@github.com>
Date: Wed, 19 Jun 2013 00:20:30 -0700
Subject: [PATCH] Create post:refresh_oneboxes rake task

---
 lib/tasks/posts.rake | 48 +++++++++++++++++++++++++++++---------------
 1 file changed, 32 insertions(+), 16 deletions(-)

diff --git a/lib/tasks/posts.rake b/lib/tasks/posts.rake
index 4fa472c65ab..2228e11f504 100644
--- a/lib/tasks/posts.rake
+++ b/lib/tasks/posts.rake
@@ -1,25 +1,41 @@
-desc "walk all posts updating cooked with latest markdown"
-task "posts:rebake" => :environment do
+desc 'Update each post with latest markdown'
+task 'posts:rebake' => :environment do
+  rebake_posts
+end
+
+desc 'Update each post with latest markdown and refresh oneboxes'
+task 'posts:refresh_oneboxes' => :environment do
+  rebake_posts invalidate_oneboxes: true
+end
+
+def rebake_posts(opts = {})
   RailsMultisite::ConnectionManagement.each_connection do |db|
     puts "Re baking post markdown for #{db} , changes are denoted with # , no change with ."
-    i = 0
-    Post.select([:id, :user_id, :cooked, :raw, :topic_id, :post_number]).each do |p|
-      i += 1
-      cooked = p.cook(p.raw, topic_id: p.topic_id)
-      if cooked != p.cooked
-        Post.exec_sql('update posts set cooked = ? where id = ?', cooked, p.id)
-        p.cooked = cooked
+
+    total = Post.select([
+      :id, :user_id, :cooked, :raw, :topic_id, :post_number
+    ]).inject(0) do |total, post|
+      cooked = post.cook(
+        post.raw,
+        topic_id: post.topic_id,
+        invalidate_oneboxes: opts.fetch(:invalidate_oneboxes, false)
+      )
+
+      if cooked != post.cooked
+        Post.exec_sql(
+          'update posts set cooked = ? where id = ?', cooked, post.id
+        )
+        post.cooked = cooked
         putc "#"
       else
         putc "."
       end
-      TopicLink.extract_from(p)
-    end
-    puts
-    puts
-    puts "#{i} posts done!"
-    puts "-----------------------------------------------"
-    puts
 
+      TopicLink.extract_from post
+
+      total += 1
+    end
+
+    puts "\n\n#{total} posts done!\n#{'-' * 50}\n"
   end
 end