From fa369bcc3e3d5d695202544de142423a0652c30f Mon Sep 17 00:00:00 2001 From: Robin Ward Date: Tue, 12 Apr 2016 15:29:13 -0400 Subject: [PATCH] Add onceoff job to backfill oneboxes --- app/jobs/onceoff/grant_onebox.rb | 35 ++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 app/jobs/onceoff/grant_onebox.rb diff --git a/app/jobs/onceoff/grant_onebox.rb b/app/jobs/onceoff/grant_onebox.rb new file mode 100644 index 00000000000..8479528054c --- /dev/null +++ b/app/jobs/onceoff/grant_onebox.rb @@ -0,0 +1,35 @@ +module Jobs + + class GrantOnebox < Jobs::Onceoff + sidekiq_options queue: 'low' + + def execute_onceoff(args) + to_award = {} + + Post.secured(Guardian.new) + .select(:id, :created_at, :raw, :user_id) + .visible + .public_posts + .where("raw like '%http%'") + .find_in_batches do |group| + + group.each do |p| + # Note we can't use `p.cooked` here because oneboxes have been cooked out + cooked = PrettyText.cook(p.raw) + doc = Nokogiri::HTML::fragment(cooked) + if doc.search('a.onebox').size > 0 + to_award[p.user_id] ||= { post_id: p.id, created_at: p.created_at } + end + end + + end + + badge = Badge.find(Badge::FirstOnebox) + to_award.each do |user_id, opts| + BadgeGranter.grant(badge, User.find(user_id), opts) + end + end + + end + +end