Sha256: 8b0e6a43f3965c472949410e16f9e3626b4e4b83f34858e8c2ad4148b3a4710a

Contents?: true

Size: 834 Bytes

Versions: 4

Compression:

Stored size: 834 Bytes

Contents

# frozen_string_literal: true

module ROM
  # TODO: finish this in 1.1.0
  #
  # @api private
  class Session
    include Dry::Equalizer(:queue, :status)

    attr_reader :repo

    attr_reader :queue

    attr_reader :status

    def initialize(repo)
      @repo = repo
      @status = :pending
      initialize_queue!
    end

    def add(changeset)
      queue << changeset
      self
    end

    def commit!
      queue.each(&:commit)

      @status = :success

      self
    rescue StandardError => e
      @status = :failure
      raise e
    ensure
      initialize_queue!
    end

    def pending?
      status.equal?(:pending)
    end

    def success?
      status.equal?(:success)
    end

    def failure?
      status.equal?(:failure)
    end

    private

    def initialize_queue!
      @queue = []
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
rom-repository-5.4.2 lib/rom/repository/session.rb
rom-repository-5.4.1 lib/rom/repository/session.rb
rom-repository-5.4.0 lib/rom/repository/session.rb
rom-repository-5.3.0 lib/rom/repository/session.rb