/// <summary>
        ///   Save all uncommited events from a specific aggregate root.
        /// </summary>
        /// <param name = "source">
        ///   The aggregate root for which all uncommited events should be saved.
        /// </param>
        public IEnumerable <IEvent> Save(IEventSource source)
        {
            var uncommittedEvents = source.GetUncommittedEvents();

            SaveEvents(source.Id, source.UncommittedVersion, uncommittedEvents);

            source.AcceptChanges();

            return(uncommittedEvents);
        }