Sha256: 0abb9709f3f3b7e0e645faeca9726abc2fe9aca03f8c41f424b1fd304c1f5c00

Contents?: true

Size: 1.29 KB

Versions: 3

Compression:

Stored size: 1.29 KB

Contents

# frozen_string_literal: true

module ActiveGraph
  module Transactions
    extend ActiveSupport::Concern

    included do
      thread_mattr_accessor :ag_session, :tx
    end

    class_methods do
      def session(*args)
        driver.session(*args) do |session|
          self.ag_session = session
          yield session
          session.last_bookmark
        ensure
          self.ag_session = nil
        end
      end

      def write_transaction(config = nil, &block)
        send_transaction(:write_transaction, config, &block)
      end
      alias transaction write_transaction

      def read_transaction(config = nil, &block)
        send_transaction(:read_transaction, config, &block)
      end

      def begin_transaction(config = nil, &block)
        send_transaction(:begin_transaction, config, &block)
      end

      private

      def send_transaction(method, config = nil, &block)
        return yield tx if tx
        return reuse(ag_session, method, config, &block) if ag_session
        driver.session { |session| reuse(session, method, config, &block) }
      end

      def reuse(session, method, config)
        session.send(method, config) do |tx|
          self.tx = tx
          yield tx
          tx.success
        ensure
          self.tx = nil
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
activegraph-10.0.0.pre.beta.3 lib/active_graph/transactions.rb
activegraph-10.0.0.pre.beta.2 lib/active_graph/transactions.rb
activegraph-10.0.0.pre.beta.1 lib/active_graph/transactions.rb