Sha256: 5d971ba45b2b3a446b7c9144ffdd1ff5166d61e5ab2f7fe67aa9f0195d3dcabe

Contents?: true

Size: 755 Bytes

Versions: 1

Compression:

Stored size: 755 Bytes

Contents

# frozen_string_literal: true

module Grumlin
  class Transaction
    attr_reader :session_id

    include Console

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

    def initialize(traversal_start_class, pool:)
      @traversal_start_class = traversal_start_class
      @pool = pool

      @session_id = SecureRandom.uuid
    end

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

    def commit
      finalize(COMMIT)
    end

    def rollback
      finalize(ROLLBACK)
    end

    private

    def finalize(action)
      @pool.acquire do |client|
        client.write(action, session_id: @session_id)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
grumlin-0.22.5 lib/grumlin/transaction.rb