class Eternity::ObjectTracker

Attributes

changes[R]

Public Class Methods

new(options) click to toggle source
# File lib/eternity/object_tracker.rb, line 7
def initialize(options)
  @changes = Restruct::MarshalArray.new options
end

Public Instance Methods

delete() click to toggle source
# File lib/eternity/object_tracker.rb, line 19
def delete
  track DELETE
end
flatten() click to toggle source
# File lib/eternity/object_tracker.rb, line 29
def flatten
  TrackFlatter.flatten changes
end
insert(data) click to toggle source
# File lib/eternity/object_tracker.rb, line 11
def insert(data)
  track INSERT, data
end
revert() click to toggle source
# File lib/eternity/object_tracker.rb, line 23
def revert
  locker.lock! :revert do
    changes.destroy
  end
end
update(data) click to toggle source
# File lib/eternity/object_tracker.rb, line 15
def update(data)
  track UPDATE, data
end

Private Instance Methods

locker() click to toggle source
# File lib/eternity/object_tracker.rb, line 48
def locker
  Eternity.locker_for repository_name
end
repository_name() click to toggle source
# File lib/eternity/object_tracker.rb, line 52
def repository_name
  changes.id.sections.reverse[3]
end
track(action, data=nil) click to toggle source
# File lib/eternity/object_tracker.rb, line 37
def track(action, data=nil)
  locker.lock :track do
    change = {'action' => action}
    change['blob'] = Blob.write(:data, data) if data

    Eternity.logger.debug(self.class) { "#{changes.id} - #{change} - #{data}" }
    
    changes << change
  end
end