Sha256: 4df088d6365b87e547f9fc75f004fd062353bf8c490293009c3cf1e9e20f1ee5

Contents?: true

Size: 836 Bytes

Versions: 4

Compression:

Stored size: 836 Bytes

Contents

# frozen_string_literal: true

class Grumlin::Transaction
  attr_reader :session_id, :pool

  include Console

  COMMIT = Grumlin::Repository.new.g.step(:tx, :commit)
  ROLLBACK = Grumlin::Repository.new.g.step(:tx, :rollback)

  def initialize(traversal_start_class, pool:, middlewares:)
    @traversal_start_class = traversal_start_class
    @pool = pool
    @session_id = SecureRandom.uuid
    @middlewares = middlewares
  end

  def begin
    @traversal_start_class.new(session_id: @session_id, pool: @pool)
  end

  def commit
    finalize(COMMIT)
  end

  def rollback
    finalize(ROLLBACK)
  end

  private

  def finalize(step)
    @middlewares.call(traversal: step,
                      need_results: false,
                      session_id: @session_id,
                      pool: @pool)
  ensure
    @pool.close
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
grumlin-1.2.0 lib/grumlin/transaction.rb
grumlin-1.1.0 lib/grumlin/transaction.rb
grumlin-1.0.4 lib/grumlin/transaction.rb
grumlin-1.0.3 lib/grumlin/transaction.rb