diff --git a/lib/tasks/data_cleanup.rake b/lib/tasks/data_cleanup.rake new file mode 100644 index 0000000..f84dfc0 --- /dev/null +++ b/lib/tasks/data_cleanup.rake @@ -0,0 +1,50 @@ +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 diff --git a/lib/tasks/heal_invalid_records.rake b/lib/tasks/heal_invalid_records.rake deleted file mode 100644 index f84dfc0..0000000 --- a/lib/tasks/heal_invalid_records.rake +++ /dev/null @@ -1,50 +0,0 @@ -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