diff --git a/app/jobs/regular/process_post.rb b/app/jobs/regular/process_post.rb index cac70c050f0..0f44be43027 100644 --- a/app/jobs/regular/process_post.rb +++ b/app/jobs/regular/process_post.rb @@ -14,7 +14,9 @@ module Jobs recooked = nil if args[:cook].present? - recooked = post.cook(post.raw, topic_id: post.topic_id) + cooking_options = args[:cooking_options] || {} + cooking_options[:topic_id] = post.topic_id + recooked = post.cook(post.raw, cooking_options.symbolize_keys) post.update_column(:cooked, recooked) end diff --git a/app/models/post.rb b/app/models/post.rb index 16a2ce178aa..7799da3afce 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -507,6 +507,7 @@ class Post < ActiveRecord::Base } args[:image_sizes] = image_sizes if image_sizes.present? args[:invalidate_oneboxes] = true if invalidate_oneboxes.present? + args[:cooking_options] = self.cooking_options Jobs.enqueue(:process_post, args) DiscourseEvent.trigger(:after_trigger_post_process, self) end diff --git a/lib/cooked_post_processor.rb b/lib/cooked_post_processor.rb index 9c606a23dd4..01b20c6f638 100644 --- a/lib/cooked_post_processor.rb +++ b/lib/cooked_post_processor.rb @@ -11,7 +11,11 @@ class CookedPostProcessor @opts = opts @post = post @previous_cooked = (@post.cooked || "").dup - @doc = Nokogiri::HTML::fragment(post.cooked) + # NOTE: we re-cook the post here in order to prevent timing issues with edits + # cf. https://meta.discourse.org/t/edit-of-rebaked-post-doesnt-show-in-html-only-in-raw/33815/6 + cooking_options = post.cooking_options || opts[:cooking_options] || {} + cooking_options[:topic_id] = post.topic_id + @doc = Nokogiri::HTML::fragment(post.cook(post.raw, cooking_options.symbolize_keys)) @size_cache = {} end diff --git a/lib/post_creator.rb b/lib/post_creator.rb index 21b07963f57..22ace0dad38 100644 --- a/lib/post_creator.rb +++ b/lib/post_creator.rb @@ -176,7 +176,7 @@ class PostCreator cooking_options = post.cooking_options || {} cooking_options[:topic_id] = post.topic_id - post.cooked ||= post.cook(post.raw, cooking_options) + post.cooked ||= post.cook(post.raw, cooking_options.symbolize_keys) post.sort_order = post.post_number post.last_version_at ||= Time.now end diff --git a/spec/components/cooked_post_processor_spec.rb b/spec/components/cooked_post_processor_spec.rb index 683fdf855a7..e775d535424 100644 --- a/spec/components/cooked_post_processor_spec.rb +++ b/spec/components/cooked_post_processor_spec.rb @@ -118,9 +118,9 @@ describe CookedPostProcessor do it "generates overlay information" do cpp.post_process_images - expect(cpp.html).to match_html '
' expect(cpp).to be_dirty end @@ -145,9 +145,9 @@ describe CookedPostProcessor do it "generates overlay information" do cpp.post_process_images - expect(cpp.html).to match_html '' expect(cpp).to be_dirty end @@ -341,9 +341,7 @@ describe CookedPostProcessor do it "uses schemaless url for uploads" do cpp.optimize_urls - expect(cpp.html).to match_html 'Link -http://www.youtube.com/watch?v=9bZkp7q19f0
' end @@ -53,44 +54,44 @@ Fabricator(:post_with_plenty_of_images, from: :post) do end Fabricator(:post_with_uploaded_image, from: :post) do - cooked 'The thing about candy is it stays delicious for a long time -- we can just keep it there without worrying about it too much, imo.
-Thanks for listening.
\ No newline at end of file +Thanks for listening.