45 lines
1.5 KiB
Ruby
45 lines
1.5 KiB
Ruby
namespace :indexed_posts do
|
|
desc "Ensure all Domain::*::Post records have an IndexedPost record"
|
|
task ensure_all_posts: %i[ensure_fa_posts ensure_e621_posts ensure_ib_posts]
|
|
|
|
desc "Ensure all Domain::Fa::Post records have an IndexedPost record"
|
|
task ensure_fa_posts: %i[environment set_logger_stdout] do
|
|
IndexedPostsRake.ensure_indexed_post_on(
|
|
IndexedPostsRake.model_without_indexed_post(Domain::Fa::Post),
|
|
)
|
|
end
|
|
|
|
desc "Ensure all Domain::E621::Post records have an IndexedPost record"
|
|
task ensure_e621_posts: %i[environment set_logger_stdout] do
|
|
IndexedPostsRake.ensure_indexed_post_on(
|
|
IndexedPostsRake.model_without_indexed_post(Domain::E621::Post),
|
|
)
|
|
end
|
|
|
|
desc "Ensure all Domain::Inkbunny::Post records have an IndexedPost record"
|
|
task ensure_ib_posts: %i[environment set_logger_stdout] do
|
|
IndexedPostsRake.ensure_indexed_post_on(
|
|
IndexedPostsRake.model_without_indexed_post(Domain::Inkbunny::Post),
|
|
)
|
|
end
|
|
end
|
|
|
|
module IndexedPostsRake
|
|
def self.model_without_indexed_post(model)
|
|
model.left_outer_joins(:indexed_post).where(indexed_posts: { id: nil })
|
|
end
|
|
|
|
def self.ensure_indexed_post_on(relation)
|
|
total = relation.count
|
|
Rails.logger.info(
|
|
"Ensuring indexed post on #{relation.name.bold} (#{total} total to process)",
|
|
)
|
|
progress = ProgressBar.create(total: total, throttle_rate: 0.2)
|
|
relation.find_each do |post|
|
|
post.ensure_indexed_post!
|
|
post.save!
|
|
progress.increment
|
|
end
|
|
end
|
|
end
|