lib/mongoid/versioning.rb in mongoid-2.0.0.beta.15 vs lib/mongoid/versioning.rb in mongoid-2.0.0.beta.16

- old
+ new

@@ -3,22 +3,32 @@ # Include this module to get automatic versioning of root level documents. # This will add a version field to the +Document+ and a has_many association # with all the versions contained in it. module Versioning extend ActiveSupport::Concern + included do field :version, :type => Integer, :default => 1 embeds_many :versions, :class_name => self.name set_callback :save, :before, :revise end + module ClassMethods #:nodoc: + attr_accessor :version_max + def max_versions(number) + self.version_max = number.to_i + end + end + # Create a new version of the +Document+. This will load the previous # document from the database and set it as the next version before saving - # the current document. It then increments the version number. + # the current document. It then increments the version number. If a #max_versions + # limit is set in the model and it's exceeded, the oldest version gets discarded. def revise last_version = self.class.first(:conditions => { :_id => id, :version => version }) if last_version self.versions << last_version.clone + self.versions.shift if self.class.version_max.present? && self.versions.length > self.class.version_max self.version = version + 1 @modifications["versions"] = [ nil, @attributes["versions"] ] if @modifications end end end