class RubyEventStore::ROM::Memory::UnitOfWork

Public Class Methods

mutex() click to toggle source
# File lib/ruby_event_store/rom/adapters/memory/unit_of_work.rb, line 7
def self.mutex
  @mutex ||= Mutex.new
end

Public Instance Methods

commit!(_gateway, changesets, **_options) click to toggle source
# File lib/ruby_event_store/rom/adapters/memory/unit_of_work.rb, line 11
def commit!(_gateway, changesets, **_options)
  self.class.mutex.synchronize do
    committed = []

    begin
      until changesets.empty?
        changeset = changesets.shift
        relation = env.rom_container.relations[changeset.relation.name]

        committed << [changeset, relation]

        changeset.commit
      end
    rescue StandardError
      committed.reverse_each do |c, r|
        r.restrict(id: c.to_a.map { |e| e[:id] }).command(:delete, result: :many).call
      end

      raise
    end
  end
end