Module: FatJam::ActsAsRevisable::Revision
- Defined in:
- lib/acts_as_revisable/acts/revision.rb
Overview
This module is mixed into the revision classes.
Callbacks
-
before_restore
is called on the revision class before it is restored as the current record. -
after_restore
is called on the revision class after it is restored as the current record.
Defined Under Namespace
Modules: ClassMethods
Class Method Summary collapse
-
.included(base) ⇒ Object
:nodoc:.
Instance Method Summary collapse
- #find_revision(*args) ⇒ Object
- #from_revisable ⇒ Object
- #grab_my_branches ⇒ Object
-
#next_revision ⇒ Object
Return the revision after this one.
-
#previous_revision ⇒ Object
Return the revision prior to this one.
- #reverting_from ⇒ Object
- #reverting_from=(val) ⇒ Object
- #reverting_to ⇒ Object
- #reverting_to=(val) ⇒ Object
-
#revision_name ⇒ Object
Accessor for revisable_name just to make external API more pleasant.
-
#revision_name=(val) ⇒ Object
Setter for revisable_name just to make external API more pleasant.
-
#revision_setup ⇒ Object
Sets some initial values for a new revision.
Class Method Details
.included(base) ⇒ Object
:nodoc:
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/acts_as_revisable/acts/revision.rb', line 14 def self.included(base) #:nodoc: base.send(:extend, ClassMethods) class << base attr_accessor :revisable_revisable_class, :revisable_cloned_associations end base.instance_eval do set_table_name(revisable_class.table_name) acts_as_scoped_model :find => {:conditions => {:revisable_is_current => false}} CloneAssociations.clone_associations(revisable_class, self) define_callbacks :before_restore, :after_restore before_create :revision_setup # after_create :grab_my_branches [:current_revision, revisable_association_name.to_sym].each do |a| belongs_to a, :class_name => revisable_class_name, :foreign_key => :revisable_original_id end [[:ancestors, "<"], [:descendants, ">"]].each do |a| # Jumping through hoops here to try and make sure the # :finder_sql is cross-database compatible. :finder_sql # in a plugin is evil but, I see no other option. has_many a.first, :class_name => revision_class_name, :finder_sql => "select * from #{quoted_table_name} where #{quote_bound_value(:revisable_original_id)} = \#{revisable_original_id} and #{quote_bound_value(:revisable_number)} #{a.last} \#{revisable_number} and #{quote_bound_value(:revisable_is_current)} = #{quote_value(false)} order by #{quote_bound_value(:revisable_number)} #{(a.last.eql?("<") ? "DESC" : "ASC")}" end end end |
Instance Method Details
#find_revision(*args) ⇒ Object
44 45 46 |
# File 'lib/acts_as_revisable/acts/revision.rb', line 44 def find_revision(*args) current_revision.find_revision(*args) end |
#from_revisable ⇒ Object
83 84 85 |
# File 'lib/acts_as_revisable/acts/revision.rb', line 83 def from_revisable current_revision.for_revision end |
#grab_my_branches ⇒ Object
79 80 81 |
# File 'lib/acts_as_revisable/acts/revision.rb', line 79 def grab_my_branches self.class.revisable_class.update_all(["revisable_branched_from_id = ?", self[:id]], ["revisable_branched_from_id = ?", self[:revisable_original_id]]) end |
#next_revision ⇒ Object
Return the revision after this one.
54 55 56 |
# File 'lib/acts_as_revisable/acts/revision.rb', line 54 def next_revision self.class.find(:first, :conditions => {:revisable_original_id => revisable_original_id, :revisable_number => revisable_number + 1}) end |
#previous_revision ⇒ Object
Return the revision prior to this one.
49 50 51 |
# File 'lib/acts_as_revisable/acts/revision.rb', line 49 def previous_revision self.class.find(:first, :conditions => {:revisable_original_id => revisable_original_id, :revisable_number => revisable_number - 1}) end |
#reverting_from ⇒ Object
87 88 89 |
# File 'lib/acts_as_revisable/acts/revision.rb', line 87 def reverting_from from_revisable[:reverting_from] end |
#reverting_from=(val) ⇒ Object
91 92 93 |
# File 'lib/acts_as_revisable/acts/revision.rb', line 91 def reverting_from=(val) from_revisable[:reverting_from] = val end |
#reverting_to ⇒ Object
95 96 97 |
# File 'lib/acts_as_revisable/acts/revision.rb', line 95 def reverting_to from_revisable[:reverting_to] end |
#reverting_to=(val) ⇒ Object
99 100 101 |
# File 'lib/acts_as_revisable/acts/revision.rb', line 99 def reverting_to=(val) from_revisable[:reverting_to] = val end |
#revision_name ⇒ Object
Accessor for revisable_name just to make external API more pleasant.
64 65 66 |
# File 'lib/acts_as_revisable/acts/revision.rb', line 64 def revision_name #:nodoc: self[:revisable_name] end |
#revision_name=(val) ⇒ Object
Setter for revisable_name just to make external API more pleasant.
59 60 61 |
# File 'lib/acts_as_revisable/acts/revision.rb', line 59 def revision_name=(val) #:nodoc: self[:revisable_name] = val end |
#revision_setup ⇒ Object
Sets some initial values for a new revision.
69 70 71 72 73 74 75 76 77 |
# File 'lib/acts_as_revisable/acts/revision.rb', line 69 def revision_setup #:nodoc: now = Time.now self[:revisable_current_at] = now + 1.second self[:revisable_is_current] = false self[:revisable_branched_from_id] = current_revision[:revisable_branched_from_id] self[:revisable_type] = current_revision[:type] self[:revisable_number] = ((self.class.maximum(:revisable_number, :conditions => {:revisable_original_id => self[:revisable_original_id]}) || 0) + 1) unless self[:revisable_number] end |