Module: Vidibus::Versioning::Mongoid
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/vidibus/versioning/mongoid.rb
Defined Under Namespace
Modules: ClassMethods
Instance Method Summary collapse
- #delete ⇒ Object
- #destroy ⇒ Object
-
#migrate!(number = nil) ⇒ Object
Applies attributes of wanted version on self.
-
#new_version? ⇒ Boolean
Returns true if version requested is a new one.
-
#redo! ⇒ Object
Calls #version!(:next) and migrate!.
-
#reload_version(*args) ⇒ Object
Reloads this record and applies version attributes.
-
#save(*args) ⇒ Object
Saves the record and handles version persistence.
-
#save!(*args) ⇒ Object
Raises a validation error if saving fails.
-
#undo! ⇒ Object
Calls #version!(:previous) and migrate!.
-
#version(*args) ⇒ Object
Returns a copy of this object with versioned attributes applied.
-
#version!(*args) ⇒ Object
Applies versioned attributes on this object.
-
#version?(number) ⇒ Boolean
Returns true if version number exists.
-
#version_object ⇒ Object
Returns the currently set version object.
Instance Method Details
#delete ⇒ Object
125 126 127 |
# File 'lib/vidibus/versioning/mongoid.rb', line 125 def delete super if remove_version(:delete) == nil end |
#destroy ⇒ Object
129 130 131 |
# File 'lib/vidibus/versioning/mongoid.rb', line 129 def destroy super if remove_version(:destroy) == nil end |
#migrate!(number = nil) ⇒ Object
Applies attributes of wanted version on self. Stores current attributes in a new version.
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/vidibus/versioning/mongoid.rb', line 81 def migrate!(number = nil) unless number || version_cache.wanted_version_number raise(MigrationError, 'no version given') end if number && number != version_cache.wanted_version_number version!(number) end if version_cache.self_version raise(MigrationError, 'cannot migrate to current version') end set_original_version_obj self.attributes = version_attributes self.version_number = version_cache.wanted_version_number save! end |
#new_version? ⇒ Boolean
Returns true if version requested is a new one.
146 147 148 |
# File 'lib/vidibus/versioning/mongoid.rb', line 146 def new_version? version_obj and version_obj.new_record? end |
#redo! ⇒ Object
Calls #version!(:next) and migrate!
106 107 108 109 |
# File 'lib/vidibus/versioning/mongoid.rb', line 106 def redo! version!(:next) migrate! end |
#reload_version(*args) ⇒ Object
Reloads this record and applies version attributes.
134 135 136 137 138 |
# File 'lib/vidibus/versioning/mongoid.rb', line 134 def reload_version(*args) reloaded_self = self.reload reloaded_self.version(*version_cache.version_args) if version_cache.version_args reloaded_self end |
#save(*args) ⇒ Object
Saves the record and handles version persistence.
112 113 114 115 116 |
# File 'lib/vidibus/versioning/mongoid.rb', line 112 def save(*args) return false if invalid? saved = persist_version (saved == nil) ? super(*args) : saved end |
#save!(*args) ⇒ Object
Raises a validation error if saving fails.
119 120 121 122 123 |
# File 'lib/vidibus/versioning/mongoid.rb', line 119 def save!(*args) unless save(*args) raise(::Mongoid::Errors::Validations, self) end end |
#undo! ⇒ Object
Calls #version!(:previous) and migrate!
100 101 102 103 |
# File 'lib/vidibus/versioning/mongoid.rb', line 100 def undo! version!(:previous) migrate! end |
#version(*args) ⇒ Object
Returns a copy of this object with versioned attributes applied.
Valid arguments are:
:new returns a new version of self
:next returns the next version of self, may be new as well
:previous returns the previous version of self
48 returns version 48 of self
54 55 56 57 58 |
# File 'lib/vidibus/versioning/mongoid.rb', line 54 def version(*args) self.class.find(_id).tap do |copy| copy.apply_version!(*args) end end |
#version!(*args) ⇒ Object
Applies versioned attributes on this object. Returns nil. For valid arguments, see #version.
63 64 65 |
# File 'lib/vidibus/versioning/mongoid.rb', line 63 def version!(*args) self.apply_version!(*args) end |
#version?(number) ⇒ Boolean
Returns true if version number exists. Argument must be an integer.
70 71 72 73 74 75 76 77 |
# File 'lib/vidibus/versioning/mongoid.rb', line 70 def version?(number) raise ArgumentError unless number.is_a?(Integer) if version_number == number true else !!versions.where(:number => number).first end end |
#version_object ⇒ Object
Returns the currently set version object.
141 142 143 |
# File 'lib/vidibus/versioning/mongoid.rb', line 141 def version_object version_cache.version_obj end |