require "data_cleanup"
namespace :data_cleanup do
desc "Check each record on the DB is valid and report"
task :find_invalid_records => :environment do
DataCleanup.logger.info("\n== Finding invalid records =======================\n")
models.each do |model|
DataCleanup::ModelCheck.new(model).call
end
DataCleanup::Reporting.prepare!
DataCleanup::Reporting.report
end
desc "Clean invalid records on the database"
task :clean_invalid_records => :environment do
DataCleanup.logger.info("\n== Cleaning invalid records =======================\n")
Dir[rule_paths].each do |rule_path|
load rule_path
klass_name = rule_path.split("rules/").last.gsub(".rb", '').classify
model_name = klass_name.split("::").first
opt, models = ARGV[1].to_s.split("=")
if opt.present? && opt =='INCLUDE'
next unless model_name.in?(models.split(","))
elsif opt.present? && opt =='EXCLUDE'
next if model_name.in?(models.split(","))
elsif opt.blank?
# :noop:
else
raise ArgumentError, "Unknown option: #{opt}"
end
rule_class = DataCleanup::Rules.const_get(klass_name)
rule = rule_class.new
puts rule.description
rule.call
end
end
private
def rule_paths
@rule_paths ||= Rails.root.join("lib", "data_cleanup", "rules", "*", "*.rb")
end
def models
Dir[Rails.root.join("app", "models", "*.rb")].map do |model_path|
model_path.split("/").last.gsub(".rb", "").classify.constantize
end.sort_by(&:name)
end
end