Module: Mongoid::Delorean::Trackable
- Defined in:
- lib/mongoid/delorean/trackable.rb
Defined Under Namespace
Modules: CommonEmbeddedMethods, CommonInstanceMethods
Class Method Summary
collapse
Instance Method Summary
collapse
Class Method Details
.included(klass) ⇒ Object
5
6
7
8
9
10
11
|
# File 'lib/mongoid/delorean/trackable.rb', line 5
def self.included(klass)
super
klass.field :version, type: Integer, default: 0
klass.before_save :save_version
klass.after_save :after_save_version
klass.send(:include, Mongoid::Delorean::Trackable::CommonInstanceMethods)
end
|
Instance Method Details
#after_save_version ⇒ Object
46
47
48
|
# File 'lib/mongoid/delorean/trackable.rb', line 46
def after_save_version
@__track_changes = Mongoid::Delorean.config.track_history
end
|
#revert!(version = (self.version - 1)) ⇒ Object
61
62
63
64
65
66
67
68
69
|
# File 'lib/mongoid/delorean/trackable.rb', line 61
def revert!(version = (self.version - 1))
old_version = self.versions.where(version: version).first
if old_version
old_version.full_attributes.each do |key, value|
self.write_attribute(key, value)
end
self.save!
end
end
|
#save_version ⇒ Object
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# File 'lib/mongoid/delorean/trackable.rb', line 17
def save_version
if self.track_history?
last_version = self.versions.last
_version = last_version ? last_version.version + 1 : 1
_attributes = self.attributes_with_relations
_attributes.merge!("version" => _version)
_changes = self.changes_with_relations.dup
_changes.merge!("version" => [self.version_was, _version])
Mongoid::Delorean::History.create(original_class: self.class.name, original_class_id: self.id, version: _version, altered_attributes: _changes, full_attributes: _attributes)
self.without_history_tracking do
self.version = _version
unless(self.new_record?)
if ::Mongoid.const_defined? :Observer
self.set(:version, _version)
else
self.set(version: _version)
end
end
end
@__track_changes = false
end
true
end
|
#track_history? ⇒ Boolean
50
51
52
|
# File 'lib/mongoid/delorean/trackable.rb', line 50
def track_history?
@__track_changes.nil? ? Mongoid::Delorean.config.track_history : @__track_changes
end
|
#versions ⇒ Object
13
14
15
|
# File 'lib/mongoid/delorean/trackable.rb', line 13
def versions
Mongoid::Delorean::History.where(original_class: self.class.name, original_class_id: self.id)
end
|
#without_history_tracking ⇒ Object
54
55
56
57
58
59
|
# File 'lib/mongoid/delorean/trackable.rb', line 54
def without_history_tracking
previous_track_change = @__track_changes
@__track_changes = false
yield
@__track_changes = previous_track_change
end
|