Sha256: dde67d7c82001a118eae8ca3359608aee459b86671b9c06a53632b005db51d06

Contents?: true

Size: 1.16 KB

Versions: 1

Compression:

Stored size: 1.16 KB

Contents

module CouchPotato
  module Versioning
    def self.included(base)
      base.class_eval do
        property :version
        property :master_version_id
        cattr_accessor :new_version_condition
        before_create :set_version_default
        before_update :prepare_for_new_version
        
        def self.set_version_condition(lambda)
          self.new_version_condition = lambda
        end
      end
    end
    
    def versions(version_no = nil)
      if version_no
        CouchPotato::Persistence::Finder.new.find(self.class, :version => version_no).first
      elsif version == 1
        [self]
      else
        CouchPotato::Persistence::Finder.new.find(self.class, :master_version_id => _id).sort_by(&:version)
      end
    end
    
    private
    
    def set_version_default
      self.version ||= 1
    end
    
    def prepare_for_new_version
      if new_version_condition.nil? || new_version_condition.call(self)
        copy = self.class.get self._id
        copy._id = nil
        copy._rev = nil
        copy.master_version_id = self._id
        copy.save
        self.master_version_id ||= self.id
        self.version += 1
      end
    end
    
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
langalex-couch_potato-0.1 lib/couch_potato/versioning.rb