56 lines
1.5 KiB
Ruby
56 lines
1.5 KiB
Ruby
|
|
namespace :work do
|
||
|
|
desc "Purge drafts created more than a month ago"
|
||
|
|
task(:purge_old_drafts => :environment) do
|
||
|
|
count = 0
|
||
|
|
Work.unposted.where('works.created_at < ?', 1.month.ago).find_each do |work|
|
||
|
|
begin
|
||
|
|
work.destroy!
|
||
|
|
count += 1
|
||
|
|
rescue StandardError => e
|
||
|
|
puts "The following error occurred while trying to destroy draft #{work.id}:"
|
||
|
|
puts "#{e.class}: #{e.message}"
|
||
|
|
puts e.backtrace
|
||
|
|
end
|
||
|
|
end
|
||
|
|
puts "Unposted works (#{count}) created more than one month ago have been purged"
|
||
|
|
end
|
||
|
|
|
||
|
|
desc "create missing hit counters"
|
||
|
|
task(:missing_stat_counters => :environment) do
|
||
|
|
Work.find_each do |work|
|
||
|
|
counter = work.stat_counter
|
||
|
|
unless counter
|
||
|
|
counter = StatCounter.create(:work => work, :hit_count => 1)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
# Usage: rake work:reset_word_counts[en]
|
||
|
|
desc "Reset word counts for works in the specified language"
|
||
|
|
task(:reset_word_counts, [:lang] => :environment) do |_t, args|
|
||
|
|
language = Language.find_by(short: args.lang)
|
||
|
|
|
||
|
|
updated_works = "ALL"
|
||
|
|
if language.nil?
|
||
|
|
works = Work.all
|
||
|
|
else
|
||
|
|
works = Work.where(language: language)
|
||
|
|
updated_works = language.short
|
||
|
|
end
|
||
|
|
|
||
|
|
print "Resetting word count for #{works.count} '#{updated_works}' works: "
|
||
|
|
|
||
|
|
works.find_in_batches do |batch|
|
||
|
|
batch.each do |work|
|
||
|
|
work.chapters.each do |chapter|
|
||
|
|
chapter.content_will_change!
|
||
|
|
chapter.save
|
||
|
|
end
|
||
|
|
work.save
|
||
|
|
end
|
||
|
|
print(".") && STDOUT.flush
|
||
|
|
end
|
||
|
|
puts && STDOUT.flush
|
||
|
|
end
|
||
|
|
end
|