# frozen_string_literal: true task "categories:move_topics", %i[from_category to_category] => [:environment] do |_, args| from_category_id = args[:from_category] to_category_id = args[:to_category] if !from_category_id || !to_category_id puts "ERROR: Expecting categories:move_topics[from_category_id,to_category_id]" exit 1 end from_category = Category.find(from_category_id) to_category = Category.find(to_category_id) if from_category.present? && to_category.present? puts "Moving topics from #{from_category.slug} to #{to_category.slug}..." Topic .where(category_id: from_category.id) .where.not(id: from_category.topic_id) .update_all(category_id: to_category.id) from_category.update_attribute(:topic_count, 0) puts "Updating category stats..." Category.update_stats CategoryTagStat.update_topic_counts end puts "", "Done!", "" end task "categories:create_definition" => :environment do puts "Creating category definitions" puts Category.where(topic_id: nil).each(&:create_category_definition) puts "", "Done!", "" end def print_status(current, max) print "\r%9d / %d (%5.1f%%)" % [current, max, ((current.to_f / max.to_f) * 100).round(1)] end desc "Output a list of categories" task "categories:list" => :environment do categories = Category.where(parent_category_id: nil).order(:slug).pluck(:id, :slug) puts "id category-slug" puts "-- -----------------" categories.each do |c| puts "#{c[0]} #{c[1]}" Category .where(parent_category_id: c[0]) .order(:slug) .pluck(:id, :slug) .each { |s| puts " #{s[0]} #{s[1]}" } end end