Module: Occams::Extensions::HasRevisions::InstanceMethods

Defined in:
lib/occams/extensions/has_revisions.rb

Instance Method Summary collapse

Instance Method Details

#create_revisionObject

Revision is created only if relevant data changed



42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/occams/extensions/has_revisions.rb', line 42

def create_revision
  return unless revision_data

  limit = Occams.config.revisions_limit.to_i

  # creating revision
  if limit != 0
    revisions.create!(data: revision_data)
  end

  # blowing away old revisions
  ids = [0] + revisions.order(created_at: :desc).limit(limit).pluck(:id)
  revisions.where('id NOT IN (?)', ids).destroy_all
end

#prepare_revisionObject

Preparing revision data. A bit of a special thing to grab page blocks



30
31
32
33
34
35
36
37
38
39
# File 'lib/occams/extensions/has_revisions.rb', line 30

def prepare_revision
  return if new_record?

  if (respond_to?(:fragments_attributes_changed) && fragments_attributes_changed) ||
     !(changed & revision_fields).empty?
    self.revision_data = revision_fields.each_with_object({}) do |field, c|
      c[field] = send("#{field}_was")
    end
  end
end

#restore_from_revision(revision) ⇒ Object

Assigning whatever is found in revision data and attempting to save the object



58
59
60
61
62
# File 'lib/occams/extensions/has_revisions.rb', line 58

def restore_from_revision(revision)
  return unless revision.record == self

  update!(revision.data)
end