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