class SimpleProcessor::BatchProcessor

Class for processing records in batches

Public Class Methods

new(opts = {}) click to toggle source

@param [Hash] opts The options to create a processor @option opts [ActiveRecord::Migration] :ar_migration The active record

migration instantiating the processor. Allows additional console info
# File lib/simple_processor/batch_processor.rb, line 23
def initialize(opts = {})
  @ar_migration = opts[:ar_migration]
end
processor_handlers(*handlers_args) click to toggle source
# File lib/simple_processor/batch_processor.rb, line 6
def self.processor_handlers(*handlers_args)
  define_method :handlers do
    @handlers ||= handlers_args.map do |handler|
      handlers_module.const_get(handler.to_s.camelize).new
    end
  end
end
processor_model(klass) click to toggle source
# File lib/simple_processor/batch_processor.rb, line 14
def self.processor_model(klass)
  define_method :model_klass do
    klass
  end
end

Private Class Methods

index_processors_module() click to toggle source
# File lib/simple_processor/batch_processor.rb, line 46
def self.index_processors_module
  to_a.find_index('Processors')
end
to_a() click to toggle source
# File lib/simple_processor/batch_processor.rb, line 50
def self.to_a
  to_s.split('::')
end

Public Instance Methods

run() click to toggle source

Executes the batch processing over all stories

# File lib/simple_processor/batch_processor.rb, line 28
def run
  init_counters
  @bar = ::ProgressBar.create(total: model_klass.count,
                              format: '%t: |%w| [%E]')
  model_klass.find_in_batches { |model| process_batch(model) }
  show_resume
end

Private Instance Methods

handlers_module() click to toggle source
# File lib/simple_processor/batch_processor.rb, line 38
def handlers_module
  klass = self.class
  path_list = klass.to_a.each_with_index.map do |x, i|
    x if i < klass.index_processors_module
  end
  path_list.compact.join('::').concat('::Handlers').constantize
end
init_counters() click to toggle source
# File lib/simple_processor/batch_processor.rb, line 83
def init_counters
  @success = 0
  @errors = 0
end
process(model) click to toggle source

Process a model @param model [Story] story The model instance

# File lib/simple_processor/batch_processor.rb, line 65
def process(model)
  handlers.each { |handler| handler.apply(model) }
  @success += 1
rescue => error
  say "ERROR: Story ##{model.id} #{error.message}"
  @errors += 1
end
process_batch(models) click to toggle source

Process a batch of models @param stories [Array<Story>] array of stories

# File lib/simple_processor/batch_processor.rb, line 56
def process_batch(models)
  models.each do |model|
    @bar.increment
    process(model)
  end
end
say(message) click to toggle source

Shows a message in console during migration execution @param message [String]

# File lib/simple_processor/batch_processor.rb, line 79
def say(message)
  @ar_migration.say message if @ar_migration
end
show_resume() click to toggle source
# File lib/simple_processor/batch_processor.rb, line 73
def show_resume
  say "#{@success} stories updated. #{@errors} errors"
end