Sha256: 9b3da2f7dfa8b64b6004783ff5345a0174c2e4d5774e51eeddfaeb2696c165e4

Contents?: true

Size: 845 Bytes

Versions: 4

Compression:

Stored size: 845 Bytes

Contents

# frozen_string_literal: true

require 'dry/equalizer'

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 => 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.1.2 lib/rom/repository/session.rb
rom-repository-5.1.1 lib/rom/repository/session.rb
rom-repository-5.1.0 lib/rom/repository/session.rb
rom-repository-5.0.0 lib/rom/repository/session.rb