Module: VestalVersions::Control::InstanceMethods
- Defined in:
- lib/vestal_versions/control.rb
Overview
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.
Instance Method Summary collapse
-
#append_version ⇒ Object
Appending versions with the
append_version
block acts similarly to themerge_version
block in that all would-be version creations within the block are defered until the block closes. -
#append_version! ⇒ Object
Behaving almost identically to the
append_version
block, the only difference with theappend_version!
block is that the save automatically performed at the close of the block is asave!
, meaning that an exception will be raised if the object cannot be saved. -
#append_version? ⇒ Boolean
A convenience method for determining whether a versioned instance is set to append its next version’s changes into the last version changes.
-
#merge_version ⇒ Object
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. -
#merge_version! ⇒ Object
Behaving almost identically to the
merge_version
block, the only difference with themerge_version!
block is that the save automatically performed at the close of the block is asave!
, meaning that an exception will be raised if the object cannot be saved. -
#merge_version? ⇒ Boolean
A convenience method for determining whether a versioned instance is set to merge its next versions into one before version creation.
-
#skip_version ⇒ Object
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. -
#skip_version! ⇒ Object
Behaving almost identically to the
skip_version
block, the only difference with theskip_version!
block is that the save automatically performed at the close of the block is asave!
, meaning that an exception will be raised if the object cannot be saved. -
#skip_version? ⇒ Boolean
A convenience method for determining whether a versioned instance is set to skip its next version creation.
Instance Method Details
#append_version ⇒ Object
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.
Example
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.
118 119 120 121 122 123 124 125 126 |
# File 'lib/vestal_versions/control.rb', line 118 def append_version with_version_flag(:merge_version) do yield if block_given? end with_version_flag(:append_version) do save end end |
#append_version! ⇒ Object
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.
131 132 133 134 135 136 137 138 139 |
# File 'lib/vestal_versions/control.rb', line 131 def append_version! with_version_flag(:merge_version) do yield if block_given? end with_version_flag(:append_version) do save! end end |
#append_version? ⇒ Boolean
A convenience method for determining whether a versioned instance is set to append its next version’s changes into the last version changes.
143 144 145 |
# File 'lib/vestal_versions/control.rb', line 143 def append_version? !!@append_version end |
#merge_version ⇒ Object
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.
Example
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_attributes(:first_name => "Stephen")
user.update_attributes(: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.
75 76 77 78 79 80 |
# File 'lib/vestal_versions/control.rb', line 75 def merge_version with_version_flag(:merge_version) do yield if block_given? end save end |
#merge_version! ⇒ Object
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.
85 86 87 88 89 90 |
# File 'lib/vestal_versions/control.rb', line 85 def merge_version! with_version_flag(:merge_version) do yield if block_given? end save! end |
#merge_version? ⇒ Boolean
A convenience method for determining whether a versioned instance is set to merge its next versions into one before version creation.
94 95 96 |
# File 'lib/vestal_versions/control.rb', line 94 def merge_version? !!@merge_version end |
#skip_version ⇒ Object
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.
Example
user = User.find_by_first_name("Steve")
user.version # => 1
user.skip_version do
user.first_name = "Stephen"
end
user.version # => 1
33 34 35 36 37 38 |
# File 'lib/vestal_versions/control.rb', line 33 def skip_version with_version_flag(:skip_version) do yield if block_given? save end end |
#skip_version! ⇒ Object
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.
43 44 45 46 47 48 |
# File 'lib/vestal_versions/control.rb', line 43 def skip_version! with_version_flag(:skip_version) do yield if block_given? save! end end |
#skip_version? ⇒ Boolean
A convenience method for determining whether a versioned instance is set to skip its next version creation.
52 53 54 |
# File 'lib/vestal_versions/control.rb', line 52 def skip_version? !!@skip_version end |