Class: ActsAsScrubbable::TaskRunner

Inherits:
Object
  • Object
show all
Defined in:
lib/acts_as_scrubbable/task_runner.rb

Instance Method Summary collapse

Constructor Details

#initializeTaskRunner

Returns a new instance of TaskRunner.



11
12
13
# File 'lib/acts_as_scrubbable/task_runner.rb', line 11

def initialize
  @ar_classes = []
end

Instance Method Details

#after_hooksObject



70
71
72
73
74
75
# File 'lib/acts_as_scrubbable/task_runner.rb', line 70

def after_hooks
  return if ENV["SKIP_AFTERHOOK"]

  ActsAsScrubbable.logger.info Term::ANSIColor.red("Running after hook")
  ActsAsScrubbable.execute_after_hook
end

#before_hooksObject



63
64
65
66
67
68
# File 'lib/acts_as_scrubbable/task_runner.rb', line 63

def before_hooks
  return if ENV["SKIP_BEFOREHOOK"]

  ActsAsScrubbable.logger.info Term::ANSIColor.red("Running before hook")
  ActsAsScrubbable.execute_before_hook
end

#confirmed_configuration?Boolean

Returns:

  • (Boolean)


24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/acts_as_scrubbable/task_runner.rb', line 24

def confirmed_configuration?
  db_host = ActiveRecord::Base.connection_db_config.host

  unless ENV["SKIP_CONFIRM"] == "true"
    answer = ask(Term::ANSIColor.red("Type '#{db_host}' to continue. \n") + Term::ANSIColor.white("-> "))
    unless answer == db_host
      ActsAsScrubbable.logger.error Term::ANSIColor.red("exiting ...")
      return false
    end
  end
  true
end

#extract_ar_classesObject



37
38
39
40
41
42
43
44
45
46
# File 'lib/acts_as_scrubbable/task_runner.rb', line 37

def extract_ar_classes
  Rails.application.eager_load! # make sure all the classes are loaded
  @ar_classes = ActiveRecord::Base.descendants.select { |d| d.scrubbable? }.sort_by { |d| d.to_s }

  if ENV["SCRUB_CLASSES"].present?
    class_list = ENV["SCRUB_CLASSES"].split(",")
    class_list = class_list.map { |_class_str| _class_str.constantize }
    @ar_classes = ar_classes & class_list
  end
end

#prompt_db_configurationObject



15
16
17
18
19
20
21
22
# File 'lib/acts_as_scrubbable/task_runner.rb', line 15

def prompt_db_configuration
  db_host = ActiveRecord::Base.connection_db_config.host
  db_name = ActiveRecord::Base.connection_db_config.database

  ActsAsScrubbable.logger.warn Term::ANSIColor.red("Please verify the information below to continue")
  ActsAsScrubbable.logger.warn Term::ANSIColor.red("Host: ") + Term::ANSIColor.white(" #{db_host}")
  ActsAsScrubbable.logger.warn Term::ANSIColor.red("Database: ") + Term::ANSIColor.white("#{db_name}")
end

#scrub(num_of_batches: nil, skip_before_hooks: false, skip_after_hooks: false) ⇒ Object



52
53
54
55
56
57
58
59
60
61
# File 'lib/acts_as_scrubbable/task_runner.rb', line 52

def scrub(num_of_batches: nil, skip_before_hooks: false, skip_after_hooks: false)
  before_hooks unless skip_before_hooks

  Parallel.each(ar_classes) do |ar_class|
    ActsAsScrubbable::ArClassProcessor.new(ar_class).process(num_of_batches)
  end
  ActiveRecord::Base.connection.verify! if ActiveRecord::Base.connection.respond_to?(:reconnect)

  after_hooks unless skip_after_hooks
end

#set_ar_class(ar_class) ⇒ Object



48
49
50
# File 'lib/acts_as_scrubbable/task_runner.rb', line 48

def set_ar_class(ar_class)
  ar_classes << ar_class
end