This repository was archived by the owner on Oct 27, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathrevision_updater.rb
More file actions
59 lines (49 loc) · 1.76 KB
/
revision_updater.rb
File metadata and controls
59 lines (49 loc) · 1.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
module Versioning
class RevisionUpdater < BaseUpdater
require_relative "./revision_updater/image"
include RevisionUpdater::Image
include RevisionUpdater::FileAttachment
def column_names
sub_updaters.keys + %i[lead_image_revision]
end
def collection_names
%i[image_revisions file_attachment_revisions]
end
def assign(fields)
fields = fields.to_h.symbolize_keys
sub_updaters.map do |column_name, updater|
updater.assign(fields.slice(*updater.column_names))
dup_revision.assign_attributes(column_name => updater.next_revision)
end
sub_columns = sub_updaters.values.flat_map(&:column_names)
dup_revision.assign_attributes(fields.except(*sub_columns))
end
def changes
changed_columns
.merge(*sub_updaters.values.map(&:changes))
.merge(changed_collections)
end
private
def changed_collections
old_key_vals = collection_names.map { |c| [c, revision.public_send(c).to_a] }
new_key_vals = collection_names.map { |c| [c, dup_revision.public_send(c).to_a] }
Hash[new_key_vals - old_key_vals]
end
def dup_revision
@dup_revision ||= revision.dup.tap do |r|
r.created_by = user
r.number = revision.document.next_revision_number
r.image_revisions = revision.image_revisions
r.file_attachment_revisions = revision.file_attachment_revisions
r.preceded_by = revision
end
end
def sub_updaters
@sub_updaters ||= {
metadata_revision: SubRevisionUpdater.new(revision.metadata_revision, user),
content_revision: SubRevisionUpdater.new(revision.content_revision, user),
tags_revision: SubRevisionUpdater.new(revision.tags_revision, user),
}
end
end
end