Module | VestalVersions::Control::InstanceMethods |
In: |
lib/vestal_versions/control.rb
|
Control blocks are called on ActiveRecord::Base instances as to not cause any conflict with other instances of the versioned class whose behavior could be inadvertently altered within a control block.
Appending versions with the append_version block acts similarly to the merge_version block in that all would-be version creations within the block are defered until the block closes. The major difference is that with append_version, a new version is not created. Rather, the cumulative changes are appended to the serialized changes of the instance‘s last version. A new version is not created, so the version number is not incremented.
user = User.find_by_first_name("Steve") user.version # => 2 user.versions.last.changes # => {"first_name" => ["Stephen", "Steve"]} user.append_version do user.last_name = "Jobs" end user.versions.last.changes # => {"first_name" => ["Stephen", "Steve"], "last_name" => ["Richert", "Jobs"]} user.version # => 2
See VestalVersions::Changes for an explanation on how changes are appended.
Behaving almost identically to the append_version block, the only difference with the +append_version!+ block is that the save automatically performed at the close of the block is a +save!+, meaning that an exception will be raised if the object cannot be saved.
A convenience method for determining whether a versioned instance is set to append its next version‘s changes into the last version changes.
Merging versions with the merge_version block will take all of the versions that would be created within the block and merge them into one version and pushing that single version onto the ActiveRecord::Base instance‘s version history. A new version will be created and the instance‘s version number will be incremented.
user = User.find_by_first_name("Steve") user.version # => 1 user.merge_version do user.update_attributes(:first_name => "Steven", :last_name => "Tyler") user.update_attribute(:first_name, "Stephen") user.update_attribute(:last_name, "Richert") end user.version # => 2 user.versions.last.changes # => {"first_name" => ["Steve", "Stephen"], "last_name" => ["Jobs", "Richert"]}
See VestalVersions::Changes for an explanation on how changes are appended.
Behaving almost identically to the merge_version block, the only difference with the +merge_version!+ block is that the save automatically performed at the close of the block is a +save!+, meaning that an exception will be raised if the object cannot be saved.
A convenience method for determining whether a versioned instance is set to merge its next versions into one before version creation.
The skip_version block simply allows for updates to be made to an instance of a versioned ActiveRecord model while ignoring all new version creation. The :if and :unless conditions (if given) will not be evaulated inside a skip_version block.
When the block closes, the instance is automatically saved, so explicitly saving the object within the block is unnecessary.
user = User.find_by_first_name("Steve") user.version # => 1 user.skip_version do user.first_name = "Stephen" end user.version # => 1
Behaving almost identically to the skip_version block, the only difference with the +skip_version!+ block is that the save automatically performed at the close of the block is a +save!+, meaning that an exception will be raised if the object cannot be saved.