Module: Revisions::InstanceMethods

Defined in:
lib/revisions.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(klass) ⇒ Object



23
24
25
# File 'lib/revisions.rb', line 23

def self.included(klass)
  klass.extend(ClassMethods)
end

Instance Method Details

#apply_revision(revision = nil) ⇒ Object

maps a revision’s changes onto the main object



68
69
70
71
72
73
74
75
76
# File 'lib/revisions.rb', line 68

def apply_revision(revision=nil)
  revision = latest_revision if revision.nil?
  unless revision.nil?
    revised_attributes = revision.attributes.reject {|k,v| self.unrevised_attributes.include?(k)}
    self.attributes=revised_attributes
    return true
  end
  false
end

#apply_revision!(revision = nil) ⇒ Object



78
79
80
81
82
83
84
# File 'lib/revisions.rb', line 78

def apply_revision!(revision=nil)
  if apply_revision(revision)
    save!
  else
    raise RuntimeError.new("No revision to apply!")
  end
end

#draft?Boolean

Returns:

  • (Boolean)


35
36
37
# File 'lib/revisions.rb', line 35

def draft?
  status == 'draft'
end

#latest_revisionObject



59
60
61
# File 'lib/revisions.rb', line 59

def latest_revision
  revisions.last
end

#pending_revisions?Boolean

Returns:

  • (Boolean)


63
64
65
# File 'lib/revisions.rb', line 63

def pending_revisions?
  !latest_revision.nil? && latest_revision.updated_at > self.updated_at
end

#published?Boolean

Returns:

  • (Boolean)


27
28
29
# File 'lib/revisions.rb', line 27

def published?
  status == 'published'
end

#revision?Boolean

Returns:

  • (Boolean)


31
32
33
# File 'lib/revisions.rb', line 31

def revision?
  status == 'revision'
end

#save_revisionObject



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/revisions.rb', line 39

def save_revision
  new_copy = self.clone
  attributes_to_nil = {}
  self.unrevised_attributes.each {|a| attributes_to_nil[a] = nil }
  new_copy.attributes=attributes_to_nil
  new_copy.created_at = new_copy.updated_at = Time.zone.now
  new_copy.status = 'revision'
  new_copy.revision_of = self.id
  if new_copy.save
    true
  else
    new_copy.errors.each {|attribute,message| self.errors.add(attribute,message)} 
    false
  end   
end

#save_revision!Object



55
56
57
# File 'lib/revisions.rb', line 55

def save_revision!
  save_revision || raise(ActiveRecord::RecordNotSaved)
end