Module: Glue::Revisable
- Defined in:
- lib/glue/revisable.rb
Overview
Revision support for Og-managed classes.
class Article
is Revisable
property :body, String, :revisable => true
property :title, String
end
Generates the Revision class:
class Article::Revision
article.revisions
article.revise do |a|
a.title = 'hello'
a.body = 'world'
end
article.rollback(4)
Defined Under Namespace
Modules: Mixin
Class Method Summary collapse
Instance Method Summary collapse
-
#get_revision(rev) ⇒ Object
Return a revision.
-
#last_revision ⇒ Object
Return the last revision.
-
#revise(options = {}) {|_self| ... } ⇒ Object
(also: #revise!)
Can accept options like owner or a comment.
-
#revision_count ⇒ Object
(also: #revisions_count)
The number of revisions.
-
#rollback(rev, options = {}) ⇒ Object
Rollback to an older revision.
Class Method Details
.included(base) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/glue/revisable.rb', line 65 def self.included(base) super base.module_eval %{ class Revision < #{base} include Revisable::Mixin belongs_to #{base} end } base.has_many :revisions, base::Revision end |
Instance Method Details
#get_revision(rev) ⇒ Object
Return a revision.
101 102 103 104 |
# File 'lib/glue/revisable.rb', line 101 def get_revision(rev) return self if rev.to_i == self.revision self.revisions.find_one(:condition => "revision=#{rev}") end |
#last_revision ⇒ Object
Return the last revision.
108 109 110 |
# File 'lib/glue/revisable.rb', line 108 def last_revision self.revisions(:order => 'revision DESC', :limit => 1).first end |
#revise(options = {}) {|_self| ... } ⇒ Object Also known as: revise!
Can accept options like owner or a comment. You can specialize this in your app.
81 82 83 84 85 86 87 88 89 90 |
# File 'lib/glue/revisable.rb', line 81 def revise( = {}) if self.revision.nil? self.revision = 1 else self.revision += 1 end self.revisions << self.class::Revision.new(self, ) yield(self) if block_given? self.save end |
#revision_count ⇒ Object Also known as: revisions_count
The number of revisions.
114 115 116 |
# File 'lib/glue/revisable.rb', line 114 def revision_count self.revisions.count end |
#rollback(rev, options = {}) ⇒ Object
Rollback to an older revision.
95 96 97 |
# File 'lib/glue/revisable.rb', line 95 def rollback(rev, = {}) self.revise() { |obj| get_revision(rev).apply_to(obj) } end |