Module: ComfortableMexicanSofa::HasRevisions::InstanceMethods

Defined in:
lib/comfortable_mexican_sofa/has_revisions.rb

Instance Method Summary collapse

Instance Method Details

#create_revisionObject

Revision is created only if relevant data changed



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

def create_revision
  return unless self.revision_data
  
  # creating revision
  if ComfortableMexicanSofa.config.revisions_limit.to_i != 0
    self.revisions.create!(:data => self.revision_data)
  end
  
  # blowing away old revisions
  ids = [0] + self.revisions.limit(ComfortableMexicanSofa.config.revisions_limit.to_i).collect(&:id)
  self.revisions.where('id NOT IN (?)', ids).destroy_all
end

#prepare_revisionObject

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



31
32
33
34
35
36
37
38
39
40
# File 'lib/comfortable_mexican_sofa/has_revisions.rb', line 31

def prepare_revision
  return if self.new_record?
  if (self.respond_to?(:blocks_attributes_changed) && self.blocks_attributes_changed) || 
    !(self.changed & revision_fields).empty?
    self.revision_data = revision_fields.inject({}) do |c, field|
      c[field] = self.send("#{field}_was")
      c
    end
  end
end

#restore_from_revision(revision) ⇒ Object

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



57
58
59
60
# File 'lib/comfortable_mexican_sofa/has_revisions.rb', line 57

def restore_from_revision(revision)
  return unless revision.record == self
  self.update_attributes!(revision.data)
end