# -*- ruby encoding: utf-8 -*-

require 'transaction/simple/threadsafe'

# A transaction group is an object wrapper that manages a group of objects
# as if they were a single object for the purpose of transaction management.
# All transactions for this group of objects should be performed against the
# transaction group object, not against individual objects in the group.
# This is the threadsafe version of a transaction group.
class Transaction::Simple::ThreadSafe::Group < Transaction::Simple::Group
  def initialize(*objects)
    @objects = objects || []
    @objects.freeze
    @objects.each { |obj| obj.extend(Transaction::Simple::ThreadSafe) }

    if block_given?
      begin
        yield self
      ensure
        self.clear
      end
    end
  end
end

# vim: syntax=ruby
