Sha256: a88de4951fd8ea252846b4b159f8b0f83f37dd3c213dcbd5532d51ab289f2fcd

Contents?: true

Size: 1.51 KB

Versions: 5

Compression:

Stored size: 1.51 KB

Contents

# frozen_string_literal: true

require 'active_support'
require_relative "trx_ext/callback_pool"
require_relative "trx_ext/object_ext"
require_relative "trx_ext/retry"
require_relative "trx_ext/transaction"
require_relative "trx_ext/config"
require_relative "trx_ext/version"

module TrxExt
  class << self
    attr_accessor :logger

    # @return [void]
    def integrate!
      ActiveSupport.on_load(:active_record) do
        require 'active_record/connection_adapters/postgresql_adapter'

        # Allow to use #wrap_in_trx and #trx methods everywhere
        Object.prepend(TrxExt::ObjectExt)

        # Patch #transaction
        ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.prepend(TrxExt::Transaction)

        # Single SELECT/UPDATE/DELETE queries should also be retried even if they are not a part of explicit transaction
        TrxExt::Retry.with_retry_until_serialized(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter, :exec_query)
        TrxExt::Retry.with_retry_until_serialized(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter, :exec_update)
        TrxExt::Retry.with_retry_until_serialized(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter, :exec_delete)
      end
    end

    # @return [void]
    def log(msg)
      return unless logger

      logger.info(msg)
    end

    # @return [TrxExt::Config]
    def config
      @config ||= TrxExt::Config.new
    end

    def configure
      yield config
    end
  end
end

if defined?(Rails::Railtie)
  require_relative "trx_ext/railtie"
else
  TrxExt.integrate!
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
trx_ext-1.0.4 lib/trx_ext.rb
trx_ext-1.0.3 lib/trx_ext.rb
trx_ext-1.0.2 lib/trx_ext.rb
trx_ext-1.0.1 lib/trx_ext.rb
trx_ext-1.0.0 lib/trx_ext.rb