Sha256: 66b2827aa159fee246e0cd08c9223190ca619050d0cc4059df19baa7180e6729

Contents?: true

Size: 1.3 KB

Versions: 5

Compression:

Stored size: 1.3 KB

Contents

# frozen_string_literal: true

class RailsTransactionalOutbox
  class OutboxEntriesProcessors
    class BaseProcessor
      attr_reader :config
      private     :config

      def initialize(config: RailsTransactionalOutbox.configuration)
        @config = config
      end

      def call(&block)
        return [] unless outbox_model.any_records_to_process?

        execute(&block)
      end

      private

      delegate :outbox_model, :outbox_batch_size, to: :config

      def execute(&_block)
        raise "implement me"
      end

      def process_records(records_to_process, &block)
        failed_records = []
        records_to_process.each do |record|
          begin
            process(record)
          rescue => e
            record.handle_error(e)
            record.save!
            failed_records << record
          end
          yield record if block
        end
        processed_records = records_to_process - failed_records
        mark_as_processed(processed_records)
      end

      def process(record)
        record_processor.call(record)
      end

      def record_processor
        @record_processor ||= RailsTransactionalOutbox::RecordProcessor.new
      end

      def mark_as_processed(processed_records)
        outbox_model.mark_as_processed(processed_records)
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
rails-transactional-outbox-0.4.0 lib/rails_transactional_outbox/outbox_entries_processors/base_processor.rb
rails-transactional-outbox-0.3.1 lib/rails_transactional_outbox/outbox_entries_processors/base_processor.rb
rails-transactional-outbox-0.3.0 lib/rails_transactional_outbox/outbox_entries_processors/base_processor.rb
rails-transactional-outbox-0.2.1 lib/rails_transactional_outbox/outbox_entries_processors/base_processor.rb
rails-transactional-outbox-0.2.0 lib/rails_transactional_outbox/outbox_entries_processors/base_processor.rb