Method: MongoidExt::Versioning::ClassMethods#version_klass

Defined in:
lib/mongoid_ext/versioning.rb

#version_klassObject



106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# File 'lib/mongoid_ext/versioning.rb', line 106

def version_klass
  parent_klass = self
  @version_klass ||= Class.new do
    include Mongoid::Document
    include Mongoid::Timestamps

    cattr_accessor :parent_class
    self.parent_class = parent_klass

    self.storage_options = {
      :collection => "#{self.parent_class.collection_name}.versions"
    }

    field :message, :type => String
    field :data, :type => Hash

    belongs_to :owner, :class_name => parent_klass.versionable_options[:user_class]

    belongs_to :target, :polymorphic => true

    after_create :add_version

    validates_presence_of :target_id

    def content(key)
      cdata = self.data[key.to_s]
      if cdata.respond_to?(:join)
        cdata.join(" ")
      else
        cdata || ""
      end
    end

    private
    def add_version
      self.class.parent_class.push({:_id => self.target_id}, {:version_ids => self.id})
      self.class.parent_class.increment({:_id => self.target_id}, {:versions_count => 1})
    end
  end
end