Module: Revisions::InstanceMethods
- Defined in:
- lib/revisions.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#apply_revision(revision = nil) ⇒ Object
maps a revision’s changes onto the main object.
- #apply_revision!(revision = nil) ⇒ Object
- #draft? ⇒ Boolean
- #latest_revision ⇒ Object
- #pending_revisions? ⇒ Boolean
- #published? ⇒ Boolean
- #revision? ⇒ Boolean
- #save_revision ⇒ Object
- #save_revision! ⇒ Object
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
35 36 37 |
# File 'lib/revisions.rb', line 35 def draft? status == 'draft' end |
#latest_revision ⇒ Object
59 60 61 |
# File 'lib/revisions.rb', line 59 def latest_revision revisions.last end |
#pending_revisions? ⇒ 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
27 28 29 |
# File 'lib/revisions.rb', line 27 def published? status == 'published' end |
#revision? ⇒ Boolean
31 32 33 |
# File 'lib/revisions.rb', line 31 def revision? status == 'revision' end |
#save_revision ⇒ Object
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,| self.errors.add(attribute,)} false end end |
#save_revision! ⇒ Object
55 56 57 |
# File 'lib/revisions.rb', line 55 def save_revision! save_revision || raise(ActiveRecord::RecordNotSaved) end |